妙!JMeter/Pytest/Ginkgo 和自建測試平臺這樣接入 Zadig
Zadig 作為一款先進的開源雲原生軟體交付產品,不但能提供強大的測試環境支援日常開發聯調,還支援效能、功能、介面、UI、端到端自動化測試等諸多測試場景,做到對每一行程式碼變更做充分測試驗證後再上線,嚴格保障軟體的生命線。
本文將介紹主流的測試框架 JMeter / Pytest / Ginkgo 以及企業已有的自動化測試平臺如何接入 Zadig,既能享受 Zadig 強大的環境治理能力,又能利用自動化測試最大程度的為軟體交付保駕護航。
下面的案例原始碼均在 「Zadig 程式碼庫」。如需操作實踐過程,可以 fork 程式碼,或者將原始碼內容儲存到自己的程式碼倉庫中,並參考「官方文件」整合程式碼源。
JMeter 框架的使用
Apache JMeter 是基於 Java 開發的開源壓力測試工具,被企業廣泛採用。
組織自動化測試程式碼
-
Zadig GitHub 原始碼 位置:http://github.com/koderover/zadig/blob/main/examples/jMeter-demo/demo.jmx
-
Zadig Gitee 原始碼 位置:http://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 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 原始碼 位置:http://github.com/koderover/zadig/blob/main/examples/pytest-demo/
-
Zadig Gitee 原始碼 位置:http://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
-
啟用:
開啟
-
安裝包地址:
http://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 原始碼 位置:http://github.com/koderover/zadig/tree/main/examples/test-demo/test
-
Zadig Gitee 原始碼 位置:http://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 http://www.koderover.com", func() {
host := "http://www.koderover.com"
code, err := HelloGeek(host)
Expect(err).Should(BeNil())
Expect(code).Should(Equal(200))
})
It("Case2: Hello, Welcome to http://docs.koderover.com/", func() {
host := "http://docs.koderover.com/"
code, err := HelloGeek(host)
Expect(err).Should(BeNil())
Expect(code).Should(Equal(200))
})
It("Case3: Sorry, http://www.koderover.com.cn won't work", func() {
host := "http://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
-
啟用:
開啟
-
安裝包地址:
http://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=http://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,讓工程師更專注創造!歡迎加入 開源吐槽群🔥
- Zadig 洞態 IAST:讓安全溶於持續交付
- TT 語音落地 Zadig:開源共創 Helm 接入場景,環境治理搞得定!
- 00後雲工程師用 Zadig 為企業研發開源節流
- Zadig 構建究竟有何強大?一起來實踐
- 妙盈科技全面實施 Zadig 擁抱雲原生
- Zadig SonarQube,為開發過程安全保駕
- Zadig v1.12.0 推出 VS Code 外掛,全面支援 GitOps ,好工具就要到最後一公里
- 鈦動科技:我們的 Zadig 落地之路
- 眾樂邦就這樣與 Zadig 結緣了
- Zadig 面向開發者的自測聯調子環境技術方案詳解
- 易快報:我們用 Zadig 實現萬次構建部署,聰明運維,釋放開發生產力
- 構建部署效率,快了一倍不止,老百姓大藥房這樣落地 Zadig
- 善事利器 - 我是如何在藥師幫掌店易專案落地 Zadig 的
- “鍋圈食匯”的容器化之路
- 使用 GitLab/GitHub/Gerrit Zadig 實現主幹開發主幹釋出(含位元組飛書實踐)
- 我們為什麼選擇使用分散式持續交付新星 Zadig ?
- 在星雲科技,我們使用 Zadig 實現多環境並行釋出,上千次周部署
- Istio SkyWalking Spring Boot 實戰 -Zadig 自測模式搞定開發者子環境
- 妙!JMeter/Pytest/Ginkgo 和自建測試平臺這樣接入 Zadig
- 誰說 Zadig 只能複製環境?數百微服務一套環境實現高效協作