用Pytest+Allure生成漂亮的HTML图形化测试报告[通俗易懂]

用Pytest+Allure生成漂亮的HTML图形化测试报告[通俗易懂]对于软件测试来说,测试报告是非常重要的工作产出。一个漂亮、清晰、格式规范的测试报告,能够减少开发人员和测试人员的沟通成本。本篇文章将介绍如何使用开源的测试报告生成框架Allure生成规范、格式统一、美观的测试报告。通过这篇文章的介绍,你将能够:-将Allure与Pytest测试框架相结合;-执行测试之后,生成Allure格式的测试报告。1、Allure测…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

对于软件测试工作来说,测试报告是非常重要的工作产出。一个漂亮、清晰、格式规范、内容完整的测试报告,既能最大化我们的测试工作产出,又能够减少开发人员和测试人员的沟通成本。

本篇文章将介绍如何使用开源的测试报告生成框架Allure生成规范、格式统一、美观的测试报告。
通过这篇文章的介绍,你将能够:

  • 将Allure与Pytest测试框架相结合;
  • 如何定制化测试报告内容
  • 执行测试之后,生成Allure格式的测试报告。
  • 如何与Jenkins集成。
  • 将测试环境信息展示到测试报告中。

1、Allure测试报告介绍

Allure是一款轻量级并且非常灵活的开源测试报告框架。 它支持绝大多数测试框架, 例如TestNG、Pytest、JUint等。它简单易用,易于集成。下面就Pytest如何与Allure集成做详细介绍。

2、Pytest框架集成Allure

Pytest是Python的单元测试框架,非常方便和易用。强烈推荐对于用Python进行测试工作的小伙伴使用这个测试框架,相比与Python自带的UnitTest好用太多太多。这篇文章我不会介绍太多Pytest测试框架的使用,今天主要是介绍如何将测试报告生成工具Allure集成到Pytest中。

2.1 安装Allure Pytest Plugin

allure-pytest是Pytest的一个插件,通过它我们可以生成Allure所需要的用于生成测试报告的数据。安装allure-pytest插件方法:

$ pip install allure-pytest

2.2 改造基于Pytest的测试用例

allure-pytest的官方文档中详细介绍了allure-pytest所具有的功能。本篇文章不会再翻译一遍,而是从实际入手,给大家介绍如何将其应用到自己的框架中。

为了使用Allure生成报告,需要在测试脚本中加入Allure特性。而这个操作并不会对原有的测试用例逻辑产生任何变动。

直接看下面的脚本,我通过在脚本中添加注释的方式给大家解释allure特性的用途。比如测试脚本是test_shopping_trolley.py:

#!/usr/bin/env python
# coding=utf-8

import pytest
import allure


@allure.feature('购物车功能')  # 用feature说明产品需求,可以理解为JIRA中的Epic
class TestShoppingTrolley(object):
    @allure.story('加入购物车')  # 用story说明用户场景,可以理解为JIRA中的Story
    def test_add_shopping_trolley(self):
        login('刘春明', '密码')  # 步骤1,调用“step函数”
        with allure.step("浏览商品"):  # 步骤2,step的参数将会打印到测试报告中
            allure.attach('笔记本', '商品1')  # attach可以打印一些附加信息
            allure.attach('手机', '商品2')
        with allure.step("点击商品"):  # 步骤3
            pass
        with allure.step("校验结果"):  # 步骤4
            allure.attach('添加购物车成功', '期望结果')
            allure.attach('添加购物车失败', '实际结果')
            assert 'success' == 'failed'

    @allure.story('修改购物车')
    def test_edit_shopping_trolley(self):
        pass

    @pytest.mark.skipif(reason='本次不执行')
    @allure.story('删除购物车中商品')
    def test_delete_shopping_trolley(self):
        pass


@allure.step('用户登录')  # 将函数作为一个步骤,调用此函数时,报告中输出这个步骤,我把这样的函数叫“step函数”
def login(user, pwd):
    print(user, pwd)

上面使用了Allure的几个特性:

  • @allure.feature # 用于描述被测试产品需求
  • @allure.story # 用于描述feature的用户场景,即测试需求
  • with allure.step # 用于描述测试步骤,将会输出到报告中
  • allure.attach # 用于向测试报告中输入一些附加的信息,通常是一些测试数据,截图等
  • @pytest.allure.step # 用于将一些通用的函数作为测试步骤输出到报告,调用此函数的地方会向报告中输出步骤

3、生成Allure测试报告

测试脚本中添加了Allure特性之后,可以通过两步,就可以展示出测试报告了。

第一步,生成测试报告数据

在py.test执行测试的时候,指定–alluredir选项及结果数据保存的目录:

$ py.test test/ --alluredir ./result/

./result/中保存了本次测试的结果数据。另外,还可以执行指定features或者stories执行一部分测试用例,比如执行”购物车功能“下的”加入购物车“子功能的测试用例:

$ py.test test/ --allure_features='购物车功能' --allure_stories='加入购物车'

第二步,生成测试报告页面

通过下面的命令将./result/目录下的测试数据生成测试报告页面:

