写点什么

妙!JMeter/Pytest/Ginkgo 和自建测试平台这样接入 Zadig

作者:KodeRover
  • 2022 年 5 月 17 日
  • 本文字数:5117 字

    阅读完需:约 17 分钟

妙!JMeter/Pytest/Ginkgo 和自建测试平台这样接入 Zadig

JMeter/Pytest/Ginkgo/自建测试平台如何接入 Zadig 概述 Zadig 作为一款先进的开源云原生软件交付产品,不但能提供强大的测试环境支持日常开发联调,还支持性能、功能、接口、UI、端到端自动化测试等诸多测试场景,做到对每一行代码变更做充分测试验证后再上线,严格保障软件的生命线。


本文将介绍主流的测试框架 JMeter / Pytest / Ginkgo 以及企业已有的自动化测试平台如何接入 Zadig,既能享受 Zadig 强大的环境治理能力,又能利用自动化测试最大程度的为软件交付保驾护航。


下面的案例源码均在 「Zadig 代码库」。如需操作实践过程,可以 fork 代码,或者将源码内容保存到自己的代码仓库中,并参考「官方文档」集成代码源。


Zadig on Github

Zadig on Gitee ​

JMeter 框架的使用

Apache JMeter 是基于 Java 开发的开源压力测试工具,被企业广泛采用。

组织自动化测试代码

  • Zadig GitHub 源码 位置:https://github.com/koderover/zadig/blob/main/examples/jMeter-demo/demo.jmx

  • Zadig Gitee 源码 位置:https://gitee.com/koderover/zadig/blob/main/examples/jMeter-demo/demo.jmx

本例将使用 JMeter 对 KodeRover 官网进行一个简单的压测,自动化测试代码如下:

<?xml version="1.0" encoding="UTF-8"?><jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.3">  <hashTree>    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">      <stringProp name="TestPlan.comments"></stringProp>      <boolProp name="TestPlan.functional_mode">false</boolProp>      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">        <collectionProp name="Arguments.arguments"/>      </elementProp>      <stringProp name="TestPlan.user_define_classpath"></stringProp>    </TestPlan>    <hashTree>      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">          <boolProp name="LoopController.continue_forever">false</boolProp>          <stringProp name="LoopController.loops">1</stringProp>        </elementProp>        <stringProp name="ThreadGroup.num_threads">10</stringProp>        <stringProp name="ThreadGroup.ramp_time">1</stringProp>        <boolProp name="ThreadGroup.scheduler">false</boolProp>        <stringProp name="ThreadGroup.duration"></stringProp>        <stringProp name="ThreadGroup.delay"></stringProp>        <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>      </ThreadGroup>      <hashTree>        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">            <collectionProp name="Arguments.arguments"/>          </elementProp>          <stringProp name="HTTPSampler.domain">www.koderover.com</stringProp>          <stringProp name="HTTPSampler.port"></stringProp>          <stringProp name="HTTPSampler.protocol">https</stringProp>          <stringProp name="HTTPSampler.contentEncoding"></stringProp>          <stringProp name="HTTPSampler.path">/</stringProp>          <stringProp name="HTTPSampler.method">GET</stringProp>          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>          <stringProp name="HTTPSampler.connect_timeout"></stringProp>          <stringProp name="HTTPSampler.response_timeout"></stringProp>        </HTTPSamplerProxy>        <hashTree/>      </hashTree>    </hashTree>  </hashTree></jmeterTestPlan> 
复制代码


配置 JMeter 的版本

Zadig 系统有内置的 JMeter 应用可直接使用,如果内置版本无法满足自动化测试诉求,可参考官方文档中「软件包管理」按需新增。本例以 JMeter5.4.3 版本示例如下。


系统管理员登录 Zadig -> 访问系统设置 -> 集成管理 -> 软件包管理,添加 JMeter:


参数说明:

  • 名称:jMeter

  • 版本:5.4.3

  • Bin Path:$HOME/jmeter/bin

  • 启用:开启

  • 安装包地址:https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.4.3.tgz

  • 安装脚本:

mkdir -p $HOME jmetertar -c $HOME xzf ${FILEPATH} --strip-components=1
复制代码


在 Zadig 中完成测试配置

进入项目的测试模块,点击 新建测试,完成测试配置。



