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