一.一个简单的完整实例

#导入
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 = "[email protected]"
    password = "ftuttfiwumrgbaca"  #
    # 输入收件人地址:
    to_addr = "[email protected]"
    # 输入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)#发送邮件

基本思路大纲。

猜你喜欢

转载自www.cnblogs.com/youzaijiang/p/11528147.html