Pytest中测试结果收集:pytest_terminal_summary!

前言

Pytest是Python的一种强大的测试框架,它提供了丰富的功能和插件来满足各种测试需求。

其中,pytest_terminal_summary是一个钩子函数,它允许我们在测试运行结束后,添加自定义的总结信息到测试报告中。这个功能在需要对测试结果进行额外分析或者美化测试报告时非常有用。

什么是pytest_terminal_summary?

首先,我们需要了解pytest的插件钩子机制。pytest是一个非常灵活的测试框架,它允许用户通过插件来扩展其功能。每一个插件都可以实现一些钩子函数,这些函数在pytest的特定运行阶段被调用,从而实现对pytest行为的定制化。

pytest_terminal_summary是pytest的一个插件钩子,用于在所有的测试运行完成后向终端报告总结信息。在编写pytest插件或者定制化pytest测试报告的时候,你可能会用到这个钩子。

如何使用pytest_terminal_summary?

要使用pytest_terminal_summary,你需要在你的pytest插件或者conftest.py文件中定义这个方法。这个方法会在所有的测试运行结束后被自动调用。下面是一个简单的示例:

# content of conftest.py
def pytest_terminal_summary(terminalreporter):
    pass_count = len([rep for rep in terminalreporter.stats.get('passed', []) if rep.when == 'call'])
    fail_count = len([rep for rep in terminalreporter.stats.get('failed', []) if rep.when == 'call'])
    skip_count = len([rep for rep in terminalreporter.stats.get('skipped', []) if rep.when == 'call'])
    error_count = len([rep for rep in terminalreporter.stats.get('error', []) if rep.when == 'call'])

    terminalreporter.write('\n')
    terminalreporter.write(f'Passed: {pass_count}, Failed: {fail_count}, Skipped: {skip_count}, Errors: {error_count}\n')

在这个例子中,我们首先从terminalreporter的stats属性中获取了各种测试结果的数量,然后我们在终端中打印出这些数据,也可以将这些数量添加到测试报告中。

注意,terminalreporter.stats是一个字典,它包含了所有的测试结果。每个结果都是一个TestReport对象,它有一个when属性,这个属性的值可以是'setup''call'或者'teardown',分别表示测试的设置阶段,执行阶段和清理阶段。

在这个例子中,我们只关心执行阶段的结果,所以我们在获取结果的时候检查了rep.when == 'call'

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    passed_tests = terminalreporter.stats.get('passed', [])
    failed_tests = terminalreporter.stats.get('failed', [])
    print(f"总共运行了 {len(passed_tests) + len(failed_tests)} 个测试,其中 {len(passed_tests)} 个通过,{len(failed_tests)} 个失败。")

这个例子会在所有测试运行完毕后,打印出总共运行了多少个测试,其中有多少个通过,有多少个失败。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

但是,这只是pytest_terminal_summary的基本用法。实际上,你可以做更多的事情。例如,你可以根据测试的运行情况,动态地改变测试报告的内容。

为了实现这一点,你需要更深入地了解terminalreporter对象。这个对象有一个stats属性,它是一个字典,包含了所有的测试结果。字典的键是测试结果的类型(如'passed'、'failed'、'skipped'等),值是一个列表,包含了该类型的所有测试结果。

每一个测试结果都是一个TestReport对象,包含了测试的详细信息,如测试的名称、测试的状态、测试的持续时间等。你可以通过这些信息来定制化你的测试报告。

例如,你可以这样使用pytest_terminal_summary

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    passed_tests = terminalreporter.stats.get('passed', [])
    failed_tests = terminalreporter.stats.get('failed', [])
    total_tests = len(passed_tests) + len(failed_tests)
    total_time = sum([x.duration for x in passed_tests + failed_tests])
    
    print(f"总共运行了 {total_tests} 个测试,其中 {len(passed_tests)} 个通过,{len(failed_tests)} 个失败。")
    print(f"总共耗时 {total_time} 秒。")
    
    if failed_tests:
        print("以下测试失败了:")
        for test in failed_tests:
            print(f"- {test.nodeid}")