本例配置说明如下:

  • 操作系统:ubuntu 20.04

  • 依赖的软件包: jMeter 5.4.3 和 java 1.12.0.1

  • 代码信息:选择已集成代码库(自动化测试源码所在的代码库)

  • 测试脚本:

#!/bin/bashset -ex
cd zadig/examples/jMeter-demo/
# run testjmeter -n -t demo.jmx -l demo.jtl
# generate reportsif [ -e reports ]; then rm -rf reportsfijmeter -g demo.jtl -o reports
复制代码
  • 高级配置 - 测试结果导出:配置测试结果导出以便在测试执行完毕后下载测试报告进行分析,本例中为 $WORKSPACE/zadig/examples/jMeter-demo/reports 

运行自动化测试并分析结果

配置完毕后,执行自动化测试。


待自动化测试运行完毕后,点击下载将测试报告下载到本地。


解读下载的测试报告,查看本次压力测试的结果,分析性能瓶颈。



Pytest 框架的使用

Pytest 是基于 Python 开源测试框架,比较常用于小型规模的测试。

组织自动化测试代码

根据实际测试业务和功能,编写自动化测试代码并组织在代码仓库中。本实践中将使用 Pytest 进行数学运算测试,自动化测试源码如下:

  • Zadig GitHub 源码 位置:https://github.com/koderover/zadig/blob/main/examples/pytest-demo/

  • Zadig Gitee 源码 位置:https://gitee.com/koderover/zadig/tree/main/examples/pytest-demo/

def increase(x):    return x + 1
def test_increase_1_to_2021_is_2022(): assert increase(2021) == 2022
def square(x): return x * x
def test_the_square_of_5_is_25(): assert square(5) == 25
def test_the_square_of_negative_5_is_negative_25(): assert square(-5) == -25
复制代码


配置 Python 的版本

Zadig 系统有内置的 Python 应用可直接使用,如果内置版本无法满足自动化测试诉求,可参考官方文档中「软件包管理」按需新增。本例以 Python 3.7.0 示例如下。


参数说明:

  • 名称:python

  • 版本:3.7.0

  • Bin Path:/usr/local/python/bin

  • 启用:开启

  • 安装包地址:https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

  • 安装脚本:

sudo apt-get updatesudo apt-get install -y build-essential libffi-dev python-dev python-setuptools python3-pipcurl -fsSl ${FILEPATH} -o /tmp/Python-3.7.0.tgzmkdir -p /opt/pythontar  -C  /opt/python -zxf  /tmp/Python-3.7.0.tgzcd /opt/python/Python-3.7.0./configure --prefix=/usr/local/python && make  && make install
复制代码


在 Zadig 中完成测试配置

进入项目的测试模块,点击 新建测试,完成测试配置。



本例配置说明如下:

  • 名称:ubuntu 20.04

  • 依赖的软件包:python 3.7.0

  • 代码信息:选择已集成代码库(自动化测试源码所在的代码库)

  • 测试脚本:

#!/bin/bashset -x
pip3 install pytest-htmlpip3 install pytest
cd $WORKSPACE/zadig/examples/pytest-demopytest --junitxml=./junit.xml --html=./report.html # 执行测试并生成 jUnit xml 测试报告和 HTML 测试报告
复制代码
  • Junit 报告所在目录:$WORKSPACE/zadig/examples/pytest-demo 运行自动化测试并分析结果配置完毕后,执行自动化测试。


运行自动化测试并分析结果

配置完毕后,执行自动化测试。


待自动化测试运行完毕后点击查看测试报告,可查看每一条用例的执行详情。


对于失败的用例,可以快速过滤重点分析。


Ginkgo 框架的使用

Ginkgo 是一个基于 Go 语言的开源 BDD 测试框架,广泛应用在单元测试、集成测试、验收测试、性能测试等测试场景。被 Go 语言开发社区、Kubernetes 项目广泛应用。


组织自动化测试代码

  • Zadig GitHub 源码 位置:https://github.com/koderover/zadig/tree/main/examples/test-demo/test

  • Zadig Gitee 源码 位置:https://gitee.com/koderover/zadig/blob/main/examples/test-demo/test


本实践中将对 KodeRover 官网及文档站的可用性进行自动化检测。


