Pytest+Allure+Jenkins自动化测例架构介绍

自动化测例架构介绍

1. 概述

1.1 项目介绍

该项目使用python语言实现,基于pytest测试框架且集成allure和jenkins,用于GreatDB-Cluster做回归测试.本文档会介绍使用Pytest+Allure+Jenkins测试GreatDB5.0的具体流程。

1.2 引入目的

  • 减少回归测试的使用时间,提高效率
  • 每个测例做为模块单独存在,方便维护和事后追溯

2. 测例整体流程

2.1 测试流程

  1. 将测例代码从gitlab上下载
  2. 运行测例
    • 运行主程序
    • 构建集群
    • 在集群上生成数据
    • 执行测试用例
    • 使用logger定制输出详细的测试日志
    • Assert断言
    • 打印测试报告
  3. 发送邮件

2.2 测试框架

在这里插入图片描述

此项目通过pytest框架来运行测例.组件介绍如下:

  • API: 对测例接口的封装
  • TestSuit: 测例文件
  • utils: 通过包封装
  • report: 测试报告封装

2.3 自动化测试项目目录介绍

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j2sggJye-1636603581112)(./pic/image-20211109150024392.png)]

  • 目录介绍
    • 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)“来举例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JplxsH6A-1636603581113)(./pic/1.png)]

在这里插入图片描述

  • 运行测试用例
    因为本项目集成jenkins,所以在jenkins上构建代码即可,具体使用如下。
    在运行测例之前首先要确保jenkins和tomcat已经安装成功,8080端口已经启动,所需要的插件已经安装完毕。
    在浏览器上输入 http:localhost:8080/jenkins就可以看到下面的画面了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WYF13nzO-1636603581115)(./pic/3.png)]

构建一个新项目后,这时就需要输入pytest命令来执行测例了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p8kRA4aq-1636603581116)(./pic/4.png)]

上图的画框部分就是使用pytest运行测例的命令。关于pytest的命令使用在下文中会讲到。

  • 测试报告

待所有测例执行完成,allure会立即打印测试报告,从测试报告中我们可以观察到以下信息

显示测试的执行情况 ,所用时长,以及趋势图.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xqIfkQj8-1636603581117)(./pic/image-20211109144550654.png)]

从以下图中可以看到同种级别的报错执行成功或执行失败的用例所占的百分比.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-djMa46gR-1636603581117)(./pic/image-20211109144735003.png)]

可以看到单个测例的执行日志,重试的次数,执行的时长以及执行步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0DJzsV8C-1636603581118)(./pic/image-20211109145046904.png)]

并且可以利用jenkins,包含指定的测试脚本向用户以邮件的形式发送报警信息.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OGPsA98a-1636603581118)(./pic/image-20211109145535876.png)]

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参数

optionexplaincomment
-q输出的结果缩短显示
-s显示在python程序中的print输出的内容,如是不加则不会显示
–durations获取最慢的n个用例的执行耗时
–durations-min此参数和–durations边用,表示在–durations-min时间段之内,获取最慢的测例耗时.
-mpytest调用模块
–pyargspytest调用包
-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命令列表
commandcommentsynax
generate生成allure的html报告generate [options] allure_reult_dir
serve打开报告,打开使用pytest的执行结果serve [options] allure_result_dir
open打开生成的allure报告,就是打开generate命令生成的报告open [options] allure_report_dir
  • general 命令参数
optioncomment
-c,–clean删除allure报告生成的目录
–configallure命令行配置路径,如果指定会覆盖
–configDirectoryallure命令行配置目录
–profileallure命令行配置文件
-o,–report-dir,–output生成allure报告的目录

使用:

allure general -o ./allure-report
  • open命令参数
optioncomment
-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的连接地址

关于以上参数可以测试报告中很好的展示,具体效果图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdMJHdXY-1636603581121)(./pic/6.png.jpg)]
参考:

  • 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/
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest是一个用于Python编写的测试框架,它结合了unittest和nose等测试工具的优点,具有简单易用、灵活且可扩展的特点。pytest允许我们使用简洁的语法编写测试用例,并提供了丰富的断言库和丰富的插件支持,方便我们编写高效、可维护的自动化测试脚本。 而Allure是一种生成漂亮报告的测试结果框架,它支持多种编程语言,并提供了美观直观的图表、图标和饼状图,可以展示测试结果的统计数据,以及失败和通过测试的详细信息。通过Allure的报告,我们可以更加直观地查看测试结果,方便问题的定位和分析。 Jenkins是一个流行的持续集成和持续交付工具,它可以帮助我们自动化构建、测试和部署软件项目。Jenkins提供了丰富的插件生态系统,可以与各种测试框架和工具集成,如pytestAllure。通过与Jenkins的集成,我们可以实现自动化的测试和报告生成,减少了人工操作和提高了测试效率。 因此,结合pytestAllureJenkins,我们可以实现一个完整的自动化测试和报告系统。我们可以通过编写pytest脚本编写测试用例,并使用pytest插件生成Allure报告。然后,我们可以将这些脚本配置到Jenkins中,形成一个定期执行的自动化测试任务。Jenkins会自动运行测试脚本,并生成带有Allure报告的测试结果。我们可以通过Jenkins的UI界面,方便地查看测试结果,帮助我们及时发现和解决问题。 总结起来,pytestAllureJenkins的结合为我们的自动化测试提供了全方位的支持,能够让我们更加高效地进行软件测试,并通过直观的报告帮助我们更好地理解测试结果。这样,我们可以更加准确地判断软件质量,提高软件开发的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值