Zadig,作为领先的开源云原生 DevOps 平台,不仅为日常开发提供全面的测试环境以支持开发自测联调,还全面覆盖性能、功能、接口、UI 及端到端自动化测试等多种测试场景。它确保每一行代码在上线前经过严格的测试验证,牢牢守护软件质量的生命线。
在本文中,我们将探讨如何将 JMeter、Pytest、Ginkgo等主流测试框架,以及 Apipost、Apifox等自动化测试平台与 Zadig 集成。通过这种集成,用户可以充分利用 Zadig 在环境治理方面的强大功能,同时借助自动化测试最大化地保障软件交付的质量和效率。
本案例的所有源码均可在「 Zadig 代码库 」 (opens new window)中找到。若你希望进行实际操作和实践,可以通过 fork 代码库,或将源码保存至个人代码仓库。同时,为了顺利完成集成过程,请参考「官方文档」 (opens new window)以获得详细指导。
# JMeter 框架的使用
Apache JMeter (opens new window) 是基于 Java 开发的开源压力测试工具,被企业广泛采用。
# 组织自动化测试代码
JMeter 测试源码:https://github.com/koderover/zadig/blob/main/examples/jMeter-demo/demo.jmx (opens new window)
本例将使用 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 应用可直接使用,如果内置版本无法满足自动化测试诉求,可参考官方文档中「软件包管理 (opens new window)」按需新增。本例以 JMeter5.4.3 版本示例如下。
系统管理员登录 Zadig -> 访问系统设置 -> 集成管理 -> 软件包管理,添加 JMeter:
参数说明:
- 名称:
jMeter
- 版本:
5.6.3
- Bin Path:
$HOME/jmeter/bin
- 启用:
开启
- 安装包地址:https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.3.tgz (opens new window)
- 安装脚本:
mkdir -p $HOME/jmeter
tar -C $HOME/jmeter -xzf ${FILEPATH} --strip-components=1
# 在 Zadig 中完成测试配置
进入项目的测试模块,点击 新建测试
,完成测试配置。
本例配置说明如下:
- 操作系统:
ubuntu 20.04
- 依赖的软件包:
jMeter 5.6.3
和java 1.12.0.1
- 代码信息:选择已集成代码库(自动化测试源码所在的代码库)
- 测试脚本:
#!/bin/bash
set -ex
cd zadig/examples/jMeter-demo/
# run test
jmeter -n -t demo.jmx -l demo.jtl
# generate reports
if [ -e reports ]; then
rm -rf reports
fi
jmeter -g demo.jtl -o reports
- 高级配置 - 测试结果导出:配置测试结果导出以便在测试执行完毕后下载测试报告进行分析,本例中为
$WORKSPACE/zadig/examples/jMeter-demo/reports
# 运行自动化测试并分析结果
配置完毕后,执行自动化测试。
待自动化测试运行完毕后,点击下载
将测试报告下载到本地。
解读下载的测试报告,查看本次压力测试的结果,分析性能瓶颈。
# Pytest 框架的使用
Pytest (opens new window) 是基于 Python 开源测试框架,比较常用于小型规模的测试。
# 组织自动化测试代码
根据实际测试业务和功能,编写自动化测试代码并组织在代码仓库中。本实践中将使用 Pytest 进行数学运算测试,自动化测试源码如下:
Pytest 测试源码:https://github.com/koderover/zadig/blob/main/examples/pytest-demo/ (opens new window)
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 自定义镜像
执行 Pytest 环境中需事先安装 Python,在 Zadig 中配置自定义镜像,参考官方文档:自定义镜像管理 | Zadig 文档 (opens new window)。
Python 3.8 自定义镜像 Dockerfile 参考:
FROM python:3.8-slim
RUN apt-get clean && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y curl git tzdata
# 修改时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 安装 docker client
RUN curl -fsSL "http://resources.koderover.com/docker-cli-v19.03.2.tar.gz" -o docker.tgz &&\
tar -xvzf docker.tgz &&\
mv docker/* /usr/local/bin
将上述 Dockerfile 打成镜像后,在 Zadig 「自定义镜像」中完成配置。
# 在 Zadig 中完成测试配置
进入项目的测试模块,点击 新建测试
,完成测试配置。
本例配置说明如下:
- 操作系统:·
- 代码信息:选择已集成代码库(自动化测试源码所在的代码库)
- 测试脚本:
#!/bin/bash
set -x
pip install pytest-html
cd $WORKSPACE/zadig/examples/pytest-demo
pytest --junitxml=./junit.xml --html=./report.html # 执行测试并生成 jUnit xml 测试报告和 HTML 测试报告
- Junit 报告所在目录:
$WORKSPACE/zadig/examples/pytest-demo
# 运行自动化测试并分析结果
配置完毕后,执行自动化测试。
待自动化测试运行完毕后点击查看测试报告,可查看每一条用例的执行详情。
对于失败的用例,可以快速过滤重点分析。
# Ginkgo 框架的使用
Ginkgo (opens new window) 是一个基于 Go 语言的开源 BDD 测试框架,广泛应用在单元测试、集成测试、验收测试、性能测试等测试场景。被 Go 语言开发社区、Kubernetes 项目广泛应用。
# 组织自动化测试代码
Ginkgo 测试源码 :https://github.com/koderover/zadig/tree/main/examples/test-demo/test (opens new window)
本实践中将对 KodeRover 官网及文档站的可用性进行自动化检测。
package test
import (
"net/http"
"testing"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
func TestDemo(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "TestDemo Suite")
}
func HelloGeek(host string) (int, error) {
req, _ := http.NewRequest("GET", host, nil)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
response, err := client.Do(req)
if err != nil {
return 0, err
}
return response.StatusCode, err
}
var _ = Describe("ZadigWebsitesLifeProbe", func() {
It("Case1: Hello, Welcome to https://www.koderover.com", func() {
host := "https://www.koderover.com"
code, err := HelloGeek(host)
Expect(err).Should(BeNil())
Expect(code).Should(Equal(200))
})
It("Case2: Hello, Welcome to https://docs.koderover.com/", func() {
host := "https://docs.koderover.com/"
code, err := HelloGeek(host)
Expect(err).Should(BeNil())
Expect(code).Should(Equal(200))
})
It("Case3: Sorry, https://www.koderover.com.cn won't work", func() {
host := "https://www.koderover.com.cn"
_, err := HelloGeek(host)
Expect(err).Should(Not(BeNil()))
})
})
# 配置依赖的软件包
Zadig 系统有内置的 Ginkgo 应用及 Go 应用可直接使用,如果内置版本无法满足自动化测试诉求,可参考官方文档中「软件包管理 (opens new window)」按需新增。本例依赖 Go 1.16 以及 Ginkgo 2.0.0,配置示例如下。
系统管理员登录 Zadig -> 访问系统设置 -> 集成管理 -> 软件包管理,分别添加 Go 和 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}
Ginkgo 参数说明:
- 名称:
ginkgo
- 版本:
2.0.0
- Bin Path:
$HOME/ginkgo
- 启用:
开启
- 安装包地址:
http://resource.koderover.com/ginkgo-v2.0.0-Linux.tar.gz
- 安装脚本:
mkdir -p $HOME/ginkgo
tar -C $HOME/ginkgo -xvf ${FILEPATH}
chmod +x $HOME/ginkgo/ginkgo
# 在 Zadig 中完成测试配置
进入项目的测试模块,点击 新建测试
,完成测试配置。
本例配置说明如下:
- 操作系统:
ubuntu 20.04
- 依赖的软件包:
go 1.16.13
和ginkgo 2.0.0
- 代码信息:选择已集成代码库(自动化测试源码所在的代码库)
- 测试脚本:
#!/bin/bash
set -ex
export GOPROXY=https://goproxy.cn,direct
cd zadig/examples/test-demo/test
ginkgo -v --junit-report=out.xml # 运行测试用例并产出 Junit XML 格式的测试报告
- Junit 报告所在目录:
$WORKSPACE/zadig/examples/test-demo/test
# 运行自动化测试并分析结果
配置完毕后,执行自动化测试。
待自动化测试运行完毕后点击查看测试报告,可查看每一条用例的执行详情。对于失败的用例,可以快速过滤重点分析。
企业如果有使用其他开源、自研的测试框架,可通过开发工作流任务接入 Zadig,具体方式参考文档 (opens new window)。如果有购买的商业测试平台或自建测试平台,可以参考 Apifox/Apipost/自建等测试平台如何接入 Zadig (opens new window)。