python学习笔记-22. allure框架学习
文章目录
前言
一、allure介绍
- allure是一个轻量级、灵活的、支持多语言的测试报告工具
- 多平台的、奢华的report框架
- 可以为dev/qa提供详尽的测试报告、测试步骤、log
- 可以为管理层提供high level统计报告
- java语言开发,支持pytest,javaScript、php、ruby等
- 可以集成到jenkins
二、allure安装
windows安装:
- github下载安装包,下载地址:https://github.com/allure-framework/allure2/releases
- 解压安装包->进入bin目录->奴性allure.bat
- 把bin目录加入PATH环境变量
Mac安装:
- brew install allure
allure官网地址:http://allure.qatool.ru/
文档地址:https://docs.qameta.io/allure/#
安装完成后运行:allure --version,显示版本号即为安装正常
生成测试报告分为2步:
- 第一步:pytest --alluredir=/tmp/my_allure_results,把生成的测试数据放在指定目录下
- 第二步:allure serve /tmp/my_allure_results,使用allure插件将测试数据转换为测试报告
三、pytest-allure插件
系统allure安装完成后,在项目中安装allure-pytest
pip install allure-pytest
allure-pytest主要用来生成测试结果数据,为后续allure生成测试报告,提供数据支撑
测试数据生成命令:
# alluredir后面跟的路径即为测试数据的生成路径
pytest --alluredir=/tmp/my_allure_results
四、allure报告生成
1. allure简单使用
生成测试报告分为2步:
- 第一步:pytest --alluredir=/tmp/my_allure_results,把生成的测试数据放在指定目录下
- 第二步:allure serve /tmp/my_allure_results,使用allure插件将测试数据转换为测试报告
实例:
- 新建test_allure.py
import pytest
def test_success():
"""this test succeeds"""
assert True
def test_failure():
"""this test fails"""
assert False
def test_skip():
"""this test is skipped"""
pytest.skip('for a reason')
def test_broken():
raise Exception('oops')
- 生成测试数据:
项目下执行:
pytest test_allure.py --alluredir=./result/1
执行完成后在项目的result目录下会生成文件夹1,里面包含4个json文件,即测试结果数据
- 根据测试结果数据生成测试报告:
执行如下命令,生成报告,并且使用默认浏览器打开
allure serve ./result/1
执行完成后打开如下页面:
2. allure其他生产报告的方式
- 根据测试结果数据生产测试报告至指定目录,不打开:
allure generate ./result/1 -o ./report/1 --clean
执行完成后项目的repot目录下生成1的文件夹,即测试报告的前端目录
- 根据测试报告文件夹,使用allure开启web服务,在浏览器中打开测试报告
allure open -h 127.0.0.1 -p 8883 ./report/1
执行后打开本地8883端口的测试报告,如下:
五、allure常用的特性
allure的常用特性:
- @allure.feature: 功能名称
- @allure.story: 子功能名称
- @allure.step: 步骤细节
- @allure.attach: 具体文本信息
1. feature与story
feature相当于一个功能,一个大的模块,将case分类到某个feature中,报告中behaviore中显示,相当于testsuite
story相当于对应这个功能或模块下的不同场景,分支功能,属于feature之下的结构,报告在feature中显示,相当于testcase
import pytest
import allure
# feature,添加功能名称
@allure.feature("登录")
class TestLogin():
# story,添加模块名称
@allure.story("测试用例1:登录成功")
def test_login_success(self):
print("这是登录: 测试用例1, 登录成功!")
pass
@allure.story("测试用例2:登录失败")
def test_login_failure(self):
print("这是登录: 测试用例2, 登录失败!")
pass
@allure.story("测试用例3:用户名缺失")
def test_login_miss_name(self):
print("这是登录: 测试用例3, 用户名缺失")
pass
@allure.story("测试用例4:密码缺失")
def test_login_miss_pwd(self):
with allure.step("测试步骤1:点击用户名"):
print("请输入用户名")
with allure.step("测试步骤2:点击密码"):
print("请输入密码")
print("点击登录")
with allure.step("点击登录后登录失败"):
assert '1' == 1
print("登录失败")
pass
@allure.story("测试用例5:登录失败-1")
def test_login_failure_1(self):
print("这是登录: 测试用例5, 登录失败_1")
pass
执行测试结果数据生成命令:
pytest test_allure.py --alluredir=./result/3
执行测试报告生产命令并打开测试报告:
allure serve ./result/3
打开后查看测试报告,功能模块、子模块及测试步骤成功显示:
运行指定feature用例:
pytest test_allure.py --allure-features '登录'
运行指定story用例:
pytest test_allure.py --allure-stories '测试用例2:登录失败'
2. step
- 测试过程中的每个步骤,一般放在具体的逻辑方法中
- 可以放在关键步骤中,在报告中显示
- 在app、web自动化测试中,建议每切换一个页面作为一个step
使用方法:
- @allure.step(): 只能以装饰器的形式放在类或方法上面
- with allure.step(): 可以放在测试用例方法里面,但是测试步骤的代码需要被该语句包含
3. issue、testcase
- 关联测试用例
import allure
@allure.link("http://www.baidu.com")
def test_with_link():
print("这是一条添加了链接的测试")
pass
执行用例并打开测试报告:
pytest test_allure_link.py --alluredir=./result/4
allure serve ./result/4
执行结果如下:
指定链接名字:
import allure
@allure.link()
def test_with_link("www.baidu.com", name="这是链接名字"):
print("这是一条添加了链接的测试")
pass
执行结果如下:
链接到用例库对应的测试用例上:
import allure
@allure.link("http://www.baidu.com", name="这是一个链接名字")
def test_with_link():
print("这是一条添加了链接的测试")
pass
# 定义用例地址
TEST_CASE_LINK = "http://testlink.test.com/case"
@allure.testcase(TEST_CASE_LINK, "登录测试用例")
def test_with_testcase_link():
print("这是一条登录测试用例,链接到测试用例管理系统中")
pass
执行结果如下:
- 关联bug
import allure
#第一个参数为BUG的编号
@allure.issue('140', '这是一个issue')
def test_with_issue_link():
pass
执行命令:
# 链接后的大括号宇issue中的第一个参数对应
pytest test_allure_link.py --allure-link-pattern=issue:http://www.zentao.com/issue/{} --alluredir=./result/6
allure serve ./result/6
执行结果如下:
3. severity
severity用来标准测试用例的级别
- Trivial: 不重要
- Minor: 不太重要
- Normal: 正常问题
- Critical: 严重
- Bocker: 阻塞
使用方法:在方法、函数和类前添加注解:
@allure.severity(allure.severity_level:TRIVIAL)
执行时:
pytest -v -s filename.py --allure-severities normal,critical
在文件test_allure_severity.py示例:
import allure
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
执行命令,生成并打开报告:
pytest test_allure_severity.py --alluredir=./result/7 --allure-severities normal,critical
allure serve ./result/7
执行结果:
4. attach
自动化测试添加图片或html
操作指导:
-
测试报告添加网页
- allure.attach(body, name, attachment_type, extension)
- allure.attach(‘首页’),这是错误也的结果信息
- allure.attachment_type.HTML
-
测试报告中添加图片
- allure.attach.file(source, name, attachment_type, extension):
- allure.attach.file(“./result/b.png”, attachment_type=allure.attachment_type.PNG)
-
纯文本示例
import allure
def test_attach_text():
allure.attach("这是一个文本", attachment_type=allure.attachment_type.TEXT)
执行:
pytest test_allure_severity.py --alluredir=./result/8
allure serve ./result/8
执行结果:
- html示例:
import allure
def test_attach_html():
allure.attach("<body>这是一个htmlbody</body>", "html测试", attachment_type=allure.attachment_type.HTML)
执行:
pytest test_allure_severity.py --alluredir=./result/8
allure serve ./result/8
执行结果如下:
- img图片示例:
import allure
def test_attach_img():
allure.attach.file("./img/1649936265933.jpg", name="这是一个图片", attachment_type=allure.attachment_type.JPG)
执行:
pytest test_allure_severity.py --alluredir=./result/8
allure serve ./result/8
执行结果如下:
六、allure+pytest+selenium实战演示
import allure
import pytest
from selenium import webdriver
import time
@allure.testcase("http://www.github.com")
@allure.feature("百度搜索")
@pytest.mark.parametrize('test_data1', ['allure', 'pytest', 'unittest'])
def test_strps_demo(test_data1):
with allure.step("打开浏览器"):
driver = webdriver.Chrome("/Users/gaozeyu/tools/chromedriver")
driver.get("http://www.baidu.com")
driver.maximize_window()
with allure.step(f"输入搜索词:{test_data1}"):
driver.find_element_by_id("kw").send_keys(test_data1)
time.sleep(2)
driver.find_element_by_id("su").click()
time.sleep(2)
with allure.step("保存图片"):
driver.save_screenshot("./result/b.png")
allure.attach.file("./result/b.png", attachment_type=allure.attachment_type.PNG)
with allure.step("关闭浏览器"):
driver.quit()
运行结果如下:
总结
allure框架总结:
-
allure生成报告的2部操作:
- 生成测试数据:pytest filename.py alluredir=./resultdir
- 生成测试报告并打开:allure serve ./resultdir
-
allure的一些特性
- feature: 标记测试模块
- story:标记测试子模块
- step:标记测试步骤名称
- testcase:标记测试用例地址
- issue:标记BUG地址
- severity: 标记用例等级
- attach:添加html、文本、图片视频等