• 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日更新,优化邮件模块

  • 相关阅读:
    ecshop中关于语言配置项的管理
    ecshop中猜你喜欢的原理
    CSS之Position详解(自cnblogs)
    包装类
    for循环的另一种写法
    date.calendar学习总结
    java对MySql数据访问
    java中对MySql的配置
    小程序在js里获取控件的两种方式
    样式一直没生效,发现css没加前面的小点!!!
  • 原文地址:https://www.cnblogs.com/keima/p/10624034.html
Copyright © 2020-2023  润新知