zoukankan      html  css  js  c++  java
  • 【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-commandlinein
    
    
    • 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 
    
    

    参考博客

    [天蝎座的测试之旅]

  • 相关阅读:
    转:Omnet++ 4.0 installation for Ubuntu
    转:myeclipse假死的解决方案
    omnet++ 4.0下使用XML的例子
    转:Microsoft JET Database Engine (0x80004005) 未指定的错误的完美解决
    C# 数据库删除操作错误报错 System.Data.SqlClient.SqlException (0x80131904)
    Windows 7 转移用户文件夹
    CentOS自动登录Gnome
    Archlinux GRUB2 配置
    Archlinux 登录管理器切换
    html2chm工具1.0发布
  • 原文地址:https://www.cnblogs.com/yfacesclub/p/14181837.html
Copyright © 2011-2022 走看看