这个例子不仅会打印出总共运行了多少个测试,其中有多少个通过,有多少个失败,还会打印出总共耗时多少秒,以及哪些测试失败了。

方法参数:

pytest_terminal_summary方法的定义如下:

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    ...
  • terminalreporter:这是一个TerminalReporter对象,它提供了一些方法来添加内容到测试报告中。是一个特殊的报告对象,用于向终端输出信息。你可以用它来打印自定义的总结信息。

  • exitstatus:这是一个整数,表示pytest的退出状态。0表示所有测试都通过,1表示有一些测试失败。

  • config:这是一个Config对象,是pytest的配置对象,包含了pytest运行的所有配置信息,表示pytest的配置信息。

总结

pytest_terminal_summary是一个特殊的钩子方法,它是pytest测试框架的一部分。这个方法在所有的测试运行结束后被调用,它的主要作用是提供一个机会来处理和显示pytest运行的总结信息。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:自动化测试老司机 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/419422.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring基础——使用XML配置一个Bean

目录 初始化XML文件实例化Spring容器实例化ApplicationContext 获取指定Bean对象 这里解释一下为什么现在都流行注解开发了而依然还要来去了解xml配置文件,甚至很多博客都不愿意去写xml相关的配置。 官方文档里提出了注解开发的优势是在声明中已经提供了大量的上下文…

React富文本编辑器开发(一)

这是一个系统的完整的教程,每一节文章的内容都很重要。这个教程学完后自己可以开发出一个相当完美的富文本编辑器了。下面就开始我们今天的内容: 安装 是的,我们的开发是基于Slate的开发基础,所以要安装它: yarn ad…

springboot-基础-eclipse配置+helloword示例

备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决! 下一篇:springboot-基础-添加model和controller的简单例子常用注解含义 目录 配置helloword示例新建项目创建文件 配置 spring boot官方有定制版eclipse,也就是…

【Python笔记-设计模式】迭代器模式

一、说明 迭代器模式是一种行为设计模式,让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。 (一) 解决问题 遍历聚合对象中的元素,而不需要暴露该对象的内部表示 (二) 使用场景 需要对聚合对象…

抖店怎么开店注册?新手需要准备什么?这几个步骤很关键!

我是电商珠珠 不少人瞄准了抖店这个短视频电商势头,想要在今年大干一场。关于抖店注册这方面,部分人还不太清楚,今天我就带大家一步步注册,看一遍就会了。 前期准备资料 前期新手的话,需要准备一张个体工营业执照&a…

C++/C百元买百鸡问题现在有100元要买100只鸡,一只公鸡5元,一只母鸡3元,三只小鸡一元,问今如何买?

具体代码如下 #include<stdio.h>int main() {int i, j, k;for (i 0; i < 20; i)for (j 0; j < 33; j) {k 100 - i - j;if (k % 3 0 && i * 5 j * 3 k / 3 100)printf("公鸡&#xff1a;%d&#xff0c;母鸡&#xff1a;%d&#xff0c;小鸡&…

p18 线性代数,行阶梯型矩阵

行阶梯型矩阵 行最简型矩阵

【VS Code】配置代码快捷提示

配置路径 进入如下界面&#xff0c;如果需要特定语言的配置&#xff0c;则选择相应的语言&#xff0c;这里演示为全局配置&#xff0c;没有创建过全局snippets配置的&#xff0c;使用New Global Snippets file 选项进行配置 然后在如下配置界面输入需要该配置的名称 配置编辑…

喜讯!持安科技CEO何艺获评安全419《2023年度十大优秀创业者》

近日&#xff0c;由网络安全产业资讯媒体安全419主办的《年度策划》2023年度十大优秀创业者正式出炉&#xff0c;零信任办公安全技术创新企业持安科技创始人兼CEO何艺&#xff0c;获评十大优秀创业者。 这是安全419第二届推出该项目的评选活动&#xff0c;安全419编辑老师在多年…

安装 Ubuntu 22.04.3 和 docker

