自动化测例架构介绍
1. 概述
1.1 项目介绍
该项目使用python语言实现,基于pytest测试框架且集成allure和jenkins,用于GreatDB-Cluster做回归测试.本文档会介绍使用Pytest+Allure+Jenkins测试GreatDB5.0的具体流程。
1.2 引入目的
- 减少回归测试的使用时间,提高效率
- 每个测例做为模块单独存在,方便维护和事后追溯
2. 测例整体流程
2.1 测试流程
- 将测例代码从gitlab上下载
- 运行测例
- 运行主程序
- 构建集群
- 在集群上生成数据
- 执行测试用例
- 使用logger定制输出详细的测试日志
- Assert断言
- 打印测试报告
- 发送邮件
2.2 测试框架
此项目通过pytest框架来运行测例.组件介绍如下:
- API: 对测例接口的封装
- TestSuit: 测例文件
- utils: 通过包封装
- report: 测试报告封装
2.3 自动化测试项目目录介绍
- 目录介绍
- api : 对测例接口的封装
- conf: 数据库模板配置文件
- data: 测试数据
- docs: 项目文档使用说明
- report: allure测试报告结果展示
- result: pytest测例的执行结果
- script: 所有测例脚本
- testcases: 测例文件包
2.4 测例内容
将测例从gitlab上下载.假如以现在测试的“集群数据重分布”测试举例,测试人员已经从多个维度编写好了测试项及测例代码。
2.4.1 关于集群数据重分布测例
- 单个normal表数据扩容1个shard,数据量为150万 rows (1G)
- 单个global表数据扩容1个shard,数据量为150万 rows(1G)
- 单个partition表数据扩容1个shard,数据量为150万 rows(1G)
2.4.2 普通测例代码主要步骤
- 构建集群
-
构建集群代码参照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)")
-
- 编写测试用例,这里使用“测例一:单个normal表数据扩容1个shard,数据量为150万 rows (1G)“来举例
- 运行测试用例
因为本项目集成jenkins,所以在jenkins上构建代码即可,具体使用如下。
在运行测例之前首先要确保jenkins和tomcat已经安装成功,8080端口已经启动,所需要的插件已经安装完毕。
在浏览器上输入 http:localhost:8080/jenkins就可以看到下面的画面了。
构建一个新项目后,这时就需要输入pytest命令来执行测例了。
上图的画框部分就是使用pytest运行测例的命令。关于pytest的命令使用在下文中会讲到。
- 测试报告
待所有测例执行完成,allure会立即打印测试报告,从测试报告中我们可以观察到以下信息
显示测试的执行情况 ,所用时长,以及趋势图.
从以下图中可以看到同种级别的报错执行成功或执行失败的用例所占的百分比.
可以看到单个测例的执行日志,重试的次数,执行的时长以及执行步骤
并且可以利用jenkins,包含指定的测试脚本向用户以邮件的形式发送报警信息.
3. pytest的使用
3.1 pytest的特点
-
简单灵活,容易上手
-
支持参数化
-
能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
-
pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等
-
测试用例的skip和xfail处理
-
可以很好的和jenkins集成
-
report框架----allure 也支持了pytest
3.2 pytest安装
- 安装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 # 运行指定模块中指定的方法
3.3 pytest参数
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 | 出现第几次失败后结束测试 |
3.4 pytest.ini文件解析
-
命令行选项
关于命令行可以参考上述表格,都是一些比较常用的选项.
-
pytest.ini文件的位置
一般放在程序的根目录中,不要随意改变位置和名字
-
addopts
此选项可以更改默认的命令行选项,当在cmd中执行用例时,就可以使用此选项代替.
写法如下:
[pytest] addopts = -v --returns=1 --count=2 --allureDir=result -n=10
addopts参数含义详见上方表格.
配置好后在命令行输入pytest就可以了.
-
log_cli
控制台实时输出日志
默认为false 或0
-
pytest的测例 收集
- 命名规则如下:
- 文件名以 test_*.py 文件和 *_test.py
- 以 test_ 开头的函数
- 以 Test 开头的类,不能包含 init 方法
- 以 test_ 开头的类里面的方法
- 命名规则如下:
4. allure的使用
4.1 allure的介绍
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
4.2 allure命令
- 语法
allure [options] [command] [command options]
- allure命令列表
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 |
- general 命令参数
option | comment |
---|---|
-c,–clean | 删除allure报告生成的目录 |
–config | allure命令行配置路径,如果指定会覆盖 |
–configDirectory | allure命令行配置目录 |
–profile | allure命令行配置文件 |
-o,–report-dir,–output | 生成allure报告的目录 |
使用:
allure general -o ./allure-report
- open命令参数
option | comment |
---|---|
-h,-host | 该host将用于启动报告的web服务器 |
-p,–port | 该port将用于启动报告的web服务器 |
4.3 运行allure命令
生成测试报告文件目录
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)]
4.3 allure订制参数
在测试代码中添加以下allure的订制参数,可以更好的帮测试人员进一步分析测例。
- @allure.epic 用于定义被测试功能,可理解是测试的项目
- @allure.feature 用于定义被测试的功能,也可理解是测试的二级项目,往下是titile
- @allure.title 用于定义测试功能,是feature的子集
- @allure.story 用于定义测试功能,是titile的子集
- @allure.serveity 代表测例失败的严重程度,可取值为
BLOCKER = 'blocker' Blocking defect
CRITICAL = 'critical' Critical defect
NORMAL = 'normal' Normal defect
MINOR = 'minor' Minor defect
TRIVIAL = 'trivial' Trival defect
- with allure.step() 执行步骤
- @allure.testcase: 测试用例
- @allure.issue: 测例bug的连接地址
关于以上参数可以测试报告中很好的展示,具体效果图如下:
参考:
- https://blog.csdn.net/qq_38870503/article/details/110764171
- https://blog.csdn.net/qq_33801641/article/details/109339373
- https://www.jenkins.io/doc/book/installing/
- https://docs.pytest.org/en/latest/