一.實現思路
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()
三.郵箱發送
1.使用qq郵箱發送的話配置server = smtplib.SMTP(‘smtp.qq.com’)
2.實際使用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)
3.郵箱發送結果
四.釘釘機器人發送測試結果
1.現在釘釘機器人不支持發送本地圖片,暫時先不發送報告圖片到釘釘。
'''發送接口測試信息推送釘釘消息'''
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()
2.看過報告下的文件信息,這個文件的信息可以用來統計suites.csv文件信息結構
3.發送結果
五.jenkins配置運行釘釘、郵件腳本
1.配置郵件發送(重點構建結束觸發另一個任務構建)
2.配置指定另一個任務構建完成後執行當前任務的構建
3.配置釘釘發送
4.郵箱和釘釘子任務運行
六.運行測試
1.通過修改用例錯誤數來看郵件失敗用例和釘釘的失敗用例數是否變化
2.每次構建自動化測試後會自動構建發送郵箱的任務,實現發郵箱釘釘
轉載:https://blog.csdn.net/aaaaaaaaanjjj/article/details/122700657