背景
最近想做一個簡單的pytest 測試,用allure出報告,結果發現網上的方法都是在windows上裝jenkins,然後用jenkins跑一個本地的運作環境。這種做法明顯很不2021年。于是我決定做一個在jenkins上使用docker運作pytest,然後再出allure報告的文章。
思路
- 在一台電腦上安裝jenkins,可以參考我的文章 https://www.yinyubo.cn/?p=268
- 準備python代碼,放到git上,jenkins通過git拉取代碼。代碼中包含Dockerfile,測試用例,requirements.txt
- 拉取代碼之後,通過Dockerfile産生一個python的鏡像,并且在鏡像中通過requirements.txt去安裝pytest,allure的相關依賴
- 通過這個鏡像,産生一個容器,容器指令運作pytest,産生測試報告,并且挂載到jenkins伺服器上.
- (注意,這裡為什麼要在容器裡運作pytest呢?因為如果在Dockerfile裡運作pytest,一旦産生測試失敗,是會導緻jenkins退出shell執行的)
- Jenkins通過allure插件讀取第4步産生的測試報告。生成allure報告
具體步驟
- 第一步忽略。請參考文章
- 準備python代碼。産生Dockerfile,測試用例,requirements.txt,如下圖 Dockerfile内容如下:
Jenkins進階之docker運作pytest并且出allure報告背景思路具體步驟
FROM python:3.7.3
WORKDIR .
ADD . .
RUN pip install -r requirements.txt
CMD ["pytest", "-q","TestCase/AIMP/Connect/AIMP_Connect_01.py","--alluredir","allure-results"]
requirements.txt内容如下:
allure-pytest==2.6.2
allure-python-commons==2.6.2
atomicwrites==1.3.0
attrs==19.1.0
colorama==0.4.1
more-itertools==7.0.0
pluggy==0.9.0
py==1.8.0
pytest==4.4.1
six==1.12.0
測試用例可以如下
import pytest
def test_success():
"""this test succeeds"""
print(1)
assert True
def test_failure():
print(2)
"""this test fails"""
assert False
def test_skip():
print(3)
"""this test is skipped"""
pytest.skip('for a reason!')
def test_broken():
raise Exception('oops')
def test_success2():
print(4)
assert True
3.jenkins配置,這裡如何拉取git代碼就不寫了。這個很簡單,主要是建構指令和建構後操作,這裡我複制了我的建構指令如下:
name="apitest"
docker build -t $name .
docker run -d --name $name -v $PWD/allure-results:/allure-results $name
效果如圖:
4.運作job,檢視allure結果