继续集成jenkins+allure+pytest+python邮件发送(报告截图selenium实现)+python钉钉机器人通知_python+requiests+jenkins+dingding-程序员宅基地

技术标签: python  自动化测试  selenium  jenkins  

实现思路

'''
0.邮件和钉钉都要在自动化执行完成后再去执行,不然拿到的数据和报告就不是最新的(重点)
1.由于报告是在线展示,我这是本地,就使用selenium去登录截图2个报告的页面,也可以截更多。保存到本地
2.通过邮箱发送截图附件实现邮箱发送报告
3.jenkins下拉代码会储存到工作空间,工作空间保存到本地,找到报告的数据文件查看是否有可以统计测试结果的
4.把原始的报告数据文件加以处理发送钉钉机器人
'''

报告截图

'''获取jenkins报告截图基于selenium'''
import math
from selenium import webdriver
from time import sleep

def ctrl_alt():
    def driver_(test=1):
        if test == 1:
            # 后台运行浏览器,不打开,但是这样打开截图不全,暂时没解决,使用的是打开浏览器的方式,用Jenkins运行时是无痕的,非常到位
            chrome_options = webdriver.ChromeOptions()
            chrome_options.add_argument('--headless')
            driver = webdriver.Chrome(chrome_options=chrome_options)

        else:
            # 启动浏览器
            driver = webdriver.Chrome()
        return driver

    driver = driver_(2)
    driver.get('http://127.0.0.1:1111/login?from=%2F')
    driver.maximize_window()
    a = driver.find_elements_by_class_name('normal')
    a[0].send_keys('lcf')  # 账号
    a[1].send_keys(123456)  # 密码
    driver.find_element_by_class_name('submit-button').click()  # 登录
    # 报告页面1
    print('截图开始')
    driver.get('http://127.0.0.1:1111/job/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95-gitee%E4%BB%A3%E7%A0%81/allure/')
    sleep(1)
    driver.get_screenshot_as_file(r'F:\jb\baogao.png')  # 截图操作
    # 报告页面2
    driver.get('http://127.0.0.1:1111/job/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95-gitee%E4%BB%A3%E7%A0%81/allure/#graph')
    sleep(1)
    driver.get_screenshot_as_file(r'F:\jb\baogao1.png')
    print('截图结束')
    driver.quit()

邮箱发送

没啥好说的,代码在网上找的,能用,需要使用qq邮箱发送的话配置server = smtplib.SMTP(‘smtp.qq.com’) ,好像是这样
现在代码里是server = smtplib.SMTP(‘smtp.163.com’)

'''发送本地allure报告图片邮件'''
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplication
from allure_dd import ctrl_alt

# 配置邮箱信息
ctrl_alt()#截图
sender = '[email protected]'  # 发件人的地址
password = 'KWKYGKdfdsfOBH'  # 此处是我们刚刚在邮箱中获取的授权码
receivers = '[email protected]'  # 邮件接受方邮箱地址,可以配置多个,实现群发,注意这里要是字符串

# 邮件内容设置
content = MIMEText("<html><h2>测试报告,误回复</h2>", _subtype="html", _charset="utf-8")
msg = MIMEMultipart('related')
msg.attach(content)

# 添加图片附件
imageFile = r"F:\jb\baogao.png"
imageApart = MIMEImage(open(imageFile, 'rb').read(), imageFile.split('.')[-1])
imageApart.add_header('Content-Disposition', 'attachment', filename=imageFile)
msg.attach(imageApart)

imageFile = r"F:\jb\baogao1.png"
imageApart = MIMEImage(open(imageFile, 'rb').read(), imageFile.split('.')[-1])
imageApart.add_header('Content-Disposition', 'attachment', filename=imageFile)
msg.attach(imageApart)



# 邮件标题设置
msg['Subject'] = 'python发送附件测试-图片、Excel'

# 发件人信息
msg['From'] = sender

# 收件人信息
msg['To'] = receivers

# 通过授权码,登录邮箱,并发送邮件
try:
    server = smtplib.SMTP('smtp.163.com')  # 配置网易邮箱的smtp服务器地址
    server.login(sender, password)
    server.sendmail(msg['From'], msg['To'].split(','), msg.as_string())
    print('发送成功')
    server.quit()

except smtplib.SMTPException as e:
    print('error', e)

邮箱发送结果
在这里插入图片描述

钉钉机器人发送测试结果

现在钉钉机器人不支持发送本地图片,暂时先不发送报告图片到钉钉

'''发送接口测试信息推送钉钉消息'''
import csv
import json
import requests
a=[]
#这是jenkins拉下来代码的存放位置,构建时产生的测试结果信息文件
f = csv.reader(open(r'C:\Users\keking\AppData\Local\Jenkins\.jenkins\workspace\自动化测试-gitee代码\allure-report\data\suites.csv','r',encoding='UTF8'))
for i in f:
    if i[0]!='Status':
        a.append(i)
print(a)
#对原始数据坐下处理
api_run_count=len(a)
api_passed_count=0
api_failed_count=0
failed_case_name=[]
failed_case_path=[]
for i in a:
    if i[0]=='passed':
        api_passed_count+=1
    elif i[0]=='failed':
        failed_case_path.append(i[1])
        failed_case_name.append(i[3])
        api_failed_count+=1

print(api_passed_count)
print(api_failed_count)
print(failed_case_name)
print(failed_case_path)
def dd_robot():
  HEADERS = {
    "Content-Type": "application/json;charset=utf-8"}
  key = "b7ff3fd2fd9b2dc5f78xxxxxxxxxxxxx0ff1056d172d922cab"
  url = f" https://oapi.dingtalk.com/robot/send?access_token={
      key}"
  #content里面要设置关键字 我机器人设置的关键字为'接口测试结果:'
  data_info = {
    
    "msgtype": "text",
    "text": {
    
    "content": "接口测试结果:"+f'\n总共运行{
      api_run_count}条用例'
               + f'\n成功{
      api_passed_count}条用例'
               + f'\n失败{
      api_failed_count}条用例'
               + f'\n失败用例名称{
      str(failed_case_name)}'
               + f'\n失败用例地址{
      str(failed_case_path)}'
    },
    "isAtAll": False
    #这是配置需要@的人
     # ,"at": {"atMobiles": ["15xxxxxx06",'18xxxxxx1']}
  }
  value = json.dumps(data_info)
  response = requests.post(url,data=value,headers=HEADERS)
  if response.json()['errmsg']!='ok':
    print(response.text)

if __name__ == '__main__':
    dd_robot()

我看过报告下的一些文件信息,这个文件的信息可以用来统计
suites.csv文件信息
结构
在这里插入图片描述
信息
在这里插入图片描述

发送结果
在这里插入图片描述

jenkins配置运行python钉钉、邮件脚本

配置邮件发送(重点构建结束触发另一个任务构建)

新建一个任务
在这里插入图片描述
配置指定另一个任务构建完成后执行当前任务的构建
在这里插入图片描述

在这里插入图片描述

配置钉钉发送

除了脚本文件不同其他都不一样
在这里插入图片描述
邮箱和钉钉子任务运行
在这里插入图片描述

测试

通过修改用例错误数来看邮件失败用例和钉钉的失败用例数是否变化
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

每次构建自动化测试后会自动构建发送邮箱的任务,实现发邮箱钉钉,结束
3天的学习成果,就是干
在这里插入图片描述

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

智能推荐

下班的时候在电梯里碰见个妹子,问这层楼是哪个部门的。我答技术部吧。她惊异:技术部也这么晚下班?妹子,你听说过科比和程序员的故事么?-程序员宅基地

文章浏览阅读1.4k次。下班的时候在电梯里碰见个妹子,问这层楼是哪个部门的。我答技术部吧。她惊异:技术部也这么晚下班?妹子,你听说过科比和程序员的故事么?转自:程序猿才懂得笑话 http://cxmonkey.duapp.com/?p=222

【0day】复现用友 NC NCFindWeb大型企业数字化平台log4j远程代码执行漏洞-程序员宅基地

文章浏览阅读220次。NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。用友 NC NCFindWeb大型企业数字化平台存在log4j远程代码执行漏洞,攻击者可以在恶意环境变量中插入特定的代码,使得Log4j执行该代码。_用友 nc ncfindweb大型企业数字化平台log4j远程代码执行漏洞

MySQL数据库分卷备份还原类_sql数据库分卷备份和还原-程序员宅基地

文章浏览阅读101次。执行数据库恢复是DBA的日常生活的一部分。一个DBA可能需要执行恢复由于种种原因,如恢复,刷新数据库用于测试目的等许多倍,它可能很难执行恢复由于损坏的媒体,在服务器上的磁盘空间不足等。在这篇文章中,我将概述的方法之一,我用来恢复的备份生产数据库的方案夫妇的日子,我的支持团队的成员来找我,说他们是无法刷新农行从生产服务器相同的的备份副本名为OLTP开发环境数据库。从生产服务器的备份副本大约75 GB...

