Pytest的测试报告——Allure

一、html-report测试报告

html-report测试报告。是pytest下基本的测试报告。要使用pytest-html测试报告,就要确保python版本在3.6及以上即可。本身pytest所提供的测试结果汇总,是基于控制台的文本输出形式。

pytest-html是基于HTML格式实现的测试报告的结果记录。属于pytest下的插件。所以要调用的话,需要提前安装这个插件。

安装指令:

  • pip install pytest-htmlpip源自行添加

在实际的pytest运行过程中,如果需需要生成测试报告,则需要添加指令 --html=测试报告名称.html。

import pytest

@pytest.fixture
def first():
    return 'a'
def test_function(first):
    print(first+'hcc')

直接运行也能得到日志报告,但是不够直观 ,可以运行:

pytest -s -v test_html_report.py --html=./report.html

得到html文件:

复制代码
注意:
默认生成html测试报告的指令 --html=测试报告.html,不会捕获页面所显示的日志信息。如果要捕获日志信息,则需要添加指令 --capture=sys

如果要将测试报告进行邮件或者其他途径的分享,需要添加指令--self-contained-html 。++将测试报告的css样式直接加载到html文件之中,不再额外生成css样式文件夹。++


二、Allure测试报告

Allure测试报告是自动化测试领域下的测试报告天花板。本身是适配到Python自动化、Java自动化都可以满足的一种测试报告。属于独立化的一个测试报告插件。

环境部署:

  • Allure安装:

    • 下载安装包,解压到指定路径,进入到allure的bin路径下,复制bin的完整路径,添加到系统环境变量的path之中

    • 启动cmd,运行allure --version指令,如果在控制台显示有allure版本信息则表示安装成功

  • allure-pytest安装:

    • pip install allure-pytest进行安装

2.1 mac下allure安装

方法一:使用终端

1、打开终端

brew install allure

2、安装完成后验证是否成功

allure --version

方法二:安装包+终端

1、下载allure安装包,tzg或者zip

https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/

2、解压安装包,放到合适的位置

3、打开终端

vi ~/.bash_profile

4、回车按E,进入编辑页面,按"i"进入编辑状态

5、添加以下两行

export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

export PATH=${PATH}:自己本地allure的bin目录的路径

6、按esc退出编辑状态,输入:wq退出编辑页

7、刷新配置文件

source ~/.bash_profile

8、验证allure是否配置成功

allure --version

2.2 allure的使用

复制代码
Allure测试报告的生成:
    1. 安装allure测试报告
    2. pytest --alluredir 指令用于将测试结果的数据保存在allure结果之中
    3. allure serve ./allure_report
        这个指令是生成临时allure测试报告。并提供web服务以供访问
        生成的测试报告保存在用户的缓存临时文件夹下,路径无法修改
    4. allure generate ./allure_report -o ./report_allure
        这个指令是将allure采集的测试数据生成为完整的allure测试报告,保存在指定路径下。
import pytest

@pytest.fixture
def first():
    return 'a'
def test_function(first):
    print(first+'hcc')

运行指令: pytest --alluredir ./allure_report

将测试结果的数据保存在allure结果之中,同时生成一个测试报告文件。

allure serve ./allure_report 这个指令是生成临时allure测试报告。并提供web服务以供访问。生成一个完整的测试报告。

因为pytest下的allure测试报告生成,需要调用allure指令,这个指令和pytest没有关系,所以想要一步实现数据的记录以及报告的生成,记得添加**os.system()**方法来调用allure指令。但是,可能allure指令调用会失败。

如果是通过指令运行,集成到pytest之中,生成allure测试报告的话,这个测试报告想要分享,可以在Jenkins中进行集成的方式来做分享(也就是通过链接进行分享的模式)。

如果想要关联持续集成,做到更加完整的自动化测试效果,可以通过allure来实现测试报告的生成。


三、Allure装饰器使用

