Allure介绍:

  • 一个轻量级、灵活的、支持多语言的测试报告工具
  • 支持多平台,奢华的report框架
  • 能提供详尽的测试报告、测试步骤、Log等信息
  • Java语言开发,但支持pytest、JavaScript、PHP、ruby等语言或框架
  • 可以集成到Jenkins

安装

Allure的使用,需要安装Java和Allure。

  • Java:由于Allure是Java语言开发的,所以需要安装Java;网上很多java的安装教程,这里就不详细说明了
  • Allure:本人只有win10系统的,所以本章主要是在win10下操作的
    • 下载地址:https://github.com/allure-framework/allure2/releases
      如果github下载不太顺畅,可以考虑别的网站:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/
    • 配置环境变量:解压后将bin目录加入PATH环境变量
    • 环境验证:命令行输入allure --version,能正常打印对应版本即可
    • pytest要能使用allure,需要安装相应的插件:pip install allure-pytest

使用

官方教程:https://docs.qameta.io/allure

入门

想要看到allure报告,需要做2个步骤:
1、pytest执行时关联allure:pytest命令带上--alluredir 结果存放目录--alluredir=结果存放目录
2、打开执行报告:allure serve 结果存放目录
test_demo.py的内容如下:

def test_add_positive():assert 1 + 3 == 4def test_add_negative():assert -1 + -3 == -4

执行用例:

执行命令成功后,会在当前目录下,生成result目录,result目录下存放了执行结果

通过allure serve ./result打开测试报告


allure装饰器

allure提供了一些装饰器,比较常用的如下:

方法 参数值 参数说明
@allure.epic(*epics) epic描述 定义项目,当由多个项目时使用,一般传参一个字符串,表示项目名称。往下时feature
@allure.feature(*features) 分支 用例按照模块区分(类似于一个业务分了几个步骤/功能),一般传参一个字符串,表示分支名称。
@allure.story(*stories) 故事 类似于场景(即一个功能分为几个方面去验证),一般传参一个字符串,表示场景名称。
@allure.title(test_title) 用例标题 给指定的用例设置名称,在测试报告中,展示的用例名称不是函数名称,是设置的test_title
@allure.testcase(url, name=None) 用例相关链接 设置用例存放的地址,方便访问对应用例详情,name不为None时,文本显示为name,否则显示用例所在url
@allure.issue(url, name=None) 缺陷地址 对应缺陷管理系统里的缺陷地址,用法于testcase的类似
@allure.description(test_description) 用例描述 test_description参数里说明了当前用例的详细内容,比如说前置条件、验证场景、预期结果等需要关注的内容
@allure.link(url, link_type='link', name=None) 定义连接 用于定义一个需要在测试报告中展示的连接,url和name参数逻辑与allure.testcase()的一致,link_type默认是link,可为issue、test_case,设置为issue
allure.attach(body, name=None, attachment_type=None, extension=None) 按照附件形式添加展示 将python对象按照指定的附件类型展示在报告中,可支持的attachment_type(附件类型)在allure.attachment_type
allure.attach.file(source, name=None, attachment_type=None, extension=None) 添加附件 将文件按照指定的附件类型读取并展示到报告中,可支持的attachment_type(附件类型)在allure.attachment_type

epic、feature、story

epic、feature、story是存在层级关系的,在报告中进行层级展示。
示例如下:
test_demo.py内容如下:

import allure@allure.epic("epic的使用1")
@allure.feature("测试模块1")
def test_case1():assert 1 + 3 == 4@allure.feature("测试模块1")
def test_case2():assert -1 + -3 == -4@allure.feature("测试模块1")
@allure.story("某部分验证1")
def test_case3():assert True@allure.feature("测试模块1")
@allure.story("某部分验证1")
def test_case4():assert True@allure.story("某部分验证1")
def test_case5():assert True@allure.story("某部分验证2")
def test_case6():assert True

执行pytest test_demo.py --alluredir ./result命令,打开allure报告后如下:

点击Show all按钮,层级显示说明如下:

@allure.title()

@allure.title(test_title):是给指定的用例设置名称,在测试报告中,展示的用例名称不是函数名称,是设置的test_title
test_demo.py内容如下:

import alluredef test_case1():assert 1 + 3 == 4@allure.title("测试xxxx点")
def test_case2():assert True

allure测试报告显示如下:

@allure.testcase()

@allure.testcase(url, name=None):是给指定的用例设置跳转链接url,如果name为None,则直接显示链接,如果name不为None,则报告中显示name,点击跳转到指定链接。一般是用来设置用例可访问的链接,直接跳转到用例详情
示例:
test_demo.py内容如下:

import alluredef test_case1():print("这里是test_case1的测试内容")assert True@allure.testcase("https://www.baidu.com/")
def test_case2():print("这里是test_case2的测试内容")assert True@allure.testcase("https://www.baidu.com/", "用例所在位置")
def test_case3():print("这里是test_case3的测试内容")assert True

allure测试报告比较如下:

@allure.testcase()

@allure.issue(url, name=None):是给指定的用例设置缺陷链接url,如果name为None,则直接显示链接,如果name不为None,则报告中显示name,点击跳转到指定链接。一般是用来设置对应的缺陷链接,能直接跳转到指定的缺陷详情页面
示例:
test_demo.py内容如下:

import alluredef test_case1():print("这里是test_case1的测试内容")assert True@allure.issue("https://www.baidu.com/")
def test_case2():print("这里是test_case2的测试内容")assert True@allure.issue("https://www.baidu.com/", "缺陷访问地址")
def test_case3():print("这里是test_case3的测试内容")assert True

allure报告显示如下:

@allure.description()

@allure.description(test_description):描述当前用例的详细信息,比如说前置条件、验证场景、预期结果等需要关注的内容。设置了之后,allure报告中,该用例的详情页面会展示Description字段,字段内容为test_description的内容
示例:
test_demo.py内容如下:

import alluredef test_case1():print("这里是test_case1的测试内容")assert True@allure.description("这条用例是为了验证...巴拉巴拉...的场景")
def test_case2():print("这里是test_case2的测试内容")assert True

allure报告中,test_case2()的执行详情显示如下:

@allure.link()

@allure.link(url, link_type='link', name=None) : 用于定义一个需要在测试报告中展示的连接,link_type默认是link,可为issue、test_case,设置为issues时与allure.issue()用法一致,为test_case时用法与allure.testcase()一致,url和name参数用法与allure.testcase()一致
示例:
test_demo.py内容如下:

import alluredef test_case1():print("这里是test_case1的测试内容")assert True@allure.link("https://www.baidu.com/")
def test_case2():print("这里是test_case2的测试内容")assert True@allure.link("https://www.baidu.com/", name="相关业务文档")
def test_case3():print("这里是test_case3的测试内容")assert True

allure报告显示如下:

allure.step()

allure.step(title) : 类似于将测试过程分步骤执行,allure会统计步骤的执行情况,方便定位问题和调试。allure.step()内的代码如果执行成功,则allure报告中会显示该步骤执行成功,执行失败时会展示到对应的步骤。
allure.step(title)是针对测试过程的步骤,不建议装饰整个用例,建议放在测试用例方法或函数里,使用方式如下:

with allure.step("步骤说明"):# 代码实现对应步骤

示例:
test_demo.py内容如下:

