模塊1 :getdata.py 讀取測試用例test_case.xlsx,返回測試用例結果html
import json from openpyxl import load_workbook class DoExcel: """ :get_data 讀取execl中的測試數據 :write_data 將測試結果寫入excel中 """ def get_data(self): """讀取excel中的登陸信息存儲到列表中""" wb = load_workbook("test_case.xlsx") sheet = wb["test_case"] login_data=[] print(sheet.max_row) for row in range(2,sheet.max_row+1): user={"url":sheet.cell(row,5).value, "method":sheet.cell(row,4).value, # "data": sheet.cell(row, 6).value, "data": json.loads(sheet.cell(row, 6).value), "exp_result":sheet.cell(row,7).value, "case_id": sheet.cell(row, 1).value } login_data.append(user) wb.close() return login_data def write_result(self,row,result): """將測試結果返回到excel中""" wb = load_workbook("test_case.xlsx") sheet = wb["test_case"] sheet.cell(row,8,result) wb.save("test_case.xlsx") wb.close() if __name__ == '__main__': res=DoExcel().get_data() print(res)
模塊2 :httprq.py 獲取login的請求信息json
import requests class HttpRequest: """完成http的get請求或post請求 :method 請求方法 能夠是get or post :url 請求地址 :data 請求參數,字典的格式 """ def http_request(self,url,method,data): if method.lower()=="get": return requests.get(url,params=data) elif method.lower()=="post": return requests.post(url,data=data) if __name__ == '__main__': t=HttpRequest().http_request("http://47.107.168.87:8080/futureloan/mvc/api/member/login", "get", {"mobilephone":"1868877346", "pwd":123456}) print(t.json()) print(t.text)
模塊3 :logintest.py 編寫測試用例api
import unittest from ddt import ddt, data, unpack from httprq import HttpRequest from homework.ddt_20190323.unittest_ddt_exl_http_request.getdata import * @ddt class Testlogin(unittest.TestCase): """經過ddt將excel中獲取的數據循環賦值到data""" @data(*DoExcel().get_data()) @unpack def test_httprq(self,method,data,url,exp_result,case_id):#方法名必須以test開頭 res=HttpRequest().http_request(url,method,data).json()#http請求的實際值 try: self.assertEqual(exp_result,res["msg"])#斷言,實際值與預期值進行對比 row=case_id+1 DoExcel().write_result(row,"pass") #經過,excel中返回pass except Exception as e:#捕獲異常 row=case_id+1 DoExcel().write_result(row,"fail")#不經過,excel中返回fail raise Exception #拋出異常
模塊4 :runtest.py 執行測試用例,生成測試報告服務器
import unittest from homework.ddt_20190323.unittest_ddt_exl_http_request import testlogin import HTMLTestRunnerNew class RunCase: """ :test_suite_html 執行測試用例後生成html的測試報告 :test_suite_module 按test_module來執行測試用例 :test_suite_testcase 按照測試用例類來執行測試用例 """ def test_suite_html(self): """ 測試步驟:新建一個用例收集器 新建一個用例加載器 suit.addTest()經過加載測試模塊來收集用例 新建一個html文檔來存放測試報告 :return: """ suite=unittest.TestSuite() loader=unittest.TestLoader() suite.addTest(loader.loadTestsFromModule(testlogin)) with open ("login_http.html","wb") as file: runner=HTMLTestRunnerNew.HTMLTestRunner(stream=file, verbosity=2,#生成報告級別 title="login測試報告", description="驗證登陸是否成功", tester="七月")#建立一個對象來執行測試用例 runner.run(suite)#執行收集器中的全部測試用例 def test_suite_module(self): suite=unittest.TestSuite()#用例收集器 loader=unittest.TestLoader()#用例加載器 runner=unittest.TextTestRunner(verbosity=0)#用例執行器 suite.addTest(loader.loadTestsFromModule(testlogin))#收集測試用例 runner.run(suite)#執行測試用例 if __name__ == '__main__': RunCase().test_suite_html() # RunCase().test_suite_module()
五、sendemail.py發送測試報告郵件mvc
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header from configparser import ConfigParser from email.mime.image import MIMEImage class SendMail: def sent_mail(self): # 第三方smtp服務 mail_host = "smtp.qq.com" # 設置服務器 # 獲取發件箱的登陸名,登陸密碼 cp=ConfigParser() cp.read("user_pwd.config",encoding="utf-8") mail_user = cp.get("userinfo","emailname") mail_pass = cp.get("userinfo","emailpwd") # 配置文件中獲取發件地址,收件地址 sender=cp.get("userinfo","emailname") receivers=[cp.get("userinfo","emailname")] # 建立一個帶附件,帶圖片的郵件實例,添加郵件主題,發件人,收件人 message=MIMEMultipart("mixed") subject = "Python SMTP 郵件測試" message["Subject"] = Header(subject,"utf-8") message["From"] = Header("七月","utf-8") message["To"] = Header("七月","utf-8") # 添加附件一、test_case.xlsx with open("test_case.xlsx","rb") as attach_msg1: attach1 = MIMEText(attach_msg1.read(),"plain","utf-8") attach1["Content-Type"] = "application/octet-stream" attach1["Content-Disposition"] = "attachment;filename='test_case.xlsx'" message.attach(attach1) # 添加附件二、login_http.html with open("login_http.html", "rb") as attach_msg2: attach2 = MIMEText(attach_msg2.read(), "html", "utf-8") attach2["Content-Type"] = "application/octet-stream" attach2["Content-Disposition"] = "attachment;filename='login_http.html'" message.attach(attach2) # 添加郵件正文 with open("login_http.html", "rb") as attach_msg2: mail_msg =attach_msg2.read() message_con = MIMEText(mail_msg, "html", "utf-8") message.attach(message_con) try: server = smtplib.SMTP(mail_host,25) # 建立郵件服務商 server.login(mail_user,mail_pass) # 登陸郵箱 server.sendmail(sender,receivers,message.as_string()) # 發送郵件 print("郵件發送成功") except smtplib.SMTPException : print("Error:郵件發送失敗") if __name__ == '__main__': SendMail().sent_mail()