该项目使用python语言实现,基于pytest测试框架且集成allure和jenkins,用于GreatDB-Cluster做回归测试.本文档会介绍使用Pytest+Allure+Jenkins测试GreatDB5.0的具体流程。
此项目通过pytest框架来运行测例.组件介绍如下:
将测例从gitlab上下载.假如以现在测试的“集群数据重分布”测试举例,测试人员已经从多个维度编写好了测试项及测例代码。
构建集群代码参照pytest_autotest项目中api包中setup.py文件
关于文件的使用
# 运行以下代码即可创建1个sqlnode,1个shard且每个shard中只有一个datanode的集群.
from api import GreatDB5
GreatDB5(sqlnodesNum=1,
shardsNum=1,
datanodesNum=1,
clusterName="cluster",
packageName="greatdb-cluster-5.0.7-9b393b167b4-Linux-glibc2.17-x86_64.tar").setupA()
生成数据代码可以参照pytest_autotest项目中api包中的ExecSql.py文件
conn = getPoolDB(getPooledDB("sqlnode1"), 'sqlnode1', "test_")
execSqlSingle(conn_db = conn,
str_sql = "create table t_hash(
c1 int primary key,
c2 int, c3 varchar(30))
engine = greatdb
partition by hash(c1) partitions 4;
")
insertData(conn_db = conn_db,
tb_name = "t_hash",
rows = 100,
c1 = "int",
c2 = "int",
c3 = "varchar(30)")
构建一个新项目后,这时就需要输入pytest命令来执行测例了。
上图的画框部分就是使用pytest运行测例的命令。关于pytest的命令使用在下文中会讲到。
待所有测例执行完成,allure会立即打印测试报告,从测试报告中我们可以观察到以下信息
显示测试的执行情况 ,所用时长,以及趋势图.
从以下图中可以看到同种级别的报错执行成功或执行失败的用例所占的百分比.
可以看到单个测例的执行日志,重试的次数,执行的时长以及执行步骤
并且可以利用jenkins,包含指定的测试脚本向用户以邮件的形式发送报警信息.
简单灵活,容易上手
支持参数化
能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等
测试用例的skip和xfail处理
可以很好的和jenkins集成
report框架----allure 也支持了pytest
pip install -U pytest
pip3 install pytest-xdist # 多线程运行
pip3 install pytest-rerunfailures # 如果测例没跑通,重试运行测例
pytest xx.py
pytest test/
pytest xxx.py -n NUM # 多线程运行
pytest xx.py::TestCase # 运行指定模块中指定的方法
option | explain | comment |
---|---|---|
-q | 输出的结果缩短显示 | |
-s | 显示在python程序中的print输出的内容,如是不加则不会显示 | |
–durations | 获取最慢的n个用例的执行耗时 | |
–durations-min | 此参数和–durations边用,表示在–durations-min时间段之内,获取最慢的测例耗时. | |
-m | pytest调用模块 | |
–pyargs | pytest调用包 | |
-n NUM | 同时运行多个进程数,NUM用于填写并发数,在使用此选项前要安装pytest-xdist包 | |
–returns NUM | 重试运行的次数 | |
–html | 生成测试报告 | |
–junitxml | 可以被jenkins工具解析 | |
–doctest-glob | 执行doctest | |
–doctest-moudles | 执行doctest | |
–doctest-continue-on-failure | 当执行doctest失败时继续 | |
–lf | 只运行失败的测例 | |
–ff | 失败的测例优先运行,之后再运行其他测例 | |
–cache-show | 检查缓存内容 | |
–cache-clear | 清除缓存内容 | |
–maxfail | 在出现第几个错误后停止 | |
–pdb | 使用pdb调试 | |
-v | 控制pytest输出的详细性,测试会话进度,测例失败后的断言细节 | |
–show-capture=no | 禁用失败捕获的日志 | |
–disable-warnings | 禁用warnings自动收集功能 | |
–alluredir=DIR | 使用allure生成测试报告目录,此目录可以不存在 | |
–clean-alluredir | 清理测试报告目录 | |
-x | 出现第几次失败后结束测试 |
命令行选项
关于命令行可以参考上述表格,都是一些比较常用的选项.
pytest.ini文件的位置
一般放在程序的根目录中,不要随意改变位置和名字
addopts
此选项可以更改默认的命令行选项,当在cmd中执行用例时,就可以使用此选项代替.
写法如下:
[pytest]
addopts = -v --returns=1 --count=2 --allureDir=result -n=10
addopts参数含义详见上方表格.
配置好后在命令行输入pytest就可以了.
log_cli
控制台实时输出日志
默认为false 或0
pytest的测例 收集
Allure是一款非常轻量级并且非常灵活的开源测试报告生成框架。 它支持绝大多数测试框架, 例如TestNG、Pytest、JUint等。它简单易用,易于集成。下面就Pytest如何与Allure集成做详细介绍
下载:
https://github.com/allure-framework/allure2/releases/download/2.15.0/allure-2.15.0.zip
安装:
pip3 install allure-pytest
unzip allure-2.15.0.zip
jiaona@OLTP-greatdb-1:/monitor/autotest/autotest_program/t/cdc_to_cluster$ tail /etc/profile
#allure
export PATH=/usr/local/allure-2.15.0/bin:$PATH
allure [options] [command] [command options]
command | comment | synax |
---|---|---|
generate | 生成allure的html报告 | generate [options] allure_reult_dir |
serve | 打开报告,打开使用pytest的执行结果 | serve [options] allure_result_dir |
open | 打开生成的allure报告,就是打开generate命令生成的报告 | open [options] allure_report_dir |
option | comment |
---|---|
-c,–clean | 删除allure报告生成的目录 |
–config | allure命令行配置路径,如果指定会覆盖 |
–configDirectory | allure命令行配置目录 |
–profile | allure命令行配置文件 |
-o,–report-dir,–output | 生成allure报告的目录 |
使用:
allure general -o ./allure-report
option | comment |
---|---|
-h,-host | 该host将用于启动报告的web服务器 |
-p,–port | 该port将用于启动报告的web服务器 |
生成测试报告文件目录
pytest script/parameter_test.py
# result目录事先不用创建
根据result目录中测试结果生成html格式的结果文件:
allure generate ./result/ -o ./report/html --clean
打开测试报告网页版:端口是随机的
allure serve result
# result: 是存放测试报告的文件目录
根据测试结果打开测试报告网页版:
allure open -h 172.16.70.214 -p 8083 report/
打开之后,就形成了这样一个界面.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g3xNz8Nz-1636603581120)(./pic/image-20211109144550654.png)]
在测试代码中添加以下allure的订制参数,可以更好的帮测试人员进一步分析测例。
BLOCKER = 'blocker' Blocking defect
CRITICAL = 'critical' Critical defect
NORMAL = 'normal' Normal defect
MINOR = 'minor' Minor defect
TRIVIAL = 'trivial' Trival defect
关于以上参数可以测试报告中很好的展示,具体效果图如下: