jenkins学习18 - 把 pytest 运行结果通过 jenkins 发送到邮件正文里_上海-悠悠的博客-程序员秘密

技术标签: Jenkins  

前言

pytest 运行用例后会在终端最后一行打印总的运行结果类似于:===== 1 failed, 5 passed in 0.52s ====
这个运行的接口是可以通过 pytest_terminal_summary 这个hook函数拿到的,拿到后如何给到jenkins发邮件的报告里面呢?

pytest_terminal_summary

第一步先拿到pytest运行的测试结果,通过pytest_terminal_summary 这个hook函数
在项目根目录conftest.py文件下写如下代码

import time
from _pytest import terminal
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/


def pytest_terminal_summary(terminalreporter, exitstatus, config):
    '''收集测试结果'''
    # print(terminalreporter.stats)
    print("total:", terminalreporter._numcollected)
    print('passed:', len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown']))
    print('failed:', len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown']))
    print('error:', len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown']))
    print('skipped:', len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown']))
    print('成功率:%.2f' % (len(terminalreporter.stats.get('passed', []))/terminalreporter._numcollected*100)+'%')

    # terminalreporter._sessionstarttime 会话开始时间
    duration = time.time() - terminalreporter._sessionstarttime
    print('total times: %.2f' % duration, 'seconds')

运行后的结果

------------------------------------------------ Captured stdout call -------------------------------------------------
22222222
total: 6
passed: 5
failed: 1
error: 0
skipped: 0
成功率:83.33%
total times: 0.26 seconds
=============================================== short test summary info ===============================================
FAILED test_b.py::test_b - assert 1 == 2
============================================= 1 failed, 5 passed in 0.27s =============================================

到这一步实际上已经拿到结果了,很多小伙伴有疑问如何取出来?那么接下来我们只需要写个open函数把结果保存到项目根目录本地即可

result.txt保存本地

import time
from _pytest import terminal
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/


def pytest_terminal_summary(terminalreporter, exitstatus, config):
    '''收集测试结果'''
    # print(terminalreporter.stats)
    total = terminalreporter._numcollected
    passed= len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown'])
    failed=len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown'])
    error=len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown'])
    skipped=len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown'])
    successful = len(terminalreporter.stats.get('passed', []))/terminalreporter._numcollected*100
    # terminalreporter._sessionstarttime 会话开始时间
    duration = time.time() - terminalreporter._sessionstarttime
    print('total times: %.2f' % duration, 'seconds')

    with open("result.txt", "w") as fp:
        fp.write("TOTAL=%s" % total+"\n")
        fp.write("PASSED=%s" % passed+"\n")
        fp.write("FAILED=%s" % failed+"\n")
        fp.write("ERROR=%s" % error+"\n")
        fp.write("SKIPPED=%s" % skipped+"\n")
        fp.write("SUCCESSFUL=%.2f%%" % successful+"\n")
        fp.write("TOTAL_TIMES=%.2fs" % duration)

保存后txt内容

jenkins 执行shell

执行shell,输入运行pytest用例的命令

用于执行用例失败后,退出码为1,导致后面的步骤不会执行,于是设置为构建不稳定时的退出码:1

添加环境变量(Environment Injector)

添加构建操作 Environment Injector variables

Properties File Path 引用本地文件

到这一步前面执行完pytest生成的result.txt会把相关键值对添加到环境变量

邮件引用变量

系统管理-系统配置,配置邮件Default Content

<tr>    
            测试结果:<br/>            
            <td>
                       <p>用例总数:${TOTAL}  成功:${PASSED}  失败:${FAILED} 异常:${ERROR}  跳过:${SKIPPED}</p>
                       <p>运行成功率:${SUCCESSFUL}  运行时长:${TOTAL_TIMES}</p>
            </td>   
        </tr> 

构建job后收到的邮件

参考资料:
pytest Hooks函数pytest_terminal_summary https://www.cnblogs.com/yoyoketang/p/12741564.html
jenkins 添加环境变量 Environment Injector https://www.cnblogs.com/yoyoketang/p/14955965.html
jenkins 配置邮件发送 Email Extension Plugin https://www.cnblogs.com/yoyoketang/p/12174056.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27371025/article/details/118479340

智能推荐

关于Java代码中的获取手机号所在省市区相关的问题_Mr小张的博客-程序员秘密

在实际的项目开发中,可能会遇到根据手机号获取用户的省市区的需求,那么首先就不要慌,有百度的也有谷歌的,下面我把代码写出来。以谷歌的工具为例:首先在maven中引入谷歌的获取手机号省市区的包:&lt;dependency&gt; &lt;groupId&gt;com.googlecode.libphonenumber&lt;/groupId&gt; &lt;artifac...

BT3下载 与 BT3 U盘版制作_如此如此如此的博客-程序员秘密_bt3final_usb.iso

BT3 U盘版下载软件类型:国产软件 授权方式:免费软件 界面语言:简体中文 软件大小:783M 文件类型:.iso 运行环境:Win2003,WinXP,Win2000,Win9X 软件等级:★★★★★ 发布时间:2010-12-26 官方网址:http://www.backtrack-linux.org 演示网址:http://www.backtrack-linux.org 下载次数:

最小硬币问题_进行更改的最小硬币数量_cumt951045的博客-程序员秘密

最小硬币问题Description: 描述: This is classic dynamic programming problem to find minimum number of coins to make a change. This problem has been featured in interview rounds of Amazon, Morgan Stanley, Pay...

matlab shortest函数,MATLAB函數graphallshortestpaths不返回對稱矩陣_月宫一号的博客-程序员秘密

我正在使用MATLAB函數graphallshortestpaths來計算無向網絡頂點之間的最短路徑。無向網絡作爲加權邊緣列表文件給出,您可以在其中找到here。MATLAB函數graphallshortestpaths不返回對稱矩陣這是我用於計算最短路徑的MATLAB代碼:A=load('genome_edge_list');%Extract the edgesE=[A(:,1);A(:,2)]...

安卓逆向Xposed HOOK TB直播APP的x-sign参数(二)_StriveFarrell的博客-程序员秘密

最近学习安卓逆向,接触一下TB系的APP,了解大厂APP是做数据安全的,这篇文章主要介绍某宝直播APP的签名参数x-sign的HOOK过程,当然,其他的参数也是可以HOOK的。本文只用于学习交流,请勿他用。分析展示{"x-sign":"azSdY1002xAAGTOrG3oat7W3Cl5CuTOpOyrE7MLTDcHmpOcYgQ2AAK2s8P5+RHf/cTJX5G3EEiBQo/ftY5h33uGe4jkzuTOpM7kzqT","wua":"","x-mini-wua":"HHnB

C语言程序设计——猜数字游戏_Hey小孩的博客-程序员秘密_猜数字游戏编程c语言

游戏玩法:每次随机生成一个1~100之间的数字,玩家通过输入数字来猜这个数,如果没猜中则提示玩家猜大了或者猜小了,直到玩家猜中数字结束游戏。游戏玩法非常简单,那么怎么实现呢?首先对内容进行分析,我们首先需要生成一个随机数,可以考虑通过rand函数来实现:num = rand() % 100 + 1但是当我们写完代码调试试玩会发现每次的随机数都是相同的,并不能达到游戏效果,所以我们要在之前加入如下代码:srand((int)time(NULL));//随机数发生器初始化这样,每次我

随便推点

开启认知智能战略,加速爱数成为大数据基础设施领航者_阿明观察的博客-程序员秘密

从2006年成立推出数据备份的传统业务,到2021年最新发布认知智能战略。现在,爱数已经转型到了大数据基础设施提供商的全新定位,并立志成为该行业的领航者。历经十五年的风风雨雨,对于任何一个有志于此的科技公司,都实属不易。▼▼▼1聚焦认知智能战略开启下一个十年的全新旅程当初爱数业务转型的最核心压力,便是技术创新选路的对与错。爱数创始人、总裁贺鸿富作为一位技术出身的资深码农,虽然没有上过大学,但是对于技术理想的长期追求,最终为爱数选择了一条正确的技术之路。从2

window如何杀掉java进程_windows下java -jar 后台运行以及杀死后台进程的操作_夏种子的博客-程序员秘密

在你的jar文件当前目录中建立一个bat文件:内容是:注意文件名要对应@echo offSTART "commandServer" javaw -jar command-0.0.1-SNAPSHOT.jar之后双击bat文件就能后台启动jar包啦杀死后台进程首先执行命令 (你要知道你运行的jar文件的端口号)netstat -aon | findstr "9998"可以看到PID为6452 然后在...

C++多线程编程(入门实例)_csx66406602的博客-程序员秘密

多线程在编程中有相当重要的地位,我们在实际开发时或者找工作面试时总能遇到多线程的问题,对多线程的理解程度从一个侧面反映了程序员的编程水平。  其实C++语言本身并没有提供多线程机制(当然目前C++ 11新特性中,已经可以使用std::thread来创建线程了,因为还没有系统地了解过,所以这里不提了。),但Windows系统为我们提供了相关API,我们可以使用他们来进行多线程编程。创建线程的API

ultraISO方式制作win10安装U盘_罗汉爷的博客-程序员秘密_ultraiso制作u盘系统windows10

说明最近帮朋友安装下win10,用了2种制作U盘启动盘的方式。记录一下也方便大家少走弯路。准备的工具:1.utralISO(软通牒)2.win10镜像3.32GB U盘,U盘容量 &gt; 8G即可。制作步骤1.运行utralISO,打开win10镜像2.将win10镜像写入U盘系统安装步骤1.开机进BIOS,启动项调整为U盘启动不同品牌机器进入BIOS按键不一样,请自行查询。这边只提供个例子:将USB启动选项调整到第一位置后按F10保存后继续。2.系统自动加载启动

java程序设计基础_陈国君版第五版_第八章例题_gaoenbin626的博客-程序员秘密

java程序设计基础_陈国君版第五版_第八章例题class Person{ private String name; private int age; public Person(){ System.out.println("调用了个人类的构造方法Person()"); } public void setNameAge(String name , int age) { th

rz sz命令_simplefanC的博客-程序员秘密

安装:yum install lrzsz从客户端上传文件到服务端:rz从服务端发送文件到客户端:sz filename