Pytest测试框架(五):pytest + allure生成测试报告
Allure 是一款轻量级、支持多语言的开源自动化测试报告生成框架,由Java语言开发,可以集成到 Jenkins。 pytest 测试框架支持Allure 报告生成。
pytest也可以生成junit格式的xml报告和HTML报告,命令如下:
pytest test_demo.py --junitxml=report.xml pytest test_demo.py --html=report.html #需要安装插件:pip install pytest-html
Allure 报告更加灵活美观,本文介绍如何使用pytest 生成 allure测试报告
环境安装
安装allure
- allure包下载:https://github.com/allure-framework/allure2/releases
- 解压 -> 进入bin目录 -> 运行allure.bat,
- 把bin目录加入PATH环境变量
allure官网 : http://allure.qatools.ru/
allure文档 : https://docs.qameta.io/allure/#
安装 allure-pytest插件
pip install allure-pytest
生成Allure报告
运行
pytest [测试文件] -s -q --alluredir=./result #--alluredir用于指定存储测试结果的路径)
查看测试报告
方式一:直接打开默认浏览器展示报告
allure serve ./result/
方式二:从结果生成报告
-
生成报告
allure generate ./result/ -o ./report/ --clean
(覆盖路径加--clean) -
打开报告
allure open -h 127.0.0.1 -p 8883 ./report/
实例代码:https://docs.qameta.io/allure/#_pytest
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')
方法1
执行测试用例:
pytest test_allure.py --alluredir=./result/1
打开报告:
> allure serve ./result/1 Generating report to temp directory... Report successfully generated to C:\Users\10287\AppData\Local\Temp\6968593833275403330\allure-report Starting web server... 2020-10-25 20:59:42.368:INFO::main: Logging initialized @4873ms to org.eclipse.jetty.util.log.StdErrLog Server started at <http://169.254.57.162:60084/>. Press <Ctrl+C> to exit
方法2
allure generate ./result/1 -o ./report/1/ --clean allure open -h 127.0.0.1 -p 8883 ./report/1
浏览器访问地址 http://127.0.0.1:8883/ ,会显示跟上图一样的报告。
allure特性—feature, storry, step
可以在报告中添加用例描述信息,比如测试功能,子功能或场景,测试步骤以及测试附加信息:
- @allure.feature(‘功能名称’):相当于 testsuite
- @allure.story(’子功能名称‘):对应这个功能或者模块下的不同场景,相当于 testcase
- @allure.step('步骤'):测试过程中的每个步骤,放在具体逻辑方法中 allure.step('步骤') 只能以装饰器的形式放在类或者方法上面
- with allure.step:可以放在测试用例方法里面
-
附加信息:数据,文本,图片,视频,网页
测试用例 test_feature_story_step.py:
import pytest import allure @allure.feature("登录") class TestLogin(): @allure.story("登录成功") def test_login_success(self): print("登录成功") pass @allure.story("密码错误") def test_login_failure(self): with allure.step("输入用户名"): print("输入用户名") with allure.step("输入密码"): print("输入密码") print("点击登录") with allure.step("登录失败"): assert '1' == 1 print("登录失败") pass @allure.story("用户名密码错误") def test_login_failure_a(self): print("用 56c 户名或者密码错误,登录失败") pass @allure.feature("注册") class TestRegister(): @allure.story("注册成功") def test_register_success(self): print("测试用例:注册成功") pass @allure.story("注册失败") def test_register_failure(self): with allure.step("输入用户名"): print("输入用户名") with allure.step("输入密码"): print("输入密码") with allure.step("再次输入密码"): print("再次输入密码") print("点击注册") with allure.step("注册失败"): assert 1 + 1 == 2 print("注册失败") pass
用例执行、生成报告
pytest test_feature_story.py --alluredir=./result/2 allure generate ./result/2 -o ./report/2/ --clean allure open -h 127.0.0.1 -p 8883 ./report/2
报告:
allure特性—link, issue, testcase
可以在测试报告中添加链接、bug地址、测试用例地址。
关联bug需要在用例执行时添加参数:
- --allure-link-pattern=issue:[bug地址]{}
- 例如:--allure- ad8 link-pattern=issue:http://www.bugfree.com/issue/{}
test_allure_link_issue.py:
import allure @allure.link("http://www.baidu.com", name="baidu link") def test_with_link(): pass @allure.issue("140","this is a issue") def test_with_issue_link(): pass TEST_CASE_LINK = 'https://github.com' @allure.testcase(TEST_CASE_LINK, 'Test case title') def test_with_testcase_link(): pass
用例执行:
pytest test_allure_link_issue.py --allure-link-pattern=issue:http://www.bugfree.com/issue/{} --alluredir=./result/3 allure serve ./result/3
报告:
点击
this is a issue,页面会跳转到bug页面:http://www.bugfree.com/issue/140
allure特性—severity
有时候在上线前,由于时间关系,我们只需要把重要模块测试一遍,在这样的场景下我们怎么实现呢?主要有三种方法:
-
可以使用pytest.mark来标记用例,Pytest测试框架(一):pytest安装及用例执行 介绍了这种方法。
@pytest.mark.webtest # 添加标签 @pytest.mark.sec pytest -m "webtest and not sec"
-
通过 allure.feature, allure.story来实现
pytest test_feature_story_step.py --allure-features "登录" //只运行登录模块 pytest test_feature_story_step.py --allure-stories "登录成功" //只运行登录成功子模块
-
通过 allure.severity按重要性级别来标记,有5种级别:
Blocker级别:阻塞
-
Critical级别:严重
-
Normal级别:正常
-
Minor级别:不太重要
-
Trivial级别:不重要
test_allure_severity.py:
import allure import pytest 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_normalseverity_test_class(self): pass @allure.severity(allur ad0 e.severity_level.CRITICAL) def test_inside_the_normal_severity_test_class_with_overriding_critical_severity(self): pass
用例执行:
pytest test_allure_severity.py --alluredir=./result/4 --allure-severities normal,critical allure serve ./result/4
结果:
allure.attach()
可以在报告中附加文本、图片以及html网页,用来补充测试步骤或测试结果,比如错误截图或者关键步骤的截图。
test_allure_attach.py:
import allure import pytest def test_attach_text(): allure.attach("纯文本", attachment_type=allure.attachment_type.TEXT) def test_attach_html(): allure.attach("<body>这是一段htmlbody块</body>", "html页面", attachment_type=allure.attachment_type.HTML) def test_attach_photo(): allure.attach.file("test.jpg", name="图片", attachment_tye=allure.attachment_type.JPG)
用例执行:
pytest test_allure_attach.py --alluredir=./result/5 allure serve ./result/5
结果:
pytest+selenium+allure报告
测试步骤:
- 打开百度
- 搜索关键词
- 搜索结果截图,保存到报告中
- 退出浏览器
test_allure_baidu.py:
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_steps_demo(test_data1): with allure.step("打开百度网页"): driver = webdriver.Chrome("D:/testing_tools/chromedriver85/chromedriver.exe") driver.get("http://www.baidu.com") with allure.step("搜索关键词"): 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) allure.attach('<head></head><body>首页</body>', 'Attach with HTML type', allure.attachment_type.HTML) with allure.step("退出浏览器"): driver.quit()
用例执行:< ad8 /p>
pytest test_allure_baidu.py --alluredir=./result/6 allure serve ./result/6结果:
文章标题:Pytest测试框架(五):pytest + allure生成测试报告
本文作者:hiyo
本文链接:https://www.cnblogs.com/hiyong/p/14163298.html
欢迎关注公众号:「测试开发小记」及时接收最新技术文章!
- Python单元测试框架之pytest -- 生成测试报告
- pytest+allure生成测试报告后内容为空NaN%解决途径
- Python之使用unittest框架和HTMLTestRunner.py文件实现多个测试用例执行与测试报告生成
- Python&Selenium&pytest借助allure生成自动化测试报告
- Allure+pytest 生成测试报告
- pytest allure 生成HTML测试报告
- Python&Selenium&pytest借助allure生成自动化测试报告
- 详解用Pytest+Allure生成漂亮的HTML图形化测试报告
- Pytest+Allure生成HTML图形化测试报告
- 学习pytest的第十二天-----使用allure2生成测试报告
- 解决python3.7无法使用HTMLTestRunner.py生成html测试报告的问题2019.04
- 1个练习引发的系列学习之pytest生成测试报告 (三)
- python使用 HTMLTestRunner.py生成测试报告
- Python 使用 HTMLTestRunner.py 生成测试报告
- python+selenium+unittest多个py文件,运行生成测试报告
- python基于unittest的框架实现,并驱动ddt模块,生成测试报告模块
- appium+python学习笔记之使用HTMLTestRunner.py生成测试报告
- unittest框架学习,一步步生成html格式测试报告
- 学习pytest的第九天-----使用自定义的标签分类执行测试+三种生成报告的方式
- pytest+allure之测试报告本地运行