import alluredef test_send_mail_without_step():print("步骤1:输入用户名admin,密码password")print("登录成功")print("步骤2:新建邮件")print("步骤3:编辑邮件")print("步骤4:发送邮件")print("发送成功消息提示")print("步骤5:退出确认")print("退出成功页面")def test_send_mail_with_step_success():with allure.step("步骤1:用户登录"):print("输入用户名admin,密码password")print("登录成功")with allure.step("步骤2:新建并编辑邮件"):print("新建邮件")print("编辑邮件")with allure.step("步骤3:发送邮件"):print("发送邮件")print("发送成功消息提示")with allure.step("步骤4:退出登录"):print("退出确认")print("退出成功页面")def test_send_mail_with_step_fail():with allure.step("步骤1:用户登录"):print("输入用户名admin,密码password")print("登录成功")with allure.step("步骤2:新建并编辑邮件"):print("新建邮件")assert Falseprint("前面报错了,接下来的不会被执行了")print("编辑邮件")with allure.step("步骤3:发送邮件"):print("发送邮件")print("发送成功消息提示")with allure.step("步骤4:退出登录"):print("退出确认")print("退出成功页面")

allure报告显示如下:

@allure.severity()

@allure.severity(allure.severity_level.xxx) :支持给用例设置优先级,一旦用例执行失败,就可以确定缺陷的等级。目前allure可设置5种级别:

  • BLOCKER:阻塞缺陷,相当于主要功能未实现,非常严重
  • CRITICAL:严重缺陷,功能点缺失,或主流程虽然实现,但存在较大的问题
  • NORMAL:一般缺陷(边界情况、格式错误等)
  • MINOR:次要缺陷(界面与ui需求不符等)
  • TRIVIAL:轻微缺陷(比如无提示、用户体验不好等)

示例:
test_demo.py内容如下:

import alluredef test_case1():print("这里是test_case1的测试内容,未设置优先级")assert True@allure.severity(allure.severity_level.BLOCKER)
def test_case2():print("这里是test_case2的测试内容,优先级为BLOCKER,阻塞缺陷")assert True@allure.severity(allure.severity_level.CRITICAL)
def test_case3():print("这里是test_case3的测试内容,优先级为CRITICAL,严重缺陷")assert True@allure.severity(allure.severity_level.NORMAL)
def test_case4_success():print("这里是test_case4的测试内容,优先级为NORMAL,一般缺陷")assert True@allure.severity(allure.severity_level.NORMAL)
def test_case4_fail():print("这里是test_case的测试内容,优先级为")assert False@allure.severity(allure.severity_level.MINOR)
def test_case5():print("这里是test_case5的测试内容,优先级为MINOR,次要的、较小的缺陷")assert True@allure.severity(allure.severity_level.TRIVIAL)
def test_case6():print("这里是test_case6的测试内容,优先级为TRIVIAL,轻微缺陷(比如无提示、用户体验不好等)")assert True

执行后,allure报告显示如下:

allure.attach

allure提供了attach,支持在测试报告中添加附件,attach有2种方式,attach可以添加数据、文本、图片、视频、网页等数据
可支持的附件类型在allure.attachment_type中有定义:

方法 说明
allure.attach(body, name=None, attachment_type=None, extension=None) 将body的内容按照附件形式展示,name为附件名称,attachment_type为附件的类型,extension一般传附件的后缀
allure.attach.file(source, name=None, attachment_type=None, extension=None) 将文件(source)按照附件形式展示到报告中,,name为附件名称,attachment_type为附件的类型,extension一般传附件的后缀。source是附件在本地的路径

attach()是将python对象以指定附件类型展示,attach.file()是将本地文件以指定附件类型展示在报告中,attach()是针对字符串等内容,attach.file()是针对文件。attach.file()会将文件中的内容按照指定附件类型 读取并展示 到报告中,attach()则是将python的字符串对象按照指定附件类型展示
示例:
test_demo.py内容如下:

