详解用Pytest+Allure生成漂亮的HTML图形化测试报告


Posted in Python onMarch 31, 2020

对于软件测试工作来说,测试报告是非常重要的工作产出。一个漂亮、清晰、格式规范、内容完整的测试报告,既能最大化我们的测试工作产出,又能够减少开发人员和测试人员的沟通成本。

本篇文章将介绍如何使用开源的测试报告生成框架Allure生成规范、格式统一、美观的测试报告。
通过这篇文章的介绍,你将能够:

  • 将Allure与Pytest测试框架相结合;
  • 如何定制化测试报告内容
  • 执行测试之后,生成Allure格式的测试报告。
  • 如何与Jenkins集成。
  • 将测试环境信息展示到测试报告中。

1、Allure测试报告介绍

Allure是一款轻量级并且非常灵活的开源测试报告框架。 它支持绝大多数测试框架, 例如TestNG、Pytest、JUint等。它简单易用,易于集成。下面就Pytest如何与Allure集成做详细介绍。

2、Pytest框架集成Allure

Pytest是Python的单元测试框架,非常方便和易用。强烈推荐对于用Python进行测试工作的小伙伴使用这个测试框架,相比与Python自带的UnitTest好用太多太多。这篇文章我不会介绍太多Pytest测试框架的使用,今天主要是介绍如何将测试报告生成工具Allure集成到Pytest中。

2.1 安装Allure Pytest Plugin

allure-pytest是Pytest的一个插件,通过它我们可以生成Allure所需要的用于生成测试报告的数据。安装allure-pytest插件方法:

$ pip install allure-pytest

2.2 改造基于Pytest的测试用例

allure-pytest的官方文档中详细介绍了allure-pytest所具有的功能。本篇文章不会再翻译一遍,而是从实际入手,给大家介绍如何将其应用到自己的框架中。

为了使用Allure生成报告,需要在测试脚本中加入Allure特性。而这个操作并不会对原有的测试用例逻辑产生任何变动。

直接看下面的脚本,我通过在脚本中添加注释的方式给大家解释allure特性的用途。比如测试脚本是test_shopping_trolley.py:

#!/usr/bin/env python
# coding=utf-8

import pytest
import allure


@allure.feature('购物车功能') # 用feature说明产品需求,可以理解为JIRA中的Epic
class TestShoppingTrolley(object):
  @allure.story('加入购物车') # 用story说明用户场景,可以理解为JIRA中的Story
  def test_add_shopping_trolley(self):
    login('刘春明', '密码') # 步骤1,调用“step函数”
    with allure.step("浏览商品"): # 步骤2,step的参数将会打印到测试报告中
      allure.attach('笔记本', '商品1') # attach可以打印一些附加信息
      allure.attach('手机', '商品2')
    with allure.step("点击商品"): # 步骤3
      pass
    with allure.step("校验结果"): # 步骤4
      allure.attach('添加购物车成功', '期望结果')
      allure.attach('添加购物车失败', '实际结果')
      assert 'success' == 'failed'

  @allure.story('修改购物车')
  def test_edit_shopping_trolley(self):
    pass

  @pytest.mark.skipif(reason='本次不执行')
  @allure.story('删除购物车中商品')
  def test_delete_shopping_trolley(self):
    pass


@allure.step('用户登录') # 将函数作为一个步骤,调用此函数时,报告中输出这个步骤,我把这样的函数叫“step函数”
def login(user, pwd):
  print(user, pwd)

上面使用了Allure的几个特性:

  • @allure.feature # 用于描述被测试产品需求
  • @allure.story # 用于描述feature的用户场景,即测试需求
  • with allure.step # 用于描述测试步骤,将会输出到报告中
  • allure.attach # 用于向测试报告中输入一些附加的信息,通常是一些测试数据,截图等
  • @pytest.allure.step # 用于将一些通用的函数作为测试步骤输出到报告,调用此函数的地方会向报告中输出步骤

3、生成Allure测试报告

测试脚本中添加了Allure特性之后,可以通过两步,就可以展示出测试报告了。

第一步,生成测试报告数据

