本篇文章为“CI&CD落地实践系列”文章之8,将重点介绍Jenkins如何接入Pytest+Allure自动化测试项目。Jenkins环境搭建相关及Jenkins接入前后台项目可参考前面几篇文章:
在开始配置Jenkins项目前,先简单介绍一下我的Python自动化测试项目构成:
报告工具类的主要作用是:针对不同系统运行不同的allure,Windows运行的是'allure.bat',Linux系统运行的是'allure'。
import os
import sys
import platform
path = os.path.join(os.path.dirname(os.path.dirname((os.path.abspath(__file__)))), 'lib')
allure_path = os.path.join(path, 'allure', 'bin')
sys.path.append(allure_path)
class Report:
"""报告工具类"""
@property
def allure(self):
if platform.system() == "Windows":
cmd = os.path.join(allure_path, 'allure.bat')
else:
cmd = os.path.join(allure_path, 'allure')
return cmd
这里有个小技巧:将下载好的allure工具存放至lib目录下,这样无论是上传代码到Git、到其他电脑上拉取,还是打包整个工程,都不用再独立安装allure。
比如我要实现的是某个项目例如rs项目的测试,因此我只需要实现Python3运行test_case目录下rs项目对应的测试用例即可,这里可以在main目录下设计一个用例执行文件'run_testcase_with_allure.py',运行带有指定标签的测试用例,例如前面定义的'rs_smoke'标签。
# coding:utf-8
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))
import threading
import pytest
from api_test.common.report import Report
project_root = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) # 获取当前文件的父级目录
report_dir = os.path.join(project_root, 'report') # 指定报告目录
result_dir = os.path.join(report_dir, 'allure_result') # 指定存放测试结果的目录
allure_report = os.path.join(report_dir, 'allure_report') # 指定存放allure报告的目录
report = Report() # 实例化报告类
# 定义标签,运行带有指定标签的测试用例,标签可以是名称,也可以是表达式
tag = "rs_smoke"
def run_pytest():
pytest.main(["-v", "-s", "-m", f"{tag}", f"--alluredir={result_dir}"])
def generate_report():
cmd = f"{report.allure} generate {result_dir} -o {allure_report} --clean"
print(os.popen(cmd).read())
if __name__ == '__main__':
run = threading.Thread(target=run_pytest)
gen = threading.Thread(target=generate_report)
run.start()
run.join()
gen.start()
gen.join()
当然还有其他很多种用例调度的方式,例如通过pytest中的'-k'参数匹配指定的测试用例文件、测试用例类等,只要能正常驱动用例运行即可。
上述用例调度策略中的run_pytest和generate_report方法使用的是离线生成测试报告,转换成命令行其实就是:
pytest -v -s -m "rs_smoke" --alluredir=./report_allure
allure generate allure_report -o report
执行generate命令后,会生成一个report的目录,通过该目录下的index.html即可访问离线报告:
生成报告如下:
我的Jenkins分布式环境部署情况如下:
节点 | 服务器地址 | 系统 |
---|---|---|
Master-主节点 | 192.168.1.20 | Linux |
Slave-从节点1 | 192.168.1.122 | Linux |
Slave-从节点2 | 192.168.1.188 | Windows |
Jenkins接入自动化测试项目需要提前准备好项目的运行环境:Python3环境、Allure工具、Jenkins-Allure插件等。
Linux(CentOS)操作系统安装Python3可参考前面的一篇文章《Linux下一键安装Python3&更改镜像源&虚拟环境管理技巧》
① 将allure-2.17.2.zip上传到执行机并解压:
unzip allure-2.17.2.zip
mv allure-2.17.2 allure
② 配置allure环境变量
编辑/etc/profile配置文件,添加如下两行内容:
export ALLURE_HOME=/home/allure
export PATH={PATH}:{ALLURE_HOME}"/bin"
source /etc/profile
输入allure --version显示版本或allure --help返回帮助信息则表示配置成功
插件中心搜索Allure插件安装
有两种方式,一种是自动安装,一种是手动安装。由于前面我们已经安装并配置完allure,因此取消勾选“自动安装”即可。别名可以任取,安装目录为allure前面安装的目录:
新建一个自由风格的项目,在General中配置Git仓库地址,配置如下:
在Build Steps中增加构建步骤,选择“执行shell”
shell 脚本内容如下:
#!/bin/bash
path=$WORKSPACE/api_test/main/
cd $WORKSPACE/api_test/lib/allure/bin && chmod +x allure
source /home/python_venv/auto_test/bin/activate && cd $path && python run_testcase_with_allure.py
构建后的操作中选择“Allure Report”,驱动allure生成测试报告
如上图所示,本代码工程指定的存放allure result的相对路径为:工程目录/api_test/report/allure_result,则在Jenkins的path配置中只需要填上“api_test/report/allure_result”
手动触发构建
尝试切换命令行执行,仍然报同样的错误:
在网上查找了一下,原来是依赖库没有安装完整,缺少了allure-pytest这个库,将其安装即可:
pip install allure-pytest
再次执行构建,构建成功:
生成的allure报告如下:
企微消息通知发送成功: