实现思路
''' 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 = 'xxxx@163.com' # 发件人的地址 password = 'KWKYGKdfdsfOBH' # 此处是我们刚刚在邮箱中获取的授权码 receivers = '666666@qq.com' # 邮件接受方邮箱地址,可以配置多个,实现群发,注意这里要是字符串 # 邮件内容设置 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天的学习成果,就是干