【pytest-allure】生成漂亮的自动化测试报告

测试报告 pytest-allure插件

什么是allure

  • 是一个轻量级、灵活的、支持多语言的测试报告工具
  • 多平太、奢华的report框架
  • 可以为dev/qa提供详尽的测试报告、测试步骤、log
  • 为管理层提供high level统计报告
  • java语言开发的、支持pytest、javascript、php、ruby
  • 可以集成到jenkins

下载安装

下载地址

官方文档

windows安装
  • jdk1.8+
  • 解压到allure-commandline目录
  • 进入到bin目录,运行allure.bat
  • 添加环境变量
# 添加到PATH
# 添加完后可能需要重启pycharm或者电脑,可以使用echo %path% 打印环境变量
\安装路径\allure-commandline\bin

  • cmd下验证安装
allure --version
  • 安装扩展包
pip install allure-pytest

生成测试报告

指定测试报告目录

  • 在测试执行期间收集结果
pytest [测试文件/目录] -s -q --alluredir=./result/(--alluredir这个选项用于指定测试结果的路径)
# --alluredir=指定测试数据目录和运行结果
# test.py为测试用例文件(可以不加,也可以放测试用例目录)
pytest test.py --alluredir=../result/report/1
或者
# 想要打印出测试用例详细、PASSED以及进度条加-v
pytest -v test.py --alluredir=../result/report/1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OQbKEgTW-1608733557517)(测试报告 pytest-allure插件.assets/image-20200712024115324.png)]

  • 查看测试报告

    • 方式一:测试完成后,查看实际报告,在线看报告,会直接打开默认浏览器展示
    # 指定测试报告目录
    # 将测试数据转化测试报告
    allure serve ../result/report/1 
    
    • 方式二:从结果生成报告,这是一种启动tomcat的服务,需要两个步骤:生成报告,打开报告

      • 生成报告
      allure test.py serve ../result/report/1 
      # 注意:覆盖路径加--clean(清空已有的报告,避免覆盖时出错)
      allure generate ../result/report/1 -o ../result/report/1 --clean
      # 执行后生成以下文件夹和文件
      

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T8WhSjSa-1608733557520)(测试报告 pytest-allure插件.assets/image-20200712023117939.png)]

      • 打开报告
      allure open -h 127.0.0.1 -p 8883 ../result/report/1
      

每次用例执行之前先清空allure的报告记录

pytest -v test_calc.py --alluredir=../report/1
pytest test_calc.py --alluredir=./report/1 --clean-alluredir
allure serve ../report/1

allure装饰器

@allure.feature() 标注模块名称/添加标识(功能点描述)

@allure.story() 标注feature功能模块下的分支功能/用户故事

@allure.step() 标注操作步骤

用法
  • @allure.step() 只能以装饰器的形式放在类或者方法上面
  • with allure.step(): 可以放在测试用例方法里面,但测试步骤的代码需要被该语句包含,如下代码
@allure.story("密码缺失")
def test_login_failure(self):
    with allure.step("点击用户名"):
    	print("输入用户名")
    with allure.step("点击密码"):
    	print("输入密码")
    print("点击登录")
    with allure.step("点击登录之后登录失败"):
        asser '1' == 1
        print("登录失败")
    pass
        

@allure.issue() 对应bug管理系统里面的链接/关联bug

@allure.link("http://www.baidu.com")
def test_with_link():
    print("这是一条加了链接的测试用例")
    pass

# 效果如图2
# 可以使用此种方式链接到测试用例管理系统上,测试用例名使用name参数,比如:name="登录用例"
@allure.link("http://www.baidu.com",name="链接")
def test_with_link():
    print("这是一条加了链接的测试用例")
    pass

# 使用此种方式链接到bug管理系统上,140为bug_id,后面一串是bug的说明/描述
# 地址需要在执行命令的时候给
# --allure-link-pattern=issue:http://www.mytesttracker.com/issue/{}
# 完整命令如下
# pytest test.py ----allure-link-pattern=issue:http//www.mytesttracker.com/issue/{} --alluredir=../result/report/1
@allure.issue('140','Pytest-flaky test retries shows like test steps')
def test_with_issue_link():
    pass

TEST_CASE_LINK='https://github.com/qameta/allure-integrations/issues/8#'
@allure.issue(TEST_CASE_LINK,'Test case title')
def test_with_testcase_link():
    pass


图2

在这里插入图片描述

@allure.attach() 添加图片、文本信息、html

  • 场景

    • 前端自动化测试经常需要附加图片、文本信息、附件、视频、代码块或者html,在适当的地方、适当的时机截图
  • 解决

    • @allure.attach 显示许多不同类型的提供的福建、可以补充测试、步骤或测试结果
  • 步骤

    • 在测试报告里附加网页
    # allure.attach(body(内容),name,attachment_type,extension):
    # 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)
    
  • 举个例子

    • 代码

      • 添加文本信息
      import allure
      def test_attach_text():
          allure.attach("这是一个文本",attachment_type=allure.attachment_type.TEXT)
          
      # 执行运行
      # pytest -v test_calc.py --alluredir=../report/1
      # allure serve ../report/1
      

在这里插入图片描述

+ 添加html代码块

  ```python
  import allure
  def test_attach_html():
      allure.attach("<body>这是一段html body块</body>","html测试块",attachment_type=allure.attachment_type.HTML)
  ```