import allure@allure.title("attach.file()针对于文件来源的附件")
def test_attach_file():with allure.step("attach.file()添加图片"):allure.attach.file("D:\\test_code\\allure_demo\\csdn.png", name="csdn",attachment_type=allure.attachment_type.PNG, extension=".png")# 没有指定name,系统会默认分配附件名称,CSV格式显示正常with allure.step("attach.file()添加CSV文件"):allure.attach.file("D:\\test_code\\allure_demo\\成绩表.csv",attachment_type=allure.attachment_type.CSV)@allure.title("attach()和attach.file()的区别")
def test_attach_or_file():with allure.step("attach.file()添加文本txt内容"):allure.attach.file("D:\\test_code\\allure_demo\\操作步骤.txt", name="文本标题:操作步骤",attachment_type=allure.attachment_type.TEXT)# 参数一致,attach.file()会将文件中的内容按照指定附件类型读取并展示到报告中,attach()则是将python的字符串对象按照指定附件类型展示with allure.step("attach添加文本txt内容"):allure.attach("D:\\test_code\\allure_demo\\操作步骤.txt", name="文本标题:操作步骤",attachment_type=allure.attachment_type.TEXT)@allure.title("attach()的使用")
@allure.description("attach()将python对象按照指定的附件类型展示,attachment_type有/未指定类型时的区别")
def test_attach():# attach()的attachment_type参数,用来确定以什么类型展示,以下是attachment_type参数有无指定的情况with allure.step("attach添加HTML内容(指定了attachment_type为HTML格式)"):allure.attach('<a href="http://www.eastmoney.com">''<img class="ts-logo" src="https://g1.dfcfw.com/g3/201909/20190912110958.jpg" alt="东方财富网——财经资讯门户"></a>',name="东方财富网首页", attachment_type=allure.attachment_type.HTML)with allure.step("attach添加HTML内容(未指定html格式,默认是文本形式)"):allure.attach('<a href="http://www.eastmoney.com">''<img class="ts-logo" src="https://g1.dfcfw.com/g3/201909/20190912110958.jpg" alt="东方财富网——财经资讯门户"></a>',name="东方财富网首页")

使用到的附件内容如下:

执行pytest命令:>pytest test_demo.py --clean-alluredir --alluredir ./result,打开allure报告:allure serve ./result,相关的案例展示情况如下:


pytest的allure参数

python 安装了 allure-pytest库之后,pytest命令可以使用allure的参数

常用的allure参数如下:

参数 描述
--alluredir=DIR 将pytest执行结果存放到指定的目录DIR
--clean-alluredir pytest的执行结果,allure默认是累计的,即会加上之前的执行统计结果,加上这个参数后会只统计当前执行结果。比如第二次执行后打开allure报告,会显示有第一次执行的内容,只想要本次执行结果的,可以加上该参数
--allure-severities=SEVERITIES_SET 指定执行对应优先级的用例,SEVERITIES_SET中,如果有多个优先级,使用英文逗号,连接
--allure-epics=EPICS_SET 执行执行对应的epic的用例,多个epic时使用英文逗号,连接
--allure-features=FEATURES_SET 执行执行对应的feature的用例,多个feature时使用英文逗号,连接
--allure-stories=STORIES_SET 执行执行对应的story的用例,多个story时使用英文逗号,连接

示例(参数内容的示例都是用当前的代码):
test_demo.py内容如下:

import allure@allure.epic("epic1的用例")
@allure.feature("feature2的用例")
def test_case1():print("这里是test_case1的测试内容,未设置优先级")assert True@allure.story("story2的用例")
@allure.severity(allure.severity_level.BLOCKER)
def test_case2():print("这里是test_case2的测试内容,优先级为BLOCKER,阻塞缺陷")assert True@allure.epic("epic1的用例")
@allure.story("story1的用例")
@allure.testcase("https://wwww.baidu.com")
@allure.severity(allure.severity_level.CRITICAL)
def test_case3():print("这里是test_case3的测试内容,优先级为CRITICAL,严重缺陷")assert True@allure.epic("epic3的用例")
@allure.feature("feature2的用例")
@allure.severity(allure.severity_level.NORMAL)
def test_case4_success():print("这里是test_case4的测试内容,优先级为NORMAL,一般缺陷")assert True@allure.feature("feature1的用例")
@allure.story("story3的用例")
@allure.severity(allure.severity_level.NORMAL)
def test_case4_fail():print("这里是test_case的测试内容,优先级为NORMAL")assert False@allure.epic("epic2的用例")
@allure.severity(allure.severity_level.MINOR)
def test_case5():print("这里是test_case5的测试内容,优先级为MINOR,次要的、较小的缺陷")assert True@allure.feature("feature3的用例")
@allure.severity(allure.severity_level.TRIVIAL)
def test_case6():print("这里是test_case6的测试内容,优先级为TRIVIAL,轻微缺陷(比如无提示、用户体验不好等)")assert True