$ allure generate ./result/ -o ./report/ --clean

–clean选项目的是先清空测试报告目录,再生成新的测试报告。

这一步需要提前安装allure命令行,如果是Mac电脑,推荐使用Homebrew安装。

$ brew install allure

4、解读测试报告

打开生成的测试报告后,浏览器被自动调起,展示测试报告。下面我们分别看看测试报告的几个页面。

4.1、首页

在这里插入图片描述
首页中展示了本次测试的测试用例数量,成功用例、失败用例、跳过用例的比例,测试环境,SUITES,FEATURES BY STORIES等基本信息,当与Jenkins做了持续置成后,TREND区域还将显示,历次测试的通过情况。
首页的左边栏,还从不同的维度展示测试报告的其他信息,大家可以自己点进去看看。

4.2、Behaviors页面

进入Behaviors页面,这个页面按照FEATURES和 STORIES展示测试用例的执行结果:
在这里插入图片描述
从这个页面可以看到“购物车功能”这个FEATURES包含的三个STORIES的测试用例执行情况。

4.3、Suites页面

Allure测试报告将每一个测试脚本,作为一个Suite。在首页点击Suites区域下面的任何一条Suite,都将进入Suites页面。
在这里插入图片描述
这个页面,以脚本的目录结构展示所有测试用例的执行情况。

4.4、Graphs页面

这个页面展示了本次测试结果的统计信息,比如测试用例执行结果状态、测试用例重要等级分布、测试用例执行时间分布等。
在这里插入图片描述

4.5、测试用例详情页面

在Suites页面上点击任何一条测试用例,Suites页面的右侧将展示这条用例的详细执行情况。
在这里插入图片描述
从这个页面可以看到测试用例执行的每一个步骤,以及每个步骤的执行结果,每一个步骤都可以添加附件,作为重要信息补充。从这里,对于失败的测试用例,可以一目了然看到原因。

5、Jenkins中生成Allure报告

5.1、安装 Allure Plugin

首先需要给Jenkins安装Allure Plugin。在Jenkins的插件管理页面,搜索“allure”,在搜索结果页,选择“Allure Jenkins Plugin”进行安装。
安装完成之后重启一下Jenkins。
在Jenkins的“全局工具管理”页面,找到Allure Commandline模块进行安装:
这里写图片描述
点击后,弹出下面的页面,输入Allure的命令别名(随便填),勾选自动安装(推荐这种方式)。选择版本后,点击Apply 和Save。
这里写图片描述

5.2、修改Pipeline

在Pipeline的定义中,在执行测试用例的环节增加--alluredir ./allure-results保存测试结果数据,并在构建后的步骤中增加allure includeProperties: false, jdk: '', report: 'jenkins-allure-report', results: [[path: 'allure-results']]将测试结果数据生成测试报告页面,完整的Jenkinsfile如下:

pipeline {
    // ...
    stages {
    //...
        stage('执行测试用例') {
            steps {
                sh "py.test tests/ --alluredir ./allure-result"
            }
        }
    }
    post {
           always{
            script {
                allure includeProperties: false, jdk: '', report: 'jenkins-allure-report', results: [[path: 'allure-result']]
            }
        }
    }
}

这样,我们的Jenkins Job执行完测试用例时候,将在Job的主页面上看到Allure Report图标,点击进去就看到了Allure Report报告。
这里写图片描述
如果你现在依然使用的是Freestyle风格的job。那么需要在构建后步骤中,添加Allure Report步骤,将allure的报告数据添加到Path中:
在这里插入图片描述
这样当job执行完成后,也可以看到allure测试报告了。

6、增加测试环境到Allure报告中

在4.1小节展示的报告首页中,有一个区域可以展示测试执行的环境信息。但是目前allure-pytest插件中并没有实现。不过在之前我用过的另外一个插件pytest-allure-adaptor是支持的。可惜pytest-allure-adaptor插件项目已经被标记为Deprecated了。

将测试环境信息输出到报告中,对于测试报告来讲是非常有意义的。我们有没有什么变通的办法可以实现呢?在网上进行了一番查询,发现stackoverflow上也有很多关于这个话题的讨论。其中一个话题还给出了Workaround方法,这里给大家贴上链接:
https://stackoverflow.com/questions/52030518/recommend-workaround-for-the-missing-environmental-support-in-pytest-allure

这个Workaround的方法也比较简单方便,就是在allure-results目录中,新建environment.properties文件,并以key=value形式,在其中写入环境相关的信息,比如:

browser=chrome
backend=staging
domain=http://baidu.com

这样,在执行allure generate ./result/ -o ./report/ --clean生成测试报告时,将能将测试环境信息融合到测试报告的页面中了。
在这里插入图片描述
这样看,测试报告是不是更显得完整了呢?

不过,这种手动方式还是比较麻烦,下面我们看看如何在pytest框架中,自动实现上面的workaround。

在Pytest中,有一个hook函数叫作pytest_sessionfinish,根据官方文档的描述,这个函数是在整个测试完成后被调用的,我们可以在其内部实现我们自己的逻辑。

