unittest 框架-待優化

模塊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()
相關文章
相關標籤/搜索