在py.test执行测试的时候,指定?alluredir选项及结果数据保存的目录:

$ py.test test/ --alluredir ./result/

./result/中保存了本次测试的结果数据。另外,还可以执行指定features或者stories执行一部分测试用例,比如执行”购物车功能“下的”加入购物车“子功能的测试用例:

$ py.test test/ --allure_features='购物车功能' --allure_stories='加入购物车'

第二步,生成测试报告页面

通过下面的命令将./result/目录下的测试数据生成测试报告页面:

$ allure generate ./result/ -o ./report/ --clean

?clean选项目的是先清空测试报告目录,再生成新的测试报告。

这一步需要提前安装allure命令行,如果是Mac电脑,推荐使用Homebrew安装。

$ brew install allure

4、解读测试报告

打开生成的测试报告后,浏览器被自动调起,展示测试报告。下面我们分别看看测试报告的几个页面。

4.1、首页

详解用Pytest+Allure生成漂亮的HTML图形化测试报告

首页中展示了本次测试的测试用例数量,成功用例、失败用例、跳过用例的比例,测试环境,SUITES,FEATURES BY STORIES等基本信息,当与Jenkins做了持续置成后,TREND区域还将显示,历次测试的通过情况。
首页的左边栏,还从不同的维度展示测试报告的其他信息,大家可以自己点进去看看。

4.2、Behaviors页面

进入Behaviors页面,这个页面按照FEATURES和 STORIES展示测试用例的执行结果:

详解用Pytest+Allure生成漂亮的HTML图形化测试报告

从这个页面可以看到“购物车功能”这个FEATURES包含的三个STORIES的测试用例执行情况。

4.3、Suites页面

Allure测试报告将每一个测试脚本,作为一个Suite。在首页点击Suites区域下面的任何一条Suite,都将进入Suites页面。

详解用Pytest+Allure生成漂亮的HTML图形化测试报告

这个页面,以脚本的目录结构展示所有测试用例的执行情况。

4.4、Graphs页面

这个页面展示了本次测试结果的统计信息,比如测试用例执行结果状态、测试用例重要等级分布、测试用例执行时间分布等。

详解用Pytest+Allure生成漂亮的HTML图形化测试报告

4.5、测试用例详情页面

在Suites页面上点击任何一条测试用例,Suites页面的右侧将展示这条用例的详细执行情况。

详解用Pytest+Allure生成漂亮的HTML图形化测试报告

从这个页面可以看到测试用例执行的每一个步骤,以及每个步骤的执行结果,每一个步骤都可以添加附件,作为重要信息补充。从这里,对于失败的测试用例,可以一目了然看到原因。

5、Jenkins中生成Allure报告

5.1、安装 Allure Plugin

首先需要给Jenkins安装Allure Plugin。在Jenkins的插件管理页面,搜索“allure”,在搜索结果页,选择“Allure Jenkins Plugin”进行安装。

安装完成之后重启一下Jenkins。

在Jenkins的“全局工具管理”页面,找到Allure Commandline模块进行安装:

详解用Pytest+Allure生成漂亮的HTML图形化测试报告

点击后,弹出下面的页面,输入Allure的命令别名和版本后,点击Apply 和Save。

详解用Pytest+Allure生成漂亮的HTML图形化测试报告

5.2、修改Pipeline

在Pipeline的定义中,在执行测试用例的环节增加--alluredir ./allure-results保存测试结果数据,并在构建后的步骤中增加allure includeProperties: false, jdk: '', report: 'jenkins-allure-report', results: [[path: 'allure-results']]将测试结果数据生成测试报告页面,完整的Jenkinsfile如下:

pipeline {
  // ...
  stages {
  //...
    stage('执行测试用例') {
      steps {
        sh "py.test tests/ --alluredir ./allure-result"
      }
    }
  }
  post {
      always{
      script {
        allure includeProperties: false, jdk: '', report: 'jenkins-allure-report', results: [[path: 'allure-result']]
      }
    }
  }
}

这样,我们的Jenkins Job执行完测试用例时候,将在Job的主页面上看到Allure Report图标,点击进去就看到了Allure Report报告。