Hi3516A开发--编译内核、uboot_hi3516a_sdk_v1.0.5.0.tgz-程序员宅基地

文章浏览阅读1.5w次,点赞4次,收藏20次。有两种编译方式一、整个编译(1)编译整个osdrv目录:make OSDRV_CROSS=arm-hisiv300-linux all或者make OSDRV_CROSS=arm-hisiv400-linux all/* 如果单板使用spi接口nand flash作为存储介质,请在编译整个目录时传入如下FLASH_TYPE参数 */make OSDRV_CROSS=_hi3516a_sdk_v1.0.5.0.tgz

国内首个基于 Rust 语言的 RPC 框架 — Volo 正式开源!_rust开源项目-程序员宅基地

文章浏览阅读3k次。Volo 是字节跳动服务框架团队研发的轻量级、高性能、可扩展性强、易用性好的 Rust RPC 框架,使用了 Rust 最新的 GAT 和 TAIT 特性。在字节内部,Volo 已经落地多个业务和基础组件,并且取得了超预期的性能收益。..._rust开源项目

3.安装PHP环境(Ubuntu)_ubuntu离线安装php-程序员宅基地

文章浏览阅读516次。php环境 Ubuntu_ubuntu离线安装php

随便推点

java中查看数据类型_java查看数据类型-程序员宅基地

文章浏览阅读2.5k次。/** * 1. 通过反射获取传来参数的JavaClass对象 * 2. 获取到JavaClass对象的类型名称 * 3. 将参数的类型名称返回 */public class GetType { public static String getType(Object obj) { return obj.getClass().getTypeName(); }}..._java查看数据类型

Scrapy-redis分布式+Scrapy-redis实战-程序员宅基地

文章浏览阅读185次。【学习目标】Scrapy-redis分布式的运行流程Scheduler与Scrapy自带的Scheduler有什么区别Duplication Filter作用源码自带三种spider的使用6. Scrapy-redis分布式组件Scrapy 和 scrapy-redis的区别Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方..._本模块定义了 redismixin 类用于从 redis 服务器读取url 构造为 request,同时

web播放H.264/H.265,海康,大华监控摄像头RTSP流方案_海康api hls怎么取265的流-程序员宅基地

文章浏览阅读211次。况且很多技术方案,需要在后端持续运行高负荷运转的视频转码转流服务,如果摄像头路数多或需要在线播放的终端比较多,服务器的压力就会很大,播放卡顿、花屏、黑屏、断播等现象就会时常出现,很难让客户满意,为了解决这些问题,相关硬件、软件的投入和持续不断的带宽占用往往也让客户难以接受。2. 设备兼容性强,同时支持海康、大华、宇视、华为等厂家的硬件设备,只要能输出RTSP、RTMP、HLS、HTTP、TCP、UDP等流媒体协议,就可以直接播放;3. 录像功能,支持直接录像保存到本地MP4文件。5. 语音对讲及云台控制。_海康api hls怎么取265的流

HTML详解连载(7)-程序员宅基地

文章浏览阅读2k次,点赞57次,收藏59次。对伪元素和盒子模型进行了详细分析

PHP使用多线程-程序员宅基地

文章浏览阅读535次。PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程。多线程在处理重复性的循环任务,能够大大缩短程序执行时间。  我之前的文章中说过,大多数网站的性能瓶颈不在PHP服务器上,因为它可以简单地通过横向增加服务器或CPU核数来轻松应对(对于各种云主机,增加VPS或CPU核数就更方便了,直接以备份镜像增加VPS,连操作系统、环境都不用安装配置),而是在于MySQL数..._php使用多线程

由excel一键生成json的小工具(基于python,仅支持单层嵌套)_excel转json github-程序员宅基地

文章浏览阅读1.9k次,点赞3次,收藏5次。最近空闲的时候做了点小游戏,小游戏开发过程中需要大量json处理,但是手动用文本编辑器调整json又不是很舒服,于是自己造了个由excel一键生成json的小工具,想到好久没发博客了,干脆传上来分享一下目录下载链接下载链接github(可以下载到py版本或exe版本):https://github.com/ZhChessOvO/basic_excel_to_json百度网盘(可以下载到exe版本):_excel转json github