Allure测试报告框架帮助你轻松实现”高大上”报告展示。本文通过示例演示如何从0到1集成Allure测试框架。重点展示了如何将Allure集成到已有的自动化测试工程中、以及如何实现报表的优化展示。Allure非常强大,支持多种语言多种测试框架,无论是Java/Python还是Junit/TestNG,其他语言或者框架实现的流程和本文一致,具体配置参照各语言框架规范
安装
安装allure
Windows用户:
- scoop install allure (需要先下载并安装Scoop,该方法无需配置环境变量)
MAC用户:
- 通过Homebrew进行自动安装
- brew install allure (如果Homebrew版本比较旧,需要先升级Homebrew,否则安装的allure版本也很老,可能会与Python插件不兼容)
手动安装:
- 可以从官网 Central Repository: io/qameta/allure/allure-commandline 手动下载
- 目前最新版本为2.13.6
下载后解压并配置环境变量
安装allure-pytest插件
- pip install allure-pytest
allure常用特性
希望在报告中看到测试功能,子功能或场景,测试步骤,包括测试附加信息可以使用@feature,@story,@step,@attach
步骤:
- import allure
- 功能上加@allure.feature("功能名称")
- 子功能上加@allure.story("子功能名称")
- 步骤上加@allure.step("步骤细节")
- @allure.attach("具体文本信息"),需要附加的信息,可以是数据,文本,图片,视频,网页
- 如果只测试部分功能运行的时候可以加限制过滤:
- pytest 文件名 --allure-features "需要运行的功能名称"
allure特性—feature/story
@allure.feature与@allure.store的关系
- feature相当于一个功能,一个大的模块,将case分类到某个feature中,报告中在behaviore中显示,相当于testsuite
- story相当于对应这个功能或者模块下的不同场景,分支功能,属于feature之下的结构,报告在features中显示,相当于testcase
- feature与story类似于父与子关系
step特性
- 测试过程中每个步骤,一般放在具体逻辑方法中
- 可以放在关键步骤中,在报告中显示
- 在app,web自动化测试中,建议每切换到一个新的页面当做一个step
- 用法:
- @allure.step() 只能以装饰器的形式放在类或方法上面
- with allure.step(): 可以放在测试用例方法里面,但测试步骤的代码需要被该语句包含
运行:
在测试执行期间收集结果
pytest [测试文件] -s -q --alluredir=./result --clean-alluredir
- --alluredir这个选项,用于指定存储测试结果的路径
- --clean-alluredir 这个选项用来清除之前生成的结果
查看测试报告:
方法一:测试完成后查看实际报告,在线看报告,会直接打开默认浏览器展示当前报告
allure serve ./result
方法二:从结果生成报告,这是一个启动tomcat的服务,需要两个步骤
生成报告:
allure generate ./result -o ./report --clean (注意:--clean用来清除之前已生成的报告)
打开报告:
allure open -h 127.0.0.1 -p 8883 ./report (该方法直接生成一个tomcat服务,可远程访问)
举个例子:
有如下代码文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #!/usr/bin/python # -*- coding: UTF-8 -*- """ @author:chenshifeng @file:test_allure.py @time:2020/10/10 """ import allure import pytest @allure .feature( '登录模块' ) class TestLogin(): @allure .story( '登录成功' ) @allure .title( '登录成功标题' ) def test_login_sucess( self ): with allure.step( '步骤1:打开应用' ): print ( '应用已打开' ) with allure.step( '步骤2:进入登录页面' ): print ( '登录页面已打开' ) with allure.step( '步骤3:输入用户名和密码' ): print ( '用户名和密码输入成功' ) print ( '登录测试用例:登录成功' ) @allure .story( '登录成功' ) def test_login_sucess2( self ): assert '1' = = 1 print ( '登录测试用例:登录成功' ) @allure .story( '登录失败' ) def test_login_failure_a( self ): print ( '登录测试用例:登录失败,用户名缺失' ) @allure .story( '登录失败' ) def test_login_failure_b( self ): print ( '登录测试用例:登录失败,密码缺失' ) @allure .story( '登录失败' ) def test_login_failure_c( self ): with allure.step( '输入用户名' ): print ( '已输入用户名' ) with allure.step( '输入密码' ): print ( '已输入密码' ) with allure.step( '点击登录' ): print ( '已点击登录' ) print ( '登录测试用例:登录失败,密码错误' ) @allure .feature( '搜索模块' ) class TestSearch(): def test_search1( self ): print ( '搜索用例1' ) TEST_CASE_LINK = 'https://mirrors.huaweicloud.com/' @allure .testcase(TEST_CASE_LINK, '测试用例连接' ) def test_search2( self ): print ( '搜索用例2' ) @allure .step( '搜索步骤' ) def test_search3( self ): print ( '搜索用例3' ) |
依次执行命令:
pytest test_allure.py --alluredir=./result --clean-alluredir
allure serve ./result
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | chenshifengdeMacBook - Pro:testcode chenshifeng$ pytest test_allure.py - - alluredir = . / result - - clean - alluredir = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = test session starts = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = platform darwin - - Python 3.9 . 0 , pytest - 6.1 . 1 , py - 1.9 . 0 , pluggy - 0.13 . 1 rootdir: / Users / chenshifeng / MyCode / PythonCode / SFDSZL / test_pytest, configfile: pytest.ini plugins: allure - pytest - 2.8 . 18 collected 8 items test_allure.py .F...... [ 100 % ] = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = FAILURES = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ________________________________________________________________________ TestLogin.test_login_sucess2 _________________________________________________________________________ self = <test_allure.TestLogin object at 0x7fef3d5cba90 > @allure .story( '登录成功' ) def test_login_sucess2( self ): > assert '1' = = 1 E AssertionError: assert '1' = = 1 test_allure.py: 27 : AssertionError = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = short test summary info = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = FAILED test_allure.py::TestLogin::test_login_sucess2 - AssertionError: assert '1' = = 1 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 1 failed, 7 passed in 0.07s = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = chenshifengdeMacBook - Pro:testcode chenshifeng$ allure serve . / result Generating report to temp directory... Report successfully generated to / var / folders / p0 / 3_7fwrvx6n3ftpfd4wjb01300000gn / T / 7024790777193223986 / allure - report Starting web server... 2020 - 10 - 13 21 : 39 : 56.174 :INFO::main: Logging initialized @ 6818ms to org.eclipse.jetty.util.log.StdErrLog Server started at <http: / / 192.168 . 12.100 : 58977 / >. Press <Ctrl + C> to exit |
生成的报告:
allure特性-testcase
关联测试用例(可以直接给测试用例的地址链接)
例子:
1 2 3 4 | TEST_CASE_LINK = 'https://mirrors.huaweicloud.com/' @allure .testcase(TEST_CASE_LINK, '测试用例连接' ) def test_search( self ): print ( '搜索用例' ) |
按重要性级别进行一定范围测试
通常测试有P0、冒烟测试、验证上线测试。按重要性级别来执行的,比如上线要把主流程和重要模块都跑一遍,可通过以下方法解决
通过附加@pytest.mark标记
通过allure.feature,allure.story
也可以通过allure.severity来附加标记
- 级别:
- trivial:不重要,轻微缺陷(必输项无提示,或者提示不规范)
- minor 不太重要,次要缺陷(界面错误与UI需求不符)
- normal:正常问题,普通缺陷(数值计算错误)
- critical:严重,临界缺陷(功能点缺失)
- blocker:阻塞,中断缺陷(客户端程序无响应,无法执行下一步操作)
使用方法:
在方法、函数和类上面加 @allure.severity(allure.severity_level.TRIVIAL)
执行:
pytest -s -v 文件名 --allure-severities normal,critical
举例说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #!/usr/bin/python # -*- coding: UTF-8 -*- """ @author:chenshifeng @file:test_severity.py @time:2020/10/11 """ import allure import pytest # 不加任何标记,默认normal def test_with_no_severity(): pass # trivial:不重要,轻微缺陷(必输项无提示,或者提示不规范) @allure .severity(allure.severity_level.TRIVIAL) def test_with_trivial_severity(): pass # minor 级别 不太重要,次要缺陷(界面错误与UI需求不符) @allure .severity(allure.severity_level.MINOR) def test_with_minor_severity(): pass # normal:正常问题,普通缺陷(数值计算错误) @allure .severity(allure.severity_level.NORMAL) def test_with_normal_severity(): pass # critical:严重,临界缺陷(功能点缺失) @allure .severity(allure.severity_level.CRITICAL) def test_with_ritical_severity(): pass # blocker:阻塞,中断缺陷(客户端程序无响应,无法执行下一步操作) @allure .severity(allure.severity_level.BLOCKER) def test_with_blocker_severity(): pass @allure .severity(allure.severity_level.NORMAL) class TestClassWithNormalSeverity( object ): # 不加任何标记,默认为同class级别 def test_inside_with_normal_severity( self ): pass # 重新设置了critical级别 @allure .severity(allure.severity_level.CRITICAL) def test_inside_with_critical_severity( self ): pass |
执行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | chenshifengdeMacBook - Pro:testcode chenshifeng$ pytest test_severity.py - - alluredir = . / result - - clean - alluredir - vs = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = test session starts = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = platform darwin - - Python 3.9 . 0 , pytest - 6.1 . 1 , py - 1.9 . 0 , pluggy - 0.13 . 1 - - / usr / local / bin / python3. 9 cachedir: .pytest_cache rootdir: / Users / chenshifeng / MyCode / PythonCode / SFDSZL / test_pytest, configfile: pytest.ini plugins: allure - pytest - 2.8 . 18 collected 8 items test_severity.py::test_with_no_severity PASSED test_severity.py::test_with_trivial_severity PASSED test_severity.py::test_with_minor_severity PASSED test_severity.py::test_with_normal_severity PASSED test_severity.py::test_with_ritical_severity PASSED test_severity.py::test_with_blocker_severity PASSED test_severity.py::TestClassWithNormalSeverity::test_inside_with_normal_severity PASSED test_severity.py::TestClassWithNormalSeverity::test_inside_with_critical_severity PASSED = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 8 passed in 0.03s = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = chenshifengdeMacBook - Pro:testcode chenshifeng$ allure serve . / result Generating report to temp directory... Report successfully generated to / var / folders / p0 / 3_7fwrvx6n3ftpfd4wjb01300000gn / T / 17788207943997663035 / allure - report Starting web server... 2020 - 10 - 13 22 : 27 : 49.842 :INFO::main: Logging initialized @ 6620ms to org.eclipse.jetty.util.log.StdErrLog Server started at <http: / / 192.168 . 12.100 : 59696 / >. Press <Ctrl + C> to exit |
终极用例:
百度搜索:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #!/usr/bin/python # -*- coding: UTF-8 -*- """ @author:chenshifeng @file:test_baidudemo.py @time:2020/10/13 """ import pytest import allure from selenium import webdriver import time @allure .testcase( 'https://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() 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( './screenshot/baidu.png' ) allure.attach. file ( './screenshot/baidu.png' ,attachment_type = allure.attachment_type.PNG) with allure.step( '关闭浏览器' ): driver.quit() |
执行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | chenshifengdeMacBook - Pro:testcode chenshifeng$ pytest test_baidudemo.py - - alluredir = . / result - - clean - alluredir - vs = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = test session starts = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = platform darwin - - Python 3.9 . 0 , pytest - 6.1 . 1 , py - 1.9 . 0 , pluggy - 0.13 . 1 - - / usr / local / bin / python3. 9 cachedir: .pytest_cache rootdir: / Users / chenshifeng / MyCode / PythonCode / SFDSZL / test_pytest, configfile: pytest.ini plugins: allure - pytest - 2.8 . 18 collected 3 items test_baidudemo.py::test_steps_demo[allure] PASSED test_baidudemo.py::test_steps_demo[pytest] PASSED test_baidudemo.py::test_steps_demo[unittest] PASSED = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 3 passed in 24.65s = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = chenshifengdeMacBook - Pro:testcode chenshifeng$ allure serve . / result Generating report to temp directory... Report successfully generated to / var / folders / p0 / 3_7fwrvx6n3ftpfd4wjb01300000gn / T / 18005664130273264423 / allure - report Starting web server... 2020 - 10 - 13 23 : 03 : 39.221 :INFO::main: Logging initialized @ 7360ms to org.eclipse.jetty.util.log.StdErrLog Server started at <http: / / 192.168 . 12.100 : 60775 / >. Press <Ctrl + C> to exit |
报告:
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】