Pytest单元测试框架-allure测试报告
Allure Test Report
对于不同的编程语言,有很多很酷的测试框架。不幸的是,它们中只有少数能够提供测试执行输出的良好表示。Qameta软件测试团队正在致力于Allure——一个开源框架,旨在创建测试执行报告,让团队中的每个人都清楚。
参考文章:
pytest与allure(/əˈlo͝or/
)中间的火花
安装配置allure:https://github.com/allure-framework/allure2/releases/tag/2.13.5
- 下载后解压文件并添加到对应操作系统的环境变量中
安装allure-pytest插件:
pip install allure-pytest
添加allure测试结果报告存放路径
pytest --alluredir=./report/allure_report_01
(此方法会运行测试文件,并得到结果汇总到报告中,你还需执行下一步)查看实际的报告(在浏览器显示,这样会在本地启用个web服务):
allure serve ./report/allure_report_01
生成测试报告(每次生成前清空测试报告目录):
allure generate ./report/allure_report_01/ -o ./report01/ --clean
注意事项
如果直接执行
pytest --alluredir=report
,将会直接在当前目录下新建一个report的目录,并会运行pytest测试;
定制allure报告
给allure报告中的测试方法添加描述: 只需要在测试函数/方法下加上
"""描述的内容"""
def test_sum(self):
""" 这部分内容将显示在 allure报告中"""
# assert进行断言
assert 1 == 2
测试步骤描述:在测试方法之前添加
@allure.step('步骤描述')
内容#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
"""
@project: pytest_study
@author: zy7y
@file: test_09.py
@ide: PyCharm
@time: 2020/7/27
""" import allure
import pytest @allure.step('第一步')
def passing_step():
pass @allure.step('第二步')
def step_with_nested_steps():
nested_step() @allure.step('第二.1步')
def nested_step():
nested_step_with_arguments(1, 'abc') @allure.step('第二.2步')
def nested_step_with_arguments(arg1, arg2):
pass def test_with_imported_step():
passing_step() def test_with_nested_steps():
passing_step()
step_with_nested_steps()
步骤可以有一个描述行,该描述行支持传递的位置参数和关键字参数的占位符。关键字参数的默认参数也将被捕获。
import allure @allure.step('测试步骤标题中的占位符, 第一个参数: "{0}", 第二个参数keyword: "{key}"')
def step_with_title_placeholders(arg1, key=None):
pass def test_steps_with_placeholders():
step_with_title_placeholders(1, key='something')
step_with_title_placeholders(2)
step_with_title_placeholders(3, 'anything')
ids测试用例标题: 每条用例ids关键字参数的内容将被填充到allure报告中
@pytest.mark.parametrize('username, password, expect',
[('admin', '123456', '登录成功'),
('admin', '111111', '密码错误')], ids=["正常登录测试用例标题", "密码错误登录测试用例"])
def test_login(username, password, expect):
if username == 'admin' and password == '123456':
assert expect == '登录成功'
else:
assert expect == '密码错误'
向allure某个测试用例/函数/方法中添加附件:
arllure.attcah(body, name, attachment_type, extension)
或者添加本地附件allure.attach.file(source, name, attachment_type, extension)
body
- 需要写入的文件内容name
- 文件名称attachment_type
- 文件类型allure.attachment_type
extension
- 文件后缀名source
- 文件所在路径
import allure
import pytest @pytest.fixture
def attach_file_in_module_scope_fixture_with_finalizer(request):
# 添加一个txt文件,文件名称为 file_name, 文件里面的内容为:allure文本附件内容
allure.attach('allure文本附件内容', 'file_name', allure.attachment_type.TEXT) def test_multiple_attachments(attach_file_in_module_scope_fixture_with_finalizer):
# 本地上传一个图片文件给allure,
allure.attach.file('./Snipaste_2020-07-27_23-29-48.png', name='allure专用', attachment_type=allure.attachment_type.PNG)
allure.attach('<head></head><body> a page </body>', 'html附件', allure.attachment_type.HTML)
定制测试标题(测试函数在allure中的显示方式)内容:
@allure.title()
@allure.title('测试标题:测试打开blog')
@allure.step('3. 点击回车')
def test_open_blog(browse_driver):
browse_driver.find_element_by_id('su').click()
#allure.dynamic.title('在成功完成测试后,标题被替换为这一行。')
添加链接:
@allure.link
或者@allure.issue
或者@allure.testcase
# 显示链接
@allure.link('https://www.baidu.com/')
def test_with_link():
pass @allure.link('https://www.youtube.com/watch?v=Su5p2TqZxKU', name='allure.link 实现的,传递了一个url,一个name')
def test_with_named_link():
pass # 可以用来放禅道bug地址,它的图标是个虫子挺好的
@allure.issue('https://www.baidu.com', '这就是显示图标,点击可以访问链接的 allure.issue')
def test_with_issue_link():
pass # 链接栏下方显示 测试用例标题, 点击实现跳转
@allure.testcase(TEST_CASE_LINK, '测试用例标题')
def test_with_testcase_link():
pass
按标签分组执行:
@allure.feature
and@allure.story
@allure.story('epic_1')
def test_with_epic_1():
pass @allure.story('story_1')
def test_with_story_1():
pass @allure.story('story_2')
def test_with_story_2():
pass @allure.feature('feature_2')
@allure.story('story_2')
def test_with_story_2_and_feature_2():
pass # pytest test_09.py --allure-stories story_1,story_2 只执行 含这两个标签的 # pytest test_09.py --allure-features feature2 --allure-stories story2
按严重度(优先级)分组执行:
@allure.severity
# test.py
import allure @allure.severity('blocker')
def test_with_no_severity_label():
pass @allure.severity(allure.severity_level.TRIVIAL)
def test_with_trivial_severity():
pass @allure.severity(allure.severity_level.NORMAL)
def test_with_normal_severity():
pass @allure.severity(allure.severity_level.NORMAL)
class TestClassWithNormalSeverity(object): def test_inside_the_normal_severity_test_class(self):
pass @allure.severity(allure.severity_level.CRITICAL)
def test_inside_the_normal_severity_test_class_with_overriding_critical_severity(self):
pass # 将执行严重性为NORML、CRITICAL的方法/类/函数
# pytest tests.py --allure-severities normal,critical
严重度(优先级)解释:
BLOCKER = 'blocker' 系统阻断 对应bug优先级: 马上解决
CRITICAL = 'critical' 严重缺陷 -
NORMAL = 'normal' 普通 - 可倒数第三执行 正常处理
MINOR = 'minor' 易用性问题
TRIVIAL = 'trivial' 易用性问题
关于bug严重度、优先级可以看这里:http://blog.sina.com.cn/s/blog_4adc4b090102wucf.html
Pytest单元测试框架-allure测试报告的更多相关文章
- Pytest单元测试框架:插件-allure-pytest环境搭建并在本地生成一个测试报告
之前写了allure-pytest的官方文档啃的内容,有些交流的朋友,实践起来没什么头绪,所以就有了这篇文章,也给自己填个坑 第一步:搭建Allure.JDK环境 1. 搭建JDK环境 不装jdk你会 ...
- Pytest单元测试框架-测试用例运行规则
1.Pytest测试用例运行规则 在pytest单元测试框架下面执行用例,需要满足以下几个特点: 1. 文件名以test_*.py开头或者*_test.py 2. 测试类.测试函数以test开头 3. ...
- Pytest单元测试框架-Pytest环境安装
unittest是python自带的单元测试框架,它封装好了一些校验返回的结果方法和一些用例执行前的初始化操作,使得单元测试易于开展,因为它的易用性,很多同学也拿它来做功能测试和接口测试,只需简单开发 ...
- Pytest单元测试框架之简单操作示例
前言: Pytest是第三方单元格测试框架,更加简单,灵活,而且提供了更多丰富的扩展: Pytest与UnitTest框架的区别 UnitTest测试用例执行顺序是依照ascii码执行,而Pytest ...
- Pytest单元测试框架——Pytest+Allure+Jenkins的应用
一.简介 pytest+allure+jenkins进行接口测试.生成测试报告.结合jenkins进行集成. pytest是python的一种单元测试框架,与python自带的unittest测试框架 ...
- Pytest 单元测试框架
1.pytest 是 python 的第三方单元测试框架,比自带 unittest 更简洁和高效 2.安装 pytest pip install pytest 3.验证 pytest 是否安装成功 p ...
- Pytest单元测试框架之FixTure基本使用
前言: 在单元测试框架中,主要分为:测试固件,测试用例,测试套件,测试执行及测试报告: 测试固件不难理解,也就是我们在执行测试用例前需要做的动作和测试执行后的需要做的事情: 比如在UI自动化测试中,我 ...
- Pytest单元测试框架-学习
pytest: Python的一个单元测试框架,基于UnitTest二次开发,语法上更加简洁,可以用来做Python开发项目的单元测试,UI自动化.接口自动化测试等,有很多的插件访问Pytest插件汇 ...
- Pytest单元测试框架生成HTML测试报告及优化
一.安装插件 要生成html类型的报告,需要使用pytest-html插件,可以在IDE中安装,也可以在命令行中安装.插件安装 的位置涉及到不同项目的使用,这里不再详述,想了解的可自行查询. IDE中 ...
随机推荐
- SQL批量插入数据【万级】
1.每4000条插入一次 for (int i = 0; i < dt.Rows.Count; i++) { IsTBProductForStockInfo model = new IsTBPr ...
- redis(一):Redis 数据类型
Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). String(字符串) st ...
- 2. import 与 from...import 导入模块
1. 导入整个模块 格式: import somemodule2. 从某个模块中导入某个函数 格式: from somemodule import somefunction3. 从某个模块中导入多个函 ...
- linux管理防火墙
操作系统环境:CentOS Linux release 7.0.1406(Core) 64位CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤. 1.关闭f ...
- 开源 5 款超好用的数据库 GUI 带你玩转 MongoDB、Redis、SQL 数据库
作者:HelloGitHub-*小鱼干 工欲善其事必先利其器,想要玩溜数据库,不妨去试试本文安利的 5 款开源的数据库管理工具.除了流行的 SQL 类数据库--MySQL.PostgreSQL 之外, ...
- Redis的字符串底层是啥?为了速度和安全做了啥?
面试场景 面试官:Redis有哪些数据类型? 我:String,List,set,zset,hash 面试官:没了? 我:哦哦哦,还有HyperLogLog,bitMap,GeoHash,BloomF ...
- UVALive - 3644 X-Plosives (并查集)
A secret service developed a new kind of explosive that attain its volatile property only when a spe ...
- 设计模式:prototype模式
使用场景:在不能根据类创建对象的时候,根据已有的对象创建对象 不能根据类创建对象的情况: 创建一个类的对象时,需要根据多种对象来创建,创建的过程非常复杂 难以根据类生成对象 例子: class Pro ...
- 学会这个,助你升值加薪自动化框架之python+selenium+pytest
1.概述 selenium: 基于JavaScript代码库的自动化测试框架,通过脚本语言,模拟用户行为操作,最接近用户真实场景,实现对web自动测试. Selenium,是目前的最火爆企业最主流的w ...
- 手动触发浏览器resize
今天做echarts图表 发现饼图不能居中,resize之后才会居中. 于是想手动触发resize方法,但是不改变浏览器窗口 JQ $(window).trigger('risize'); JS ...