文章目录 一、安装 Ubuntu 22.04.31. 简介2. 下载地址3. 系统安装4. 系统配置 二、安装 Docker1. 安装 docker2. 安装 docker compose3. 配置 docker 一、安装 Ubuntu 22.04.3 1. 简介 Ubuntu 22.04.3 是Linux操作系统的一个版本。LTS 版本支持周期到2032年。 系统要求双核 C…

【六袆 - React】Next.js:React 开发框架;Next.js开发框架的特点

Next.js&#xff1a;React 开发框架 Next.js的特点 1.直观的、基于页面的路由系统&#xff08;并支持动态路由&#xff09; Next.js 提供了基于文件系统的路由&#xff0c;意味着你可以通过创建页面文件来定义路由。 伪代码示例&#xff1a; // pages/index.js export defa…

挚达科技冲刺上市:乐视汽车曾是股东,多个投资者提前清仓提出

2月29日&#xff0c;上海挚达科技发展股份有限公司&#xff08;下称“挚达科技”&#xff09;递交招股书&#xff0c;准备在港交所主板上市&#xff0c;申万宏源香港为其独家保荐人。据此前媒体报道&#xff0c;挚达科技正在考虑赴港IPO&#xff0c;可能募集约10亿港元。 据官网…

three.js 向量叉乘cross

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div><div></div></div></el-main></el-container>…

vulnhub-----Hackademic靶机

文章目录 1.C段扫描2.端口扫描3.服务扫描4.web分析5.sql注入6.目录扫描7.写马php反弹shell木马 8.反弹shell9.内核提权 1.C段扫描 kali:192.168.9.27 靶机&#xff1a;192.168.9.25 ┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0,…

Vue ElementUI 修改消息提示框样式—messageBox 的大小

在窄屏模式下&#xff08;移动端或pda&#xff09;&#xff0c;提示框的宽度太宽&#xff0c;会出现显示不完全的问题。 应当如何修改 ElementUI 的样式呢&#xff1f; open() {this.$confirm(window.vm.$i18n.t("tips.conLogOut"),window.vm.$i18n.t("tips.tip…

数据库进阶——如何提升数据库的安全性,以MySQL和Redis加固为例

目录 引出数据库加固加固思路MySQLRedis Redis冲冲冲——缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 数据库进阶——如何提升数据库的安全性&#xff0c;以MySQL和Redis加固为例 数据库加固 加固思路 账号配置 应按照用户分配账号&…

工厂模式:没你想像的那么难

工厂模式 工厂模式是一种创建型设计模式&#xff0c;它允许创建对象而无需指定将要创建的对象的具体类。它通过将对象的创建委托给一个单独的方法或类来完成&#xff0c;从而隐藏了对象的实例化逻辑。这样可以提高代码的灵活性&#xff0c;减少了代码中的重复和耦合。 在工厂…

css【详解】—— 圣杯布局 vs 双飞翼布局 (含手写清除浮动 clearfix)

两者功能效果相同&#xff0c;实现方式不同 效果预览 两侧宽度固定&#xff0c;中间宽度自适应&#xff08;三栏布局&#xff09;中间部分优先渲染允许三列中的任意一列成为最高列 圣杯布局 通过左右栏填充容器的左右 padding 实现&#xff0c;更多细节详见注释。 <!DOCTYP…

MySQL:数据库中有哪些锁

1、全局锁 加上全局锁后整个数据库就处于只读状态了&#xff0c;这时其他线程执行以下操作&#xff0c;都会被阻塞&#xff1a; 对数据的增删改操作&#xff0c;比如 insert、delete、update等语句&#xff1b;对表结构的更改操作&#xff0c;比如 alter table、drop table 等…

【AI+应用】怎么快速制作一个类chatGPT套壳网站

最近有人问我&#xff0c; 看了我之前写的一篇文章 [人工智能] AI浪潮下Sora对于普通人的机会 &#xff0c; 怎么做一个类chatGPT的套壳网站&#xff0c;是从0开始做么。 对于普通人来说&#xff0c;万事不懂先AI&#xff0c; AI找不到答案搜索google或百度。对于程序员来说…