我们将生成environment.properties文件放到pytest_sessionfinish中实现,再适合不过了。在测试项目的根目录下创建conftest.py文件,在其中实现pytest_sessionfinish函数,代码如下。

#!/usr/bin/env python
# coding=utf-8

def pytest_sessionfinish(session):
    with open("{}/result/environment.properties".format(session.config.rootdir), "w") as f:
        f.write("browser=chrome\nbackend=staging\ndomain=http://baidu.com")

这样,我们每次测试完成后,就自动将我们的测试环境信息添加到测试报告中了。

7、总结

团队内部可能不同项目使用的测试框架不一样,每个测试框架生成的测试报告也不一样。但由于Allure报告支持很多测试框架,通过Allure可以生成格式一致的测试报告,这就对外提供格式一致的测试报告提供了方便。

目前测试工程实践中,另外一个常用的自动化测试工具组合是采用的Java+TestNG的架构,TestNG框架如何集成Allure也非常简单。大家可以尝试参考官方文档来实现集成一下。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164416.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月26日 上午8:46
下一篇 2022年7月26日 上午8:46


相关推荐

  • python深拷贝和浅拷贝的使用场景_Python深拷贝和浅拷贝使用方法

    python深拷贝和浅拷贝的使用场景_Python深拷贝和浅拷贝使用方法Python 深拷贝和浅拷贝使用方法发布时间 2020 06 0616 52 01 来源 亿速云阅读 182 这篇文章运用了实例代码展示 Python 深拷贝和浅拷贝使用方法 代码非常详细 可供感兴趣的小伙伴们参考借鉴 希望对大家有所帮助 一 浅拷贝所谓浅拷贝 指的是对于某个对象 虽然创建了与该对象具有相同值的另一个对象 但是 这两个对象內部嵌套的对应子对象全都是同一个对象 简单地说 外部进行了拷贝 内部

    2026年3月17日
    1
  • C学习笔记:CheckedListBox控件的用法

    C学习笔记:CheckedListBox控件的用法一 常用属性 方法和事件 1 常用属性 1 CheckOnClick 属性 CheckOnClick 属性是布尔类型的值 如果为 True 那么单击条目就能将条目勾选 如果为 false 则要双击条目才能将其勾选 2 ColumnWidth 属性 ColumnWitdh 属性是整型数据 表示多列条目各列的列宽 该属性只有在 MultiColumn 属性 允许多列显示 设置为 true 时才有意义

    2026年3月19日
    3
  • vue-cli3搭建项目之webpack配置

    vue-cli3搭建项目之webpack配置vue cli3 搭建完整项目之 webpack 配置 前面篇介绍了项目初始化 下面就要开始对项目 webpack 进行配置 由于 vue cli3 将 webpack 的基础配置全部内嵌了 这就导致我们初始化项目完成之后发现原先的 webpack 的 config 配置全部都消失不见了 那该怎么办呢 别慌 vue cli3 早就考虑到了这一点 它预留了一个 vue config js 的 js 文件供我们对 webpack 进行自

    2026年3月20日
    3
  • 非空判断方法:IsNotEmpty和isNotBlank的区别。[通俗易懂]

    非空判断方法:IsNotEmpty和isNotBlank的区别。[通俗易懂]在项目中,我们用的最多的是StringUtils中的非空判断方法,相信大部分人都用过IsNotEmpty或者isEmpty方法 publicstaticbooleanisNotEmpty(Stringstr)判断某字符串是否非空,等于!isEmpty(Stringstr),这里不能排除空格字符示例:StringUtils.isNotEmpty(null)=falseStringU…

    2022年8月12日
    10
  • Android面试题及答案整理(2022年最新Android面试题大全带答案)

    Android面试题及答案整理(2022年最新Android面试题大全带答案)Android 面试题及答案 2022 年最新 Android 面试题大全带答案 发现网上很多 Android 面试题整理都没有答案 所以花了很长时间搜集 本套 Android 面试题大全 Android 面试题大汇总 有大量经典的 Android 面试题以及答案 包含 Android 语言常见面试题 Android 工程师高级面试题及一些大厂 Android 开发面试宝典 面试经验技巧等 应届生 实习生 企业工作过的 都可参考学习 这套 Android 面试题汇总大全 希望对大家有帮助哈 此面试题合集分为 9 个部分 Java 基础 And

    2026年3月17日
    2
  • sudoers修改_为用户增加sudo权限(修改sudoers文件)

    sudoers修改_为用户增加sudo权限(修改sudoers文件)在使用Linux系统过程中,通常情况下,我们都会使用普通用户进行日常操作,而root用户只有在权限分配及系统设置时才会使用,而root用户的密码也不可能公开。普通用户执行到系统程序时,需要临时提升权限,sudo就是我们常用的命令,仅需要输入当前用户密码,便可以完成权限的临时提升。在使用sudo命令的过程中,我们经常会遇到当前用户不在sudoers文件中的提示信息,如果解决该问题呢?通过下面几个步骤…

    2022年6月20日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号