python3 通過郵件發送測試報告


通過之前的學習,了解到了如何利用excel進行讀取數據,如何采用DDT數據驅動,如何使用unittest。下面是將之前所學進行結合,並發送郵件-->leader,廢話不多說,上代碼:

email_report.py

 1 # -*- coding: utf-8 -*-
 2 # @Time    : 2019/3/29/029 20:55
 3 # @Author  : bing
 4 # @File    : email_report.py
 5 # @Software: PyCharm
 6 
 7 import smtplib
 8 import time
 9 from email.mime.text import MIMEText
10 from email.mime.multipart import MIMEMultipart
11 from email.mime.application import MIMEApplication
12 from email.header import Header
13 class email_Smtp:
14     '''smtp-email sendemail'''
15     def __init__(self,email_User,email_Pwd,to_Email_user):
16         self.email_User = email_User
17         self.to_Email_user = to_Email_user
18         self.server = smtplib.SMTP_SSL("smtp.qq.com", 465)
19         self.server.login(email_User, email_Pwd)
20 
21     def send_email_msg(self,file_path):
22         test_Time = str(time.strftime("%Y_%m_%d", time.localtime()))
23         test_file_name = test_Time + "_testCase_request_Report.html"
24         msg_total = MIMEMultipart()  # multipart類型主要有三種子類型:mixed、alternative、related  默認mixed
25         msg_total['From'] = Header("Test-Mine", 'utf-8')
26         msg_total['To'] = Header("leader", 'utf-8')
27         msg_total['Subject'] = '測試報告'
28         # 正文模塊
29         msg_raw = open(file_path,"r",encoding='utf-8').read()
30         msg = MIMEText(msg_raw, 'html')
31         msg_total.attach(msg)
32         # 附件模塊
33         mfile = MIMEApplication(open(file_path,"rb").read())
34         # 添加附件的頭信息
35         mfile.add_header('Content-Disposition', 'attachment', filename=test_file_name)
36         # 附件摸快添加到總的里面
37         msg_total.attach(mfile)
38         self.server.sendmail(self.email_User , self.to_Email_user , msg_total.as_string())
39         print("郵件發送成功!請查收")

excel_file.py

 1 from openpyxl import load_workbook
 2 import json
 3 class RwExcelFile:
 4 
 5     def read_Excel_Case(self,file_path):
 6         """獲取excel的登錄信息,保存到列表里面"""
 7         excel_File = load_workbook(file_path)
 8         sheet = excel_File.worksheets[0]
 9 
10         login_datas = []
11         for row in range(2, sheet.max_row + 1):
12             user = {
13                 "method": sheet.cell(row, 1).value,
14                 "data": json.loads(sheet.cell(row, 2).value),
15                 "exp_data": sheet.cell(row, 3).value,
16                 "case_id": sheet.cell(row, 6).value,
17             }
18             login_datas.append(user)
19             excel_File.close()
20         return login_datas
21 
22     def read_Excel(self,file_path,sheet_name,start_row,start_cloumn):
23         '''
24         讀取excel中所有數據並以列表形式返回
25         :param file_path:
26         :return:
27         '''
28         excel_File = load_workbook(file_path)
29         sheet = excel_File[sheet_name]
30         list_column = []
31         list_row    = []
32         for i in range(start_row,sheet.max_row+1):
33             for j in range(start_cloumn,sheet.max_column+1):
34                 list_column.append(sheet.cell(i,j).value)
35             list_row.append(list_column)
36             list_column = []
37         excel_File.close()
38         return list_row
39 
40 
41     def write_Excel(self,file_path,sheetname,row,cloumn,T_value):
42         '''
43         向excel指定位置寫入值
44         :param file_path: 文件地址
45         :param sheetname: sheet名
46         :param row: 行
47         :param cloumn:列
48         :param T_value: 值
49         :return: 無返回
50         '''
51         excel_File = load_workbook(file_path)
52         excel_File[sheetname].cell(row,cloumn,T_value)
53         excel_File.save(file_path)
54         excel_File.close()

request_login.py

import requests
class Interface_Request:

    def __init__(self,mobilephone,pwd):
        '''login參數初始化'''
        self.url = '****'
        self.dict = {'mobilephone':mobilephone,'pwd':pwd}

    def http_request(self,way):
        '''login接口請求'''
        if way=='get':
            return requests.get(self.url,self.dict).text
        elif way=='post':
            return requests.post(self.url,self.dict).text

testCase_request.py

import unittest
from excel_file import *
from request_login import Interface_Request
from ddt import ddt,unpack,data

@ddt#@ddt裝飾測試類 unittest.TestCase的子類
class TestRequest(unittest.TestCase,RwExcelFile):
    @data(*RwExcelFile().read_Excel_Case('request測試數據.xlsx'))
    @unpack
    def test_001(self,method,data,exp_data,case_id):
        print('Test_login,驗證:',exp_data)
        expected=exp_data#期望值
        res=Interface_Request(data["mobilephone"],data["pwd"]).http_request(method) #實際值
        #斷言
        try:
            self.assertEqual(expected,json.loads(res)['msg'])
            row = int(case_id) + 1
            RwExcelFile().write_Excel('request測試數據.xlsx', "Sheet1", row, 5, 'pass')
        except AssertionError as e:
            # logging
            # 測試不通過的結果: “failed” 寫到 Excel
            row = int(case_id) + 1
            RwExcelFile().write_Excel('request測試數據.xlsx',"Sheet1",row,5,'failed')
            raise

testSuite_Run.py

 1 import unittest
 2 import HTMLTestRunnerNew
 3 import time
 4 from email_report import email_Smtp
 5 from Test import testCase_request
 6 
 7 loader=unittest.TestLoader()#用例的加載器
 8 suite=unittest.TestSuite()#創建了一個對象
 9 suite.addTest(loader.loadTestsFromModule(testCase_request))#注意引入的是模塊名不是類名,這里犯過錯
10 
11 #執行並生成html測試報告--HTMLTestRunnerNew
12 test_Time = str(time.strftime("%Y_%m_%d", time.localtime()))
13 test_file_name = test_Time+"_testCase_request_Report.html"
14 with open(test_file_name,'wb+') as file:
15     runner=HTMLTestRunnerNew.HTMLTestRunner(
16         stream=file,
17         verbosity=2,
18         title='測試報告',
19         description='request測試報告',
20         tester='Test_Mine'
21     )#創建一個對象來執行用例
22     runner.run(suite)#這一行沒有任何改變
23 
24 email_Smtp("****@qq.com", "密鑰" , "*****@qq.com").send_email_msg(test_file_name)

郵件截圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM