Zadig 作为一款先进的开源云原生软件交付产品,不但能提供强大的测试环境支持日常开发联调,还支持性能、功能、接口、UI、端到端自动化测试等诸多测试场景,做到对每一行代码变更做充分测试验证后再上线,严格保障软件的生命线。
本文将介绍主流的测试框架 JMeter / Pytest / Ginkgo 以及企业已有的自动化测试平台如何接入 Zadig,既能享受 Zadig 强大的环境治理能力,又能利用自动化测试最大程度的为软件交付保驾护航。
下面的案例源码均在 「Zadig 代码库」。如需操作实践过程,可以 fork 代码,或者将源码内容保存到自己的代码仓库中,并参考「官方文档」集成代码源。
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 官网进行一个简单的压测,自动化测试代码如下:
false
true
false
continue
false
1
10
1
false
true
www.koderover.com
https
/
GET
true
false
true
false
配置 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 jmeter tar -c $HOME xzf ${FILEPATH} --strip-components=1
在 Zadig 中完成测试配置
进入项目的测试模块,点击 新建测试
,完成测试配置。
本例配置说明如下:
-
操作系统:
ubuntu 20.04
-
依赖的软件包:
JMeter 5.4.3
和jave 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 是基于 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:
/user/local/python/bin
-
启用:
开启
-
安装包地址:
https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
-
安装脚本:
-
sudo apt-get update sudo apt-get install -y build-essential libffi-dev python-dev python-setuptools python3-pip curl -fsSl ${FILEPATH} -o /tmp/Python-3.7.0.tgz mkdir -p /opt/python tar -C /opt/python -zxf /tmp/Python-3.7.0.tgz cd /opt/python/Python-3.7.0 ./configure --prefix=/usr/local/python && make && make install
在 Zadig 中完成测试配置
进入项目的测试模块,点击 新建测试
,完成测试配置。
本配置说明如下:
-
名称:
ubuntu 20.04
-
依赖的软件包:
python 3.7.0
-
代码信息:选择已集成代码库(自动化测试源码所在的代码库)
-
测试脚本:
-
#!/bin/bash set -x pip3 install pytest-html pip3 install pytest cd $WORKSPACE/zadig/examples/pytest-demo pytest --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 官网及文档站的可用性进行自动化检测。
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 应用可直接使用,如果内置版本无法满足自动化测试诉求,可参考官方文档中 「软件包管理」 按需新增。本例依赖 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/ginkgo cd $HOME/ginkgo tar -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.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 报告所在目录:
zadig/examples/test-demo/test
运行自动化测试并分析结果
配置完毕后,执行自动化测试。
待自动化测试运行完毕后点击查看测试报告,可查看每一条用例的执行详情。对于失败的用例,可以快速过滤重点分析。
已有的测试平台接入
企业如果有自建的测试平台、或者使用一些开源、自研的测试框架,可以通过外部系统接入 Zadig。
集成外部系统
系统管理员访问系统设置 -> 集成管理 -> 其他系统集成,填写自动化测试平台系统的访问地址及 API Token。
配置工作流 扩展 模块
工作流中添加扩展
模块,和集成的自动化测试平台系统进行对接:
-
URL 中选择集成的外部测试平台,并填写对应的自动化测试任务
-
根据内部测试平台接口的实际需要配置请求 Headers
-
开启回调开关
配置完毕后,执行工作流时会自动触发已有测试平台中的测试任务,测试任务执行完毕后按照以下格式向 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,让工程师更专注创造!欢迎加入 开源吐槽群