如何优雅的展示测试报告– allure应用

  • Post author:
  • Post category:其他


我们学习了如何编写自动化测试脚本,也能顺利执行并展示结果了,可是我们如何向其他干系人展示测试结果呢??而且尽量优雅美观,不光有数据,还要有图表的那种。来,介绍一个测试报告框架Allure

allure官网:

https://docs.qameta.io/


时间充裕且英文好的同学可以直接看官网,任何你想知道的内容都可以在官网上查到,如果时间不充足且英文不太好的同学可以截下来看看我的笔记,入门是没问题的。如果再想进阶,还是得去官网。



allure简介

  • allure是一个轻量级、灵活的,支持多语言的测试报告工具
  • 多平台的,奢华的report框架
  • 可以为dev/qa提供详尽的测试报告,测试步骤及log
  • 有可以为管理层提供高水平的统计报告
  • Java语言开发的,支持pytest、JavaScript、PHP、ruby等
  • 可以集成到Jenkins



allure安装



安装插件allure-pytest

虽然已经成功安装了allure,但是是没有办法单独使用的,需要结合pytest使用,所以还需要下载插件allure-pytest

插件要在python环境下安装,所以使用

pip install allure-pytest



allure常用的特性


一、 对测试用例分组

  • 场景:希望在报告中看到测试功能、子功能或场景、测试步骤、包括测试附加信息
  • 解决:添加装饰器@allure.feature、@allure.story、@allure.step、@allure.attach
  • 步骤:

    1.import allure

    2.功能上加@allure.feature,一般是在类上

    3.子功能上加@allure.story,一般是在方法上、

    4.步骤上加@allure.step、

    5.打印具体的文本信息加@allure.attach,需要附加的信息,可以是数可据,文本,图片,视频、网页等
  • 执行

    可以根据feature或者story过滤用例执行。如果对参数不熟悉,可以使用

    pytest --help|grep allure

    获取,如下:

    (allure-env) Yujin:allure yujin$ pytest --help|grep allure
      --allure-severities=SEVERITIES_SET
      --allure-epics=EPICS_SET
      --allure-features=FEATURES_SET
      --allure-stories=STORIES_SET
      --allure-ids=IDS_SET  Comma-separated list of IDs.
      --allure-link-pattern=LINK_TYPE:LINK_PATTERN
      --alluredir=DIR       Generate Allure report in the specified directory (may
      --clean-alluredir     Clean alluredir folder if it exists
      --allure-no-capture   Do not attach pytest captured logging/stdout/stderr to
    

    用法如下:

  1. 根据feature过滤:

    pytest test_allure.py --allure-features="登录模块" -vs 
    
  2. 根据story过滤:

    pytest test_allure.py --allure-stories="登录失败"  -vs
    
  3. 如果希望执行多个story或者feature,多个story名或feature名中间加“,”即可

    pytest test_allure.py --allure-stories="登录失败","登出失败"  -vs
    

    但是注意,–allure-features和–allure-stories同时使用时,如果–allure-features中的用例包括了–allure-stories的用例,则只执行–allure-features的用例;如果不包含,则同时执行–allure-features和–allure-stories的用例


    是的,通过

    pytest -m

    参数也可以实现分组运行测试用例的目的,但是为例在测试用例中展示,结合allure特性更直观


二、allure特性 – testcase


场景:自动话测试用例执行失败了,希望关联手工测试的地址,方便测试人员定位bug

解决:添加@allure.testcase(TEST_CASE_LINK,“地址描述”)

@allure.feature("搜索模块")
class TestSearch:
    @allure.step("步骤1,打开应用")
    def start_app(self):
        return True

    @allure.step("步骤2,输入搜索关键字")
    def send_key(self):
        return True

    @allure.step("步骤3,展示搜索结果")
    def show_result(self):
        return True

    @allure.story("搜索成功")
    def test_search_succ(self):
        self.start_app()
        self.send_key()
        self.show_result()
        assert True
        

    @allure.testcase("www.baidu.com", "测试用例连接地址")
    @allure.story("搜索失败")
    def test_search_fail(self):
        self.start_app()
        self.send_key()
        self.show_result()
        assert False

测试报告中展示测试链接

在这里插入图片描述


三、按重要级别进行一定范围的测试用例执行


场景:通常测试有冒烟测试、验证上线测试等场景,安重要性级别来分别执行,比如上线前要把猪流程和重要模块都跑一遍

解决:通过在方法、函数和类上添加allure.severity来附加标记

  • Trivial 不重要,轻微缺陷(如必输项无提示,或者提示不规范)
  • Minor 不太重要,次要缺陷(如界面错误与UI需求不符)
  • Normal 正常,普通缺陷(数值计算错误等)
  • Critical 严重(如功能点缺失)
  • Blocaker 阻塞(如客户端程序无响应,无法执行下一步操作等)

    执行:

    pytest 文件名 --allure-severities=normal -vs

问题:如果类上标注是normal级别,类里的方法标注是critical级别,那执行normal级别的用例时会执行那些用例呢??

答案:会执行normal类里未标注级别或者标注级别是normal的用例。


四、给测试用例重命名


场景:测试用例的名字默认展示的是测试用例的方法名,可以给测试用例起一个名字,方便其他同学阅读测试报告。

解决:添加@allure.title标记

类似于实现@pytest.mark.parametrize的ids功能


五、前端自动化测试截图


场景:前端自动化测试经常需要附加图片、视频、html等,在适当的地方适当的时机截图并保存添加到测试报告中。

解决:@allure.attach添加不同类型的附件,可以补充测试,步骤或测试结果

步骤:上代码:

# 截图并在报告中添加图片
    def save_png(self, filename,name=None):
        """
        :param filename: 图片路径
        :param name: 添加到报告中到图片名称
        :return:
        """
        self.driver.save_screenshot(f"{rootdir}/screenshot/{filename}.png")
        allure.attach.file(f"{rootdir}/screenshot/{filename}.png", name=name,attachment_type=allure.attachment_type.PNG)

# 报告中添加各种类型的文件
class TestAttach:
    def test_attach_text(self):
        allure.attach("这是一段文本",attachment_type=allure.attachment_type.TEXT)

    def test_attach_html(self):
        allure.attach("这是body",attachment_type=allure.attachment_type.HTML)

    def test_attach_png(self):
        allure.attach.file("./images/001.png",name="这是测试结果截图1",attachment_type=allure.attachment_type.PNG)

    def test_attach_video(self):
        allure.attach.file("./images/002.mp4",name="这是测试结果截图",attachment_type=allure.attachment_type.MP4)

这里使用的文件都是写死的文件,会在web/app的UI自动化里补充如何截图及重命名。



运行

结合allure的特性运行测试用例并收集测试结果

–alluredir参数用于执行存放测试结果路径,测试结果文件为json格式或者txt格式

pytest test_allure.py --alluredir=./result



查看报告

收集到测试结果后查看测试报告的方式有两种:

  • 方式一:直接看报告

    allure serve ./result
    

    测试完成后查看实际报告,在线看报告,会直接打开默认浏览器并展示当前报告

  • 方式二:从结果生成报告

    这是一个启动tomcat的服务,需要两个步骤:生成报告、打开报告

    • 生成报告:
    allure generate ./result -o ./report --clean
    


    allure generate

    默认将测试报告存在allure-report目录下,如果希望存放在其他的目录下,添加

    -o

    参数

    注意

    --clean

    参数是覆盖路径,如果不添加此参数会在原有报告上叠加

    • 打开报告

      会在指定host和port上打开测试报告
    allure open -h 127.0.0.1 -p 8883 ./report
    



测试报告分析

在这里插入图片描述

在这里插入图片描述



代码示例

feature 、story、step通过在方法上添加装饰器的形式定义,这种方法实现了对测试用例分层,推荐使用这种方法。

@allure.feature("搜索模块")
class TestSearch:
    @allure.step("步骤1,打开应用")
    def start_app(self):
        return True

    @allure.step("步骤2,输入搜索关键字")
    def send_key(self):
        return True

    @allure.step("步骤3,展示搜索结果")
    def show_result(self):
        return True

    def test_search(self):
        self.start_app()
        self.send_key()
        self.show_result()

step还可以在测试用例中定义,如代码:

@allure.feature("登出模块")
class TestLogout:
    @allure.story("登出成功")
    def test_logout_success(self):
        with allure.step("步骤1,进入【我的】页面"):
            print("进入我的页面")
        with allure.step("步骤2、点击退出按钮"):
            print("点击退出按钮")
        with allure.step("步骤3、退出成功"):
            print("退出成功")
        print("这是登出:测试用例,登出成功")

    @allure.story("登出失败")
    def test_logout_fail(self):
        with allure.step("步骤1,进入【我的】页面"):
            print("进入我的页面")
        with allure.step("步骤2、点击退出按钮"):
            print("点击退出按钮")
        with allure.step("步骤3、退出失败"):
            print("退出失败")
        print("这是登出:测试用例,登出失败")



版权声明:本文为m0_56696177原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。