在Allure测试报告之中,进行了非常详细的数据的展示,包括各种分类、图形化界面等。同时,对于自动化测试用例的执行,在Allure中也可以做到一定量的管理,让整个测试报告变得更加完整。

Allure如何更加美观地展示所有的测试内容呢?可以通过各类不同的装饰器来丰富测试报告相关信息。让整个报告看起来更加完整,易读,易理解。

  1. epic装饰器:用于定义整个测试的描述信息,可以理解为总的测试说明,如果输入的参数是相同的 例如: 当前执行了某一个系统的一个完整业务流程,通过不同的epic装饰器实现对不同的业务流程的总描述

  2. feature装饰器:用于定义到当前用例执行的功能模块的说明

  3. tory装饰器:对流程分支进行的定义与描述

  4. title装饰器:实现当前用例名称的定义

  5. escription装饰器:主要实现对用例的内容进行自定义的描述,也可以通过三引号的注释操作来实现同样的效果。需要注意为了代码的规范性,建议统一用一种方法

  6. step装饰器:用于显示测试的操作步骤。 装饰器形态的step可以对当前用例进行步骤的统一描述,无法实现对用例的所有步骤进行细化的处理 with allure.step('步骤描述')的方式可以实现对用例之中所有的不同操作步骤,进行细化的步骤描述,当出现问题的时候可以更加快速准确定位到出问题的点

3.1 epic装饰器

epic装饰器:用于定义整个测试的描述信息,可以理解为总的测试说明,如果输入的参数是相同的 例如: 当前执行了某一个系统的一个完整业务流程,通过不同的epic装饰器实现对不同的业务流程的总描述。

import pytest
import os
import allure

@allure.epic("这是测试总说明")
def test_function01():
    print('这是1号测试用例')
@allure.epic("这是测试总说明")
def test_function02():
    print('这是2号测试用例')
@allure.epic("这是测试总说明")
def test_function03():
    print('这是3号测试用例')
@allure.epic("这是测试总说明1")
def test_function04():
    print('这是4号测试用例')
@allure.epic("这是测试总说明1")
def test_function05():
    print('这是5号测试用例')


if __name__ == '__main__':
    pytest.main(['-s', '-v', '--alluredir=./allure_report'])
    os.system(r'allure generate ./allure_report -o ./report_allure --clean')

查看测试报告:


3.2 feature装饰器

feature装饰器:用于定义到当前用例执行的功能模块的说明

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
def test_function01():
    print('这是1号测试用例')
    
@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
def test_function02():
    print('这是2号测试用例')
    
@allure.epic("这是测试总说明")
@allure.feature('添加购物车功能模块')
def test_function03():
    print('这是3号测试用例')
    
@allure.epic("这是测试总说明")
@allure.feature('商品详情功能模块')
def test_function04():
    print('这是4号测试用例')
    
@allure.epic("这是测试总说明")
@allure.feature('支付功能模块')
def test_function05():
    print('这是5号测试用例')

查看测试报告:


3.3 story装饰器

story装饰器:对流程分支进行的定义与描述

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
def test_function01():
    print('这是1号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
def test_function02():
    print('这是2号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('添加购物车功能模块')
@allure.story('实现购物车添加操作行为')
def test_function03():
    print('这是3号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('商品详情功能模块')
@allure.story('实现商品属性的获取')
def test_function04():
    print('这是4号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('支付功能模块')
@allure.story('实现支付的操作行为')
def test_function05():
    print('这是5号测试用例')

查看测试报告:


3.4 title装饰器

title装饰器:实现当前用例名称的定义

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
@allure.title('登录操作')
def test_function01():
    print('这是1号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
@allure.title('验证账号')
def test_function02():
    print('这是2号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('添加购物车功能模块')
@allure.story('实现购物车添加操作行为')
@allure.title('添加购物车')
def test_function03():
    print('这是3号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('商品详情功能模块')
@allure.story('实现商品属性的获取')
@allure.title('选择商品属性')
def test_function04():
    print('这是4号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('支付功能模块')
@allure.story('实现支付的操作行为')
@allure.title('进行支付')
def test_function05():
    print('这是5号测试用例')

查看测试报告:


3.5 escription装饰器

escription装饰器:主要实现对用例的内容进行自定义的描述,也可以**++通过三引号的注释操作++**来实现同样的效果。

import pytest
import os
import allure

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
@allure.title('登录操作')
@allure.description('实现用户的登录操作行为')
def test_function01():
    print('这是1号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
@allure.title('验证账号')
@allure.description('对已登录登录进行账号的正确性验证行为')
def test_function02():
    print('这是2号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('添加购物车功能模块')
@allure.story('实现购物车添加操作行为')
@allure.title('添加购物车')
@allure.description('实现添加购物车操作行为')
def test_function03():
    print('这是3号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('商品详情功能模块')
@allure.story('实现商品属性的获取')
@allure.title('选择商品属性')
@allure.description('对测试商品的属性进行选择')
def test_function04():
    print('这是4号测试用例')

@allure.epic("这是测试总说明")
@allure.feature('支付功能模块')
@allure.story('实现支付的操作行为')
@allure.title('进行支付')
@allure.description('实现对已选择的商品进行最终的支付处理')
def test_function05():
    print('这是5号测试用例')

查看测试报告:


3.6 step装饰器

step装饰器:用于显示测试的操作步骤。 装饰器形态的step可以对当前用例进行步骤的统一描述,无法实现对用例的所有步骤进行细化的处理。

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
@allure.title('登录操作')
@allure.description('实现用户的登录操作行为')
@allure.step('进行用户的账号与密码输入')
def test_function01():
    print('这是1号测试用例')

查看测试结果:

with allure.step('步骤描述')的方式可以实现对用例之中所有的不同操作步骤,进行细化的步骤描述,当出现问题的时候可以更加快速准确定位到出问题的点

def test_function01():
    
    with allure.step('1.进行登录页的访问'):
        print('这是1号测试用例1')
    with allure.step('2.进行用户名称的输入'):
        print('这是1号测试用例2')
    with allure.step('3.进行密码的输入'):
        print('这是1号测试用例3')
    with allure.step('4.进行登录按钮的点击'):
        print('这是1号测试用例4')

查看测试结果:

装饰器形态的step可以对当前用例进行步骤的统一描述,无法实现对用例的所有步骤进行细化的处理 。

with allure.step('步骤描述')的方式可以实现对用例之中所有的不同操作步骤,进行细化的步骤描述,当出现问题的时候可以更加快速准确定位到出问题的点 。

Allure测试用例等级管理(参考缺陷等级定义),所有的用例默认为normal级别。用例可以分为以下几个 等级:

    1. blocker 阻塞缺陷(功能未实现,无法继续下一步操作)
    1. critical 严重缺陷
    1. normal 一般缺陷
    1. minor 次要缺陷
    1. trivial 轻微缺陷
  • 写法示例: 完整写法@allure.severity(allure.severity_level.BLOCKER) 简易写法 @allure.severity('critical')
  • 严重级别可以通过类来直接进行定义,定义的效果就是将整个类的所有测试用例定义为当前的级别,normal以下无法定义为类级别

相关推荐
Tech Synapse3 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
乌啼霜满天24911 分钟前
JDBC编程---Java
java·开发语言·sql
肥猪猪爸21 分钟前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
色空大师24 分钟前
23种设计模式
java·开发语言·设计模式
Bruce小鬼37 分钟前
QT文件基本操作
开发语言·qt
2202_7544215442 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
我只会发热1 小时前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
LZXCyrus1 小时前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
Enougme1 小时前
Appium常用的使用方法(一)
python·appium
懷淰メ1 小时前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5