统计当前执行结果

--clean-alluredir是只统计当前的执行情况,不会包含之前的统计情况。
示例:
执行了pytest test_demo.py --alluredir ./result命令后,再执行pytest test_demo.py::test_case4_fail --alluredir ./result命令

打开allure报告,显示如下:

加了--clean-alluredir参数后(即执行命令:pytest test_demo.py::test_case4_fail --alluredir ./result --clean-alluredir),打开allure报告,展示如下:

加了--clean-alluredir参数后,allure报告就只展示当前的执行结果,不包含之前的执行结果。

allure过滤用例

按照优先级


allure报告展示如下:

按照epic


按照feature


按照story


生成报告

我们在进行测试用例执行时,经常会有失败的用例需要调试,所以中间可能会有多个版本的测试报告,然后又个最终版本的测试报告。
报告的数据肯定是从pytest执行用例统计得来的。pytest执行用例时,需要加上--alluredir 存储路径参数,将pytest的执行统计结果存放到指定的存储路径,查看测试报告,有2种方式:

  • 方式1:测试完成后查看实际报告(在线看报告),命令为allure server 存储路径
  • 方式2:从结果生成报告再打开报告;
    • 先生成报告:allure generate 存储路径 -o 新路径 --clean(注意:覆盖路径加–clean)
    • 打开报告:allure open -h ip地址 -p 端口 新路径

2种方式都是统计最近一次pytest命令执行后的结果,pytest中有些参数也会影响报告的统计结果,比如加了--clean-alluredir就只会显示当前pytest执行用例的统计结果,而不会将之前的统计结果包含进来。所以从执行结果统计来说,方式1和方式2对pytest执行结果统计是一样的,只是渲染成html的方式不一样,方式1用于本地渲染和查看,方式2用于本地渲染和对外展示(即给其他设备也能查看)

方式1前面的示例用过多次了,这里主要讲下方式2:方式2是对已统计的pytest执行结果生成新的测试报告:
test_demo.py内容如下:

import pytestdef test_passed():assert Truedef test_fail():assert Falsedef test_skip():pytest.skip("测试跳过这条用例")def test_broken():raise ValueError("测试出现异常")

执行Pytest命令:

从上面截图可以看出,当前目录自动生成了个result目录,目录内容有json(有时候有txt),是本次pytest执行统计结果。接下来根据result生成静态报告:

allure generate执行成功后,当前目录自动生成report目录,存放了生成的html文件及其组件、数据内容

直接从文件双击打开到浏览器的话,数据是加载不出来的,如下:

我们可以使用allure open -h ip地址 -p 端口 新路径命令打开报告:

