• 一.一个简单的完整实例


    #导入
    import requests
    import unittest
    import time
    import HTMLTestRunner
    import os
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    
    #定义测试类
    class Test_lazy1(unittest.TestCase):
    
        #用例执行前的初始化工作:
        def setUp(self):
            #定制url
            self.r_url ="http://sztm.mting.info/yyting/activity/myGroupPurchaseList.action"
            #定制request heasders
            self.r_header ={"User-Agent":"Android6.0.1/yytingwap/vivo/vivo Y66/ch_beta/202/Android",
                        "Connection": "keep-alive",
                        "Host": "sztm.mting.info"
                      }
            #定制请求参数
            self.r_params={"imei":"ODY2Njk3MDM3MTYyMzgx",
                     "token":"a9xJ48T0X9fP1SZKF6GjFg**_k6gMl9_1fXI2j67rO62pudaJ15ZoGqH-",
                     "opType":"H",
                     "referId":"",
                     "size":20
                     }
    
            #发送请求,并将response存储到r中
            self.r=requests.get(url=self.r_url,headers=self.r_header,params=self.r_params)
    
            self.re_dict=self.r.json() #解析response的json数据(转化为字典,但也遇到为列表的--------待研究)
            self.status=self.re_dict["status"]#拼团列表status值
            self.msg=self.re_dict["msg"]#得到msg值
            self.book_list=self.re_dict["list"] #得到拼团资源信息列表
    
    
         #判断状态码是否为200
        def test_status_code(self):
            self.assertEqual(self.r.status_code,200,msg="返回状态码不是200")
    
        #判断我的拼团列表返回状态
        def test_status(self):
            self.assertEqual(self.status,0,msg="status不为0,列表返回失败")
    
        @unittest.skip("暂不执行此条用例")
        #判断提示信息应为空
        def test_msg(self):
            self.assertIsNone(self.msg,msg="msg不为null")
    
        #判断刚才拼团成功的书籍是否在列表中(上面代码没有此操作,为了举例先假设我们刚才拼过团)
        def test_bookisin(self):
            # 定义一个空列表,存放资源id
            self.entity_list = []
            self.key_name = "entityId"
            #遍历资源字典,将得到的资源id存储在列表中
            for info in self.book_list:
                for k in info:
                    if k == self.key_name:
                        self.entity_list.append(info[k])
    
            self.assertIn(37301,self.entity_list,msg="id为37301的资源不在拼团列表中")
    
        #测试善后
        def tearDown(self):
            print("测试完毕")
    
    
    
    #定义一个方法,取最新的测试报告
    def get_testresult(result_dir):
        # 列举result_dir目录下的所有文件,结果以列表形式返回。
        lists = os.listdir(result_dir)
        # sort按key的关键字进行排序,lambda的入参fn为lists列表的元素,获取文件的最后修改时间
        # 最后对lists元素,按文件修改时间大小从小到大排序。
        lists.sort(key=lambda fn: os.path.getmtime(result_dir + '\' + fn))
        # 获取最新文件的绝对路径
        file_path = os.path.join(result_dir, lists[-1])
        return file_path
    
    
    #定义邮件发送方法
    def send_mail(new_result):
        f=open(new_result,"rb")#打开文件
        mail_body=f.read()#读取文件内容
        f.close()
    
        # 输入Email地址和口令:
        from_addr = "xxxxxxxxx@qq.com"
        password = "ftuttfiwumrgbaca"  #
        # 输入收件人地址:
        to_addr = "xxxxxxx@qq.com"
        # 输入SMTP服务器地址:
        smtp_server = "smtp.qq.com"
    
        msg=MIMEMultipart("mixed")
        msg["Subject"]="懒人听书测试报告"
        msg["From"]="lazyman"
    
        #构造邮件正文
        mail_text=MIMEText("懒人听书最新测试报告")
        msg.attach(mail_text)
    
        mail_html=MIMEText(mail_body,"html","utf_8")
        mail_html["Content-Disposition"] = 'attachment; filename="testresult.html"'
        msg.attach(mail_html)
    
        server = smtplib.SMTP(smtp_server, 587)  # 465/587
        server.set_debuglevel(1)
        server.starttls()
        server.login(from_addr, password)
        server.sendmail(from_addr, to_addr, msg.as_string())
        server.quit()
    
    
    ##定义html文件,用于存放测试报告
    # 获取当前时间
    now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())  # 第一个参数设置时间格式,第二个参数是得到struct_time 形式的当前时间
    # 测试报告的存放路径及文件名,文件名中加了当前时间以便每次生成不同的测试报告
    filename = "F:\python\lianxiProject\testresults\case" + now + "_result.html"
    # 创测试报告的html文件,此时还是个空文件
    fp = open(filename, "wb")
    
    
    
    #查询目标目录下所有的测试用例
    test_dir = "F:\python\lianxiProject\case3"  #用例目录
    discover = unittest.defaultTestLoader.discover(test_dir,pattern="test_*.py")
    
    #执行用例,并生成测试报告
    runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u"测试报告",description=u"报告") #定义 HTMLTestRunner 测试报告,stream 定义报告所写入的文件;title 为报告的标题;description 为报告的说明与描述
    runner.run(discover) #运行测试容器中的用例,并将结果写入的报告中
    fp.close()#关闭文件流
    
    
    result_dir="F:\python\lianxiProject\testresults"#定义要查找的测试报告文件目录
    new_result=get_testresult(result_dir) #找到最新的测试报告
    send_mail(new_result)#发送邮件

    基本思路大纲。

  • 相关阅读:
    MDK+VS+Eclipse的STM32库V3.5工程模板的建立(六)
    MDK+VS+Eclipse的STM32库V3.5工程模板的建立(一)
    MDK+VS+Eclipse的STM32库V3.5工程模板的建立(四)
    ognl.OgnlException: target is null for setProperty(null, "username", [Ljava.lang.String;@19af9e98)
    Hibernate联合主键Annotation
    struts2入门第一天配置环境
    为什么java的构造方法中this()或者super()要放在第一行
    几种解决IE6下PNG图片透明问题
    IE6解决min_height
    一个拖拽例子
  • 原文地址:https://www.cnblogs.com/youzaijiang/p/11528147.html
Copyright © 2020-2023  润新知