配置依赖的软件包版本

Zadig 系统有内置的 Ginkgo 应用及 Go 应用可直接使用,如果内置版本无法满足自动化测试诉求,可参考官方文档中「软件包管理」按需新增。本例依赖 Go 1.16 以及 Ginkgo 2.0.0,配置示例如下。

系统管理员登录 Zadig -> 访问系统设置 -> 集成管理 -> 软件包管理,分别添加 Ginkgo 和 Go:



Ginkgo 参数说明:

  • 名称:ginkgo

  • 版本:2.0.0

  • Bin Path:$HOME/ginkgo

  • 启用:开启

  • 安装包地址:http://resource.koderover.com/ginkgo-v2.0.0-Linux.tar.gz

  • 安装脚本:

mkdir -p $HOME/ginkgocd $HOME/ginkgotar -xvf ${FILEPATH}chmod +x $HOME/ginkgo/ginkgo 
复制代码


Go 参数说明:

  • 名称:go

  • 版本:1.16.13

  • Bin Path:$HOME/go/bin

  • 启用:开启

  • 安装包地址:https://go.dev/dl/go1.16.13.linux-amd64.tar.gz

  • 安装脚本:

tar -C $HOME -xzf ${FILEPATH}
复制代码


在 Zadig 中完成测试配置

进入项目的测试模块,点击 新建测试,完成测试配置。



本例配置说明如下:

  • 操作系统: ubuntu 20

  • 依赖的软件包:go 1.16.13 和 ginkgo 2.0.0

  • 代码信息:选择已集成代码库(自动化测试源码所在的代码库)

  • 测试脚本:

#!/bin/bashset -ex
export GOPROXY=https://goproxy.cn,directcd zadig/examples/test-demo/testginkgo -v --junit-report=out.xml # 运行测试用例并产出 Junit XML 格式的测试报告
复制代码
  • Junit 报告所在目录: zadig/examples/test-demo/test


运行自动化测试并分析结果

配置完毕后,执行自动化测试。


待自动化测试运行完毕后点击查看测试报告,可查看每一条用例的执行详情。对于失败的用例,可以快速过滤重点分析。



已有的测试平台接入

企业如果有自建的测试平台、或者使用一些开源、自研的测试框架,可以通过外部系统接入 Zadig。


集成外部系统

系统管理员访问系统设置 -> 集成管理 -> 其他系统集成,填写自动化测试平台系统的访问地址及 API Token。


配置工作流扩展模块

工作流中添加扩展模块,和集成的自动化测试平台系统进行对接:

  1. URL 中选择集成的外部测试平台,并填写对应的自动化测试任务

  2. 根据内部测试平台接口的实际需要配置请求 Headers

  3. 开启回调开关


配置完毕后,执行工作流时会自动触发已有测试平台中的测试任务,测试任务执行完毕后按照以下格式向 Zadig 发送回调请求,最终把测试结果反馈到 Zadig 工作流中。

# 请求:POST {安装 Zadig 后的地址}/api/callback
# 请求 Payload:{ "task_name": "voting-demo-workflow-dev", # Zadig 工作流名称 "task_id": 70, # Zadig 工作流任务 ID "project_name": "voting-demo", # 项目名称 "type": "workflow", "status": "fail", # 回调状态,success 或 fail "status_message": "10 cases fail", # 当回调状态为 fail 时,给 Zadig 的错误信息}

复制代码


解锁更多测试框架

如果 Zadig 内置的软件包/测试框架无法满足测试需求,可以在系统设置中添加新的软件包应用来支持更多的测试场景,可参考官方文档「软件包管理」。


Zadig,让工程师更专注创造!欢迎加入 开源吐槽群🔥


Zadig on Github

Zadig on Gitee ​

发布于: 刚刚阅读数: 5
用户头像

KodeRover

关注

软件交付更丝滑~ 2022.04.06 加入

Zadig 是 KodeRover 团队基于 K8s 自主研发的开源分布式持续交付产品,重点解决企业级软件交付验证的痛点,并且 100% 开放源代码

评论

发布
暂无评论
妙!JMeter/Pytest/Ginkgo 和自建测试平台这样接入 Zadig_DevOps_KodeRover_InfoQ写作社区