allure与pytest相关推荐

  1. 软件测试 pytest pytest的命名规则 用例的前后置 conftest.py 定制allure报告 @pytest.mark.parametrize()装饰器作数据驱动

    文章目录 1 pytest简介 1.1 pytest的命名规则 1.2 运行方式 1.2.1 主函数方式(少用) 1.2.2 命令行方式(少用) 1.2.3 pytest.ini的配置文件方式(最经常 ...

  2. 【Pytest+Allure】pytest+allure自学轨迹1--认识pytest和pytest的装饰器

    认识pytest和pytest的装饰器 认识pytest pytest的装饰器 使用pytest 安装与导入 pytest用例的写法 使用fixture装饰器 作用域 不指定作用域(默认作用域func ...

  3. pytest+allure框架搭建(MacOS)

    Allure框架是一种灵活的轻量级多语言测试报告工具,它不仅能够以简洁的web报告形式显示已测试的内容,而且允许参与开发过程的每个人从测试的日常执行中提取最大限度的有用信息.具有开源,轻量级,多语言支 ...

  4. python pytest和allure环境_【转载】Python—Pytest+Allure定制报告

    Allure Test Report 一款测试报告框架,不仅报告美观,而且方便CI集成. 一.环境配置 安装Python依赖库: pip3 install pytest pip3 install py ...

  5. pytest+allure测试框架搭建

    https://blog.csdn.net/wust_lh/article/details/86685912 https://www.jianshu.com/p/9673b2aeb0d3 定制化展示数 ...

  6. pytest allure测试报告_用Pytest+Allure生成漂亮的HTML图形化测试报告

    对于软件测试工作来说,测试报告是非常重要的工作产出.一个漂亮.清晰.格式规范.内容完整的测试报告,既能最大化我们的测试工作产出,又能够减少开发人员和测试人员的沟通成本. 本篇文章将介绍如何使用开源的测 ...

  7. 生成html_用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告

    对于软件测试来说,测试报告是非常重要的工作产出.一个漂亮.清晰.格式规范的测试报告,能够减少开发人员和测试人员的沟通成本. 本篇文章将介绍如何使用开源的测试报告生成框架 Allure 生成规范.格式统 ...

  8. jenkins 插件目录_Windows下allure+pytest+jenkins集成手册!

    Pytest是什么 pytest是python的一款测试框架,拥有unittest的功能并比它更丰富. Allure是什么 有非常多的优秀的测试框架,但却是有非常少优秀的报告工具可以展示非常清楚的用例 ...

  9. python venv jenkins_Jenkins+Pytest+Allure集成测试环境

    内容简介 本文会介绍如何从0到1构建Python项目的集成测试环境,文中会详细提及部署过程中会遇到的各种问题. Pytest负责Python代码测试 Allure负责测试报告HTML界面展示 Jenk ...

最新文章

  1. deep_sort_face
  2. 字节跳动技术整理:mysql查询重复数据sql
  3. python开发的优秀界面-八款常用的 Python GUI 开发框架推荐
  4. 剑指offer第41题 和为s的两个数
  5. hdu 1298 字典树 + DFS (模拟T9文本输入)
  6. 058_JavaScript函数arguments对象
  7. Spring注解的使用步骤,@Component注解创建的对象名称,常用注解Component、Repository、Service以及Controller的区别
  8. java ssm 分页_SSM实现简单后台分页
  9. 重庆大学计算机学院就读,唐远炎(计算机学院)老师 - 重庆大学 - 院校大全
  10. 【模拟】【递归】解压字符串(jzoj 1519)
  11. 风雨20年:我所积累的20条编程经验 (转)
  12. Node中使用token(基于第三方包jsonwebtoken)
  13. 外设驱动库开发笔记27:ESP8266无线通讯驱动
  14. 关于INADDR_ANY
  15. LeetCode(872)——叶子相似的树(JavaScript)
  16. QT不让windows休眠的方法
  17. Linux下QT创建项目错误处理
  18. 如何在 Mac 上使用剪贴板?
  19. 郑义宣就任韩国现代汽车集团会长;爱立信携手中国电信运用爱立信频谱共享技术 | 美通企业日报...
  20. 图片视频音频开源文件转换器file-converter

热门文章

  1. 转 淘宝屏蔽百度的原因
  2. linux netstat -an命令,linux netstat 总结
  3. Android利用zxing用相机扫描识别二维码(添加闪光灯和本地二维码)超详细教程
  4. ffmpeg-probe探针
  5. Word文档如何自定义添加表格
  6. 【强化学习论文合集】七.2017神经信息处理系统大会论文(NIPS2017)
  7. 坚果云选择性同步重拾
  8. mysql cacherowset_Java实现分页数据获取CachedRowSet
  9. 使用PPT绘制示意图
  10. vs 添加快捷键 | 修改快捷键、添加注释、添加快速插入代码(使用#if 0 注释)