#导入 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)#发送邮件
基本思路大纲。