详解用Pytest+Allure生成漂亮的HTML图形化测试报告

如果你现在依然使用的是Freestyle风格的job。那么需要在构建后步骤中,添加Allure Report步骤,将allure的报告数据添加到Path中:

详解用Pytest+Allure生成漂亮的HTML图形化测试报告

这样当job执行完成后,也可以看到allure测试报告了。

6、增加测试环境到Allure报告中

在4.1小节展示的报告首页中,有一个区域可以展示测试执行的环境信息。但是目前allure-pytest插件中并没有实现。不过在之前我用过的另外一个插件pytest-allure-adaptor是支持的。可惜pytest-allure-adaptor插件项目已经被标记为Deprecated了。

将测试环境信息输出到报告中,对于测试报告来讲是非常有意义的。我们有没有什么变通的办法可以实现呢?在网上进行了一番查询,发现stackoverflow上也有很多关于这个话题的讨论。其中一个话题还给出了Workaround方法,这里给大家贴上链接:
https://stackoverflow.com/questions/52030518/recommend-workaround-for-the-missing-environmental-support-in-pytest-allure

这个Workaround的方法也比较简单方便,就是在allure-results目录中,新建environment.properties文件,并以key=value形式,在其中写入环境相关的信息,比如:

browser=chrome
backend=staging
domain=http://baidu.com

这样,在执行allure generate ./result/ -o ./report/ --clean生成测试报告时,将能将测试环境信息融合到测试报告的页面中了。

详解用Pytest+Allure生成漂亮的HTML图形化测试报告

这样看,测试报告是不是更显得完整了呢?

不过,这种手动方式还是比较麻烦,下面我们看看如何在pytest框架中,自动实现上面的workaround。

在Pytest中,有一个hook函数叫作pytest_sessionfinish,根据官方文档的描述,这个函数是在整个测试完成后被调用的,我们可以在其内部实现我们自己的逻辑。

我们将生成environment.properties文件放到pytest_sessionfinish中实现,再适合不过了。在测试项目的根目录下创建conftest.py文件,在其中实现pytest_sessionfinish函数,代码如下。

#!/usr/bin/env python
# coding=utf-8

def pytest_sessionfinish(session):
  with open("{}/result/environment.properties".format(session.config.rootdir), "w") as f:
    f.write("browser=chrome\nbackend=staging\ndomain=http://baidu.com")

这样,我们每次测试完成后,就自动将我们的测试环境信息添加到测试报告中了。

7、总结

团队内部可能不同项目使用的测试框架不一样,每个测试框架生成的测试报告也不一样。但由于Allure报告支持很多测试框架,通过Allure可以生成格式一致的测试报告,这就对外提供格式一致的测试报告提供了方便。

目前测试工程实践中,另外一个常用的自动化测试工具组合是采用的Java+TestNG的架构,TestNG框架如何集成Allure也非常简单。大家可以尝试参考官方文档来实现集成一下。

到此这篇关于详解用Pytest+Allure生成漂亮的HTML图形化测试报告的文章就介绍到这了,更多相关Pytest+Allure生成HTML图形化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
Pycharm以root权限运行脚本的方法
Jan 19 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
解决python 上传图片限制格式问题
Oct 30 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
jupyter notebook 多行输出实例
Apr 09 Python
python 基于wx实现音乐播放
Nov 24 Python
python的dict判断key是否存在的方法
Dec 09 Python
手把手教你使用TensorFlow2实现RNN
Jul 15 Python
python可视化大屏库big_screen示例详解
Nov 23 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 #Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 #Python
python实现udp聊天窗口
Mar 31 #Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 #Python
Python sorted排序方法如何实现
Mar 31 #Python
解决Django中checkbox复选框的传值问题
Mar 31 #Python
Python文本文件的合并操作方法代码实例
Mar 31 #Python
You might like
农民C键的运用技巧
2020/03/04 星际争霸
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
英文留学推荐信范文
2014/01/25 职场文书
医学专业大学生求职信
2014/07/12 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
代办社保委托书范文
2014/10/06 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
出国留学自荐信模板
2015/03/06 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
初三化学教学反思
2016/02/22 职场文书
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