+ 添加图片

  ```python
  # 错误演示,使用文件时需要到allure.attach.file方法
  import allure
  def test_attach_photo):
      allure.attach("../report/photo/a.jpg",name="这是图片",attachment_type=allure.attachment_type.JPG)
  ```

+ 执行以下命令

  ```python
  pytest -v test_calc.py --alluredir=../report/1
  allure serve ../report/1
  ```

  注意:此时图片展示不出来的时候

在这里插入图片描述

  + 解决图片展示不出来的问题,可以去查看attach源码

在这里插入图片描述

    使用文件的时候需要用到file方法

    ```python
    # 正确用法
    import allure
    def test_attach_photo):
        allure.attach.file("../report/photo/a.jpg",name="这是图片",attachment_type=allure.attachment_type.JPG)
    
    # 执行命令
    pytest -v test_calc.py --alluredir=../report/1
    allure serve ../report/1
    
    ```

     

    效果如图

在这里插入图片描述

allure特性

@allure.feature与@allure.story的关系

  • feature相当一个功能,一个大的模块,将case分类到某个feature中,报告中behaviore中显示,相当于testsuite
  • story相当于对应这个功能或者模块下的不同场景,分支功能,属于feature之下的结构,报告在features中显示,相当于testcase
  • feature与story类似于父子关系

@allure.epic与@allure.feature的关系

  • epic与feature类似父子关系

@allure.story与@allure.title的关系

  • story与title类似父子关系

@allure.step

  • 测试过程中每个步骤,一般放在具体逻辑方法中
  • 可以放在关键步骤中,在报告中显示
  • 在app,web自动化测试当中,建议没切换到一个新的页面当做一个step

@allure.issue

  • 关联bug

    • 执行的时候需要加个参数
    --allure-link-pattern=issue:http//www.mytesttracker.com/issue/{}
    # 完整命令如下
    pytest test.py ----allure-link-pattern=issue:http//www.mytesttracker.com/issue/{} --alluredir=../result/report/1
    

@allure.testcase

  • 关联测试用例(可以直接给测试用例的地址链接)

@allure.epic() epic描述(敏捷里面的概念、定义史诗,往下是feature)

@allure.epic('测试API接口'.center(30,'*'))
class TestHttpbin:
    """测试模块httpbin"""
    def test(self):
        """所有用例执行前的条件"""
        print("测试用例")
# 执行参数加上
--allure-epics=EPICS_SET
                        Comma-separated list of epic names. Run tests that
                        have at least one of the specified feature labels.
pytest --alluredir=../result/report/1 --allure-epics=epic对大Story的一个描述性标签

@allure.suite() 测试套件/测试(集)套件,不用报告默认显示py文件名

allure.tag() 测试用例标记 (用于给用例打个标记)

allure.title("用例标题") 测试用例的标题(重命名html报告名称)

@alluredescription() 用例描述

运行

只运行一个模块(添加)

@allure.feature("登录模块")
class TestLogin():
    @allure.story("登录成功")
    def test_login_success(self):
        print("登录测试用例:登录成功")
        pass
    
    @allure.story("用户名缺失")
    def test_login_failure(self):
        print("登录测试用例:登录成功")
    	pass

执行命令

pytest test.py --allure-features '登录模块'

按重要性级别进行一定范围测试

  • 场景

    • 通常测试有P0、冒烟测试、验证上线测试。按重要性界别来分别执行的,比如上线要吧主流程和重要模块都跑一遍
  • 解决

    • 通过附加pytest.mark标记
    • 通过allure.feature或者allure.story
    • 也可以通过 allure.severity 来附加标记
      • 级别:Trivial:不重要,Minor:不太重要,Normal:正常问题,Critical:严重,Blocker:阻塞
  • 步骤

    • 在方法、函数和类上面加

      @allure.severity(allure.severity_level.TRIVIAL)
      
    • 执行时

      pytest -s -v 文件名 --allure-severities normal,critical

    Blocker级别:中断bug(客户端程序没有响应,无法执行下一步操作)
    Critical级别:临界bug(功能点缺失)
    Normal级别:普通bug(数值计算错误)
    Minor级别:次要bug(界面错误与UI需求不符)
    Trivial级别:轻微bug(必输项没有提示,或者提示不规范,建议性等)
    
  • 举个例子

    • 代码如下
    @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.py --alluredir=../result/report/1 --allure-severities normal,critical
    
    • 在pycharm右键使用run运行,需要配置Additional Arguments

在这里插入图片描述

多并发运行

多并发运行

安装补充

使用库:pytest4.0,pytest-allure-adaptor

注意不要安装allure-pytest该库,否则会出现option names {'alluredir'} already added错误

1,安装PowerShell (win10自带有,其他系统自行安装)

2,打开PowerShell,输入命令:

set-executionpolicy remotesigned -s cu
再输入

iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
输入scoop help 可查看scoop命令列表

3,在PowerShell命令窗口输入 scoop install allure
4,进入存放用例py文件的目录下,执行

 py.test --alluredir=reports
 存放用例的目录中会多一个reports文件夹,里面是各种txt和json文件
 再执行

allure generate reports

存放用例的目录中会多一个allure-reports文件夹,更新allure-reports文件夹内容使用


allure generate reports --clean 

参考博客

[天蝎座的测试之旅]

posted @ 2020-12-23 22:39  北向。  阅读(1552)  评论(0编辑  收藏  举报