unittest框架(惨不忍睹低配版)

根据我上个随笔的unittest框架优化得来,虽然对于smtp模块还是有点迷糊,不过还是勉强搭建运行成功了,还是先上代码:

#login_test.py
import requests
class Login():
    def test_login(self,username,password):
        url = "http://localhost:8080r/login"
        user_pwd = {}
        user_pwd["mobilephone"] = username
        user_pwd["pwd"] = password
        result = requests.get(url, params=user_pwd)
        list = (result.text).split(",")
        return list[3].split(":")[1].split("}")[0]

if __name__ == '__main__':
    result = Login()
    Return = result.test_login("18688773461","123456")
    print(Return)
#data_test.py
from openpyxl import load_workbook
class Date_test():
    @classmethod
    def Date_test_1(cls):
        wb = load_workbook("login_data.xlsx")
        ws = wb.get_sheet_by_name("Sheet1")
        list1 = []
        for i in range(1, ws.max_row + 1):
            list = []
            for j in range(1, ws.max_column + 1):
                str = ws.cell(i, j).value
                list.append(str)
            list1.append(list)
        wb.close()
        return list1
    @staticmethod
    def Email_Date():
        username = “username”
        password = “password”
        To_Email = “To_Email ” # 可以是多个邮箱地址,用“,”分离开
        return username,password,To_Email
#test_case.py
from login_test import Login
from ddt import ddt,unpack,data
from data_test import *
import unittest
@ddt
class Run_Test(unittest.TestCase):#继承unittest.TestCase
    """
    读取excel文件和cfg文件中数据
    :param xlsx:
    :param ws:
    :return:
    """
    @data(*Date_test.Date_test_1())
    @unpack
    def test_run1(self,Username,Password,Text):
        self.Result = Login()
        Return = self.Result.test_login(Username,Password)
        self.assertEqual(eval(Return),Text)
        #测试用例
if __name__ == '__main__':
   unittest.main()
#Email_console.py
import HTMLTestRunnerNew
from email.mime.text import MIMEText
from email.header import Header
import smtplib
import unittest
import os
from data_test import *
from email.mime.multipart import MIMEMultipart
class Email_Console():
    def __init__(self):
        self.username,self.password,self.To_Email= Date_test.Email_Date()


    def send_main(self,file_new):
        """
        发送邮件方法
        :param file_new:
        :return:
        """
        msg = MIMEMultipart("Emaik_TestText")
        msg['Subject'] = Header('自动化测试报告', 'utf-8')
        msg['From'] = self.username
        msg['To'] = self.To_Email
        with open(file_new , 'rb') as f:
            mail_body = f.read()
            msg.attach(MIMEText(mail_body, 'html', 'utf-8'))

        with open("result.html","rb") as f:
            mail_attach = f.read()
            att1 = MIMEText(mail_attach, 'base64', 'utf-8')
            att1["Content-Type"] = 'application/octet-stream'
            att1["Content-Disposition"] = 'attachment; filename="report_test.html"'
            msg.attach(att1)


        try:
            smtp = smtplib.SMTP()
            smtp.connect("smtp.163.com",25)
            smtp.login( self.username,self.password)
            smtp.sendmail( self.username, self.To_Email.split(",") , msg.as_string())
            smtp.quit()
        except Exception as e:
            print("Send Email Failed!!!")
            raise e



    def new_report(self,testreport):
        """
        生成并查找查找最新测试报告方法
        :param testreport:
        :return:
        """
        # 生成测试用例
        fp = open("result.html", 'wb')
        runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp, title='2019年3月28日作业测试报告', description='所有测试情况',
                                                  tester="桂马")
        discove = unittest.defaultTestLoader.discover(".", pattern="test_*.py")
        runner.run(discove)
        fp.close()
        #查找测试用例
        lists = os.listdir(testreport)
        lists.sort(key=lambda fn: os.path.getmtime(testreport + "\\" + fn))
        file_new = os.path.join(testreport , lists[-1])
        print(file_new)
        return file_new

if __name__ == "__main__":
    email_test = Email_Console()
    file_path = email_test.new_report(os.getcwd()) #查找新生的报告
    email_test.send_main(file_new = file_path) #调用发邮件模块

 

注意点:

    1.message[To]和message[From]虽然网上有的人也是直接上的汉字,但是不知道为啥我这边总报错,反而直接上邮件地址运行相当顺利

    2.附上附件的代码写了两次,别问为啥,问就是写一遍会报错,卡这个地方卡了许久,留着疑问待后续解决吧

    3.虽然说有些惨不忍睹,不过好歹再加上window的定时运行,然后多添加几行测试用例,一个简陋的不能再简陋的框架就算搭起来了

    4.邮件模块果然是块硬骨头,写完博客继续啃

 备注:2019年4月1日更新,优化邮件模块

posted @ 2019-03-29 21:29  桂木  阅读(553)  评论(0编辑  收藏  举报