Pytest+Allure 示例
0. 前言
简介
Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具,它不仅以 Web 的方式展示了简介的测试结果,而且允许参与开发过程的每个人可以从日常执行的测试中,最大限度地提取有用信息。
Allure 是由 Java 语言开发的,支持 Pytest,JaveScript、PHP、Ruby 等。
- 从 DEV/QA 的角度来看,Allure 提供了详尽的测试报告,比如简化了常见缺陷的统计;失败的测试可以分为 bug 和被中断的测试;还可以配置日志、步骤、fixture、附件、计时、执行历史;以及与 TMS、BUG 管理系统、Jenkins 集成等。所以,通过以上配置,所有负责的开发人员和测试人员可以尽可能地掌握测试信息。
- 从管理者的角度来看,Allure 提供了一个清晰的“大图”,即 High Level 的统计报告,其中包括已覆盖的特性、缺陷聚集的位置、执行时间轴的外观以及许多其他方便的事情。Allure 的模块化和可扩展性保证了你总是能够对某些东西进行微调,使得 Allure 更适合你。
那么下面就来说说如何使报告更加详细的显示我们需要的信息,以及 Allure 与 Jenkins 的集成。
安装
(Windows/Mac 通用安装方法)
下载地址:https://github.com/allure-framework/allure2/releases,下载所需版本的 zip 包。
安装:
- 解压 —> 进入 bin 目录 —> 运行 allure.bat
- 把 bin 目录加入 Path 环境变量
- 配合 pytest,使用 allure2 生成更加精美的测试报告:pip install allure-pytest
运行方法
在测试执行期间收集结果
pytest [测试文件] -s -q --alluredir=./result/ --clean-alluredir
- -s:表示将执行成功的案例日志打印出来
- -q:若跟文件执行路径则代表只需要执行的文件
- --alluredir:指定存储测试结果的路径(若目录不存在则会新建)
- --clean-alluredir:清除历史结果数据
查看测试报告
方式一:用于在本地渲染后对外展示结果
allure serve ./result/
方式二:用于在本地渲染和查看结果
# 生成报告
allure generate ./result/ -o ./report/ --clean # 注意:覆盖路径加 --clean # 打开报告
allure open -h 127.0.0.1 -p 8883 ./report/
注意:/report/ 目录中的 index.html 就是最终的结果页面,但直接通过浏览器打开这个文件是看不到实际报告内容的,这是因为实际报告内容需要 allure 进行渲染后才能看到。
2. Allure 常用特性
场景:
- 希望在报告中看到测试功能,子功能或场景,测试步骤,包括测试附加信息。
解决:
- import allure
- @allure.feature('功能名称')
- @allure.story('子功能名称')
- @allure.title('测试用例名称')
- @allure.step('步骤细节')
- @allure.description('测试用例描述')
- @allure.attach('具体文本信息'):需要附加的信息,可以是数据,文本,图片,视频,网页
- 如果只测试登录功能运行的时候可以加限制过滤,如:pytest 文件名 --allure_features '购物车功能' --allure_stories '加入购物车'

@alllure.feature() 与 @allure.store() 的关系
feature 相当于一个大的功能或模块。将 case 分类到某个 feature 中,并在报告中的 behaviors 中显示,相当于 testsuite。
story 相当于分支功能/模块,属于 feature 之下的结构,并在报告中的 features 中显示,相当于 testcase。
feature 与 story 类似于父子关系。
@allure.step() 与 with allure.step() 的区别
- 测试过程中每个步骤,一般放在具体逻辑方法中。
- 可以放在关键步骤中,在报告中显示。
- 在 App、Web 自动化测试当中,建议每切换到一个新的页面当做一个 step。
- 用法:
- @allure.step():只能以装饰器的形式放在类或者方法上。
- with allure.step():可以放在测试用例方法里面,但测试步骤的代码需要被该语句包含。
给测试用例划分优先级
场景:
通常测试有冒烟测试、回归测试、线上验证测试等,那么就需要按照重要性级别来分别执行,比如上线时要把主流程和重要模块都跑一遍。
解决:
- 通过附加 pytest.mark 标记描述
- 通过 allure.feature、allure.story 标记描述
- 通过 allure.severity 直接标记用例级别
根据测试用例的重要性划分测试用例等级,如果没指定等级,默认为 NORMAL 级别:
- BLOCKER:阻塞缺陷(功能未实现,无法下一步)
- CRITICAL:严重缺陷(功能点缺失)
- NORMAL:一般缺陷(边界情况,格式错误)
- MINOR:次要缺陷(界面错误与ui需求不符)
- TRIVIAL:轻微缺陷(必须项无提示,或者提示不规范)
步骤:
- 在方法、函数和类上面加:@allure.severity(allure.severity_level.TRIVIAL)
- 指定执行对应级别的用例:pytest -s -v 文件名 --allure-severities normal, critical
给 Allure 测试报告添加内容(图片、附件、文本、截图、HTML 等)
场景:
- 前端自动化测试经常需要附加图片或 html,比如在适当的地方、适当的时机截图等。
解决:
- @allure.attach() 显示许多不同类型的提供的附件,可以补充测试、步骤或测试结果。
步骤:
- 在测试报告里附加网页:
- 格式:allure.attach(body(内容), name, attachment_typeextension)
- 示例:allure.attach('<head>/head><body>首页</body>', '这是错误页的结果信息', allure.attachment_type.HTML)
- 在测试报告里附加图片:
- 格式:allure.attach.file(source, name, attachment_type, extension)
- 示例:allure.attach.file("./result/b.png", attachment_type=allure.attachment_type.PNG)
集成测试管理系统
@allure.link()、@allure.issue()、@allure.testcase() 主要是为了将 Allure 报告和测试管理系统集成,可以更快速地跳转到公司内部地址。
先看看三个装饰器的源码:
def link(url, link_type=LinkType.LINK, name=None):
return safely(plugin_manager.hook.decorate_as_link(url=url, link_type=link_type, name=name)) def issue(url, name=None):
return link(url, link_type=LinkType.ISSUE, name=name) def testcase(url, name=None):
return link(url, link_type=LinkType.TEST_CASE, name=name)
小结
- issue() 和 testcase() 其实调用的也是 link(),只是 link_type 不一样。
- 必传参数 url:跳转的链接。
- 可选参数 name:显示在 Allure 报告的名字,如果不传就是显示完整的链接(建议传,不然可读性不高)。
- 可以理解成:三个方法是一样的,我们都提供跳转链接和名字,只是链接的 type 不一样,最终显示出来的样式不一样而已(type 不一样,样式不一样)。
- 如果你喜欢,只用 @allure.link() 也可以。
- 而出现三个装饰器的原因是为了更好地将链接进行分类(访问链接、Bug 链接、测试用例链接)。
代码示例
import allure
TEST_CASE_LINK = 'https://github.com/qameta/allure-integrations/issues/8#issuecomment-268313637'
@allure.link('https://www.youtube.com/watch?v=4YYzUTYZRMU')
def test_with_link():
pass
@allure.link('https://www.youtube.com/watch?v=Su5p2TqZxKU', name='点击我看一看youtube吧')
def test_with_named_link():
pass
@allure.issue('140', 'bug issue链接')
def test_with_issue_link():
pass
@allure.testcase(TEST_CASE_LINK, '测试用例地址')
def test_with_testcase_link():
pass
运行结果,查看 Allure 报告
1)@allure.link() 不传 name 参数时的样式
如下图所示,不传 name 时,当链接很长,可读性就比较差啦。

2)@allure.link() 传了 name 参数时的样式

3)@allure.testcase() 的样式
如下图所示,和 link() 传了 name 参数时一样:

4)@allure.issue() 的样式
如下图所示,多了个虫子样式:

Pytest+Allure 示例的更多相关文章
- Pytest+Allure定制报告
前言: 最近在研究接口自动化的框架,好的测试报告在整个测试框架起到至关重要的部分.终于被我发现一个超好用的报告框架,不仅报告美观,而且方便CI集成. 就是它,就是它:Allure Test Repor ...
- appium+pytest+allure+jenkins 如何实现多台手机连接
使用appium可以实现app自动化测试,我们之前是连接一台手机去运行,如何同时连接多台手机呢?很多人可能想到的是多线程(threading).今天分享一种比多线程更简单的方法,虽然不是多台手机同时运 ...
- pytest使用笔记(三)——pytest+allure+jenkins配置使用
按照pytest使用笔记(二)把pytest+allure配置好后,现在在jenkins配置好,先实现手动构建(立个小目标) 一,安装jenkins插件 首页->系统管理->插件管理,从“ ...
- pytest + allure + jenkins 生成漂亮的测试报告
pytest我在上一篇文章初始pytest中已有介绍,是一个很理想的Python测试框架.Allure是一款非常轻量级并且非常灵活的开源测试报告生成框架. 它支持绝大多数测试框架, 例如TestNG. ...
- pytest+allure测试框架搭建
https://blog.csdn.net/wust_lh/article/details/86685912 https://www.jianshu.com/p/9673b2aeb0d3 定制化展示数 ...
- pytest+allure(allure-pytest基于这个插件)设计定制化报告
一:环境准备 1.python3.6 2.windows环境 3.pycharm 4.allure-pytest 5.allure2.8.0 6.java1.8 allure-pytest快速安装 在 ...
- pytest+allure(pytest-allure-adaptor基于这个插件)设计定制化报告
一:环境准备 1.python3.6 2.windows环境 3.pycharm 4.pytest-allure-adaptor 5.allure2.8.0 6.java1.8 pytest-allu ...
- Pytest单元测试框架——Pytest+Allure+Jenkins的应用
一.简介 pytest+allure+jenkins进行接口测试.生成测试报告.结合jenkins进行集成. pytest是python的一种单元测试框架,与python自带的unittest测试框架 ...
- Python+Pytest+Allure+Git+Jenkins接口自动化框架
Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...
随机推荐
- Doris开发手记3:利用CoreDump文件快速定位Doris的查询问题
Apache Doris的BE部分是由C++编写,当出现一些内存越界,非法访问的问题时会导致BE进程的Crash.这部分的问题常常较难排查,同时也很难快速定位到对应的触发SQL,给使用者带来较大的困扰 ...
- Linux | 压缩与解压详解
tar tar 命令用于对文件进行打包压缩或解压,格式: tar [选项][文件] tar命令的参数及其作用 参数 作用 -c 创建压缩文件 -x 解开压缩文件 -t 查看压缩包内有哪些文件 -z 用 ...
- C语言:指针
#include <stdio.h> #include <stdlib.h> int sum(int a,int b) { int c; c=a+b; printf(" ...
- 求数组的子数组之和的最大值II
这次在求数组的子数组之和的最大值的条件下又增加了新的约束: 1.要求数组从文件读取. 2.如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保 ...
- Java程序设计当堂测试感受
开学第一周的周四,按照王主任的安排,进行了Java当堂测试,来检测暑假八周的学习成果.这一堂课真是让我哭笑不得,这一节课三个小时都在写代码,感觉暑假学的一点点代码什么都不是,写一个系统都完不成,感觉自 ...
- java集合(3)-Java8新增的Predicate操作集合
Java8起为Collection集合新增了一个removeIf(Predicate filter)方法,该方法将批量删除符合filter条件的所有元素.该方法需要一个Predicate(谓词)对象作 ...
- Xshell、winscp连不上Linux虚拟机
1.环境 本地机器WIN7环境,使用VMware Workstation Pro安装的CentOS7,系统镜像CentOS-6.1-x86_64-netinstall.iso 2.问题与分析 我的虚拟 ...
- GraphQL 概念入门
GraphQL 概念入门 Restful is Great! But GraphQL is Better. -- My Humble Opinion. GraphQL will do to REST ...
- iOS 15 Beta升级卡死在更新进程,无法启动怎么办?
2021苹果全球开发者大会结束后,大批果粉迫不及待的尝试升级iOS 15测试版本,想第一时间体验新功能. 但是许多用户反馈升级一直卡死在"准备更新"."验证更新" ...
- CSP-S 2020 初赛
游记 游记个鬼啊跨条街就到了=-= 不分Day反正就一天. 9:30开考,8:30起床. 下雨了,一出宿舍门整个学校全被白色的雾气笼罩.愚以为这是祥瑞之气,昨夜似有麒麟貔貅路过,祝我今日初赛RP++ ...