先看一下实战结果,以及邮件内容:
1.用例结构:
测试用例对应的代码,登录用例,test_case.py:
import requests
import unittest
import json
host_ip = '域名'
class post_request(unittest.TestCase):
def setUp(self):
self.login_url = 'http://'+host_ip+'/bg/login/in' #根据实际接口,自己填写
self.list_url = "http://app.iworkgo.com/bg/bootpage/listPage"
self.header = {"Content-Type": "application/x-www-form-urlencoded",
"x-bg-token":"token"
} #根据实际内容,自己填写
data = {"username": "邮箱账号", "password":"密码"}#根据实际内容,自己填写
#将data序列化为json格式数据,传递给data参数
r = requests.post(self.login_url, data=data)
res= eval(r.text)
self.header["x-bg-token"] = res["data"]["token"]#获取动态token
def test_post_login(self):
"""登录"""
url=self.login_url
# url = 'http://139.196.6.141:8082/bg/login/in'
# header = self.header
data = {"username": "邮箱账号", "password":"密码"}#根据实际内容,自己填写
#将data序列化为json格式数据,传递给data参数
r = requests.post(url, data=data)
res = eval(r.text)
# print(r.text)
# assert res["code"]==200
self.assertEqual(res['code'],200)
# assert response['msg']=='success'
登录后查看园区列表的接口数据(无需登录,前面已经动态获取token了)代码如下:
def test_post_listpage(self):
"""园区列表"""
url = "http://"+host_ip+"/bg/bootpage/listPage"
header = self.header
data = {"pageFrom":"1",
"pageSize":"10"
}#根据实际内容,自己填写
r = requests.post(url, data=json.dumps(data), headers=header)
# print (r.text)
res = eval(r.text)
# assert res['code']==200
self.assertEqual(res['code'],200)
其他模块列表的查询跟上面是同理
2.运行用例生成测试报告:
运行用例并生成对应的html报告代码如下,run_testcase.py:
import unittest
import HTMLTestRunner
import time
# 相对路径
test_dir ='./test_case'
test_dir1 ='./report'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
# 定义带有当前测试时间的报告,防止前一次报告被覆盖
now = time.strftime("%Y-%m-%d %H_%M_%S")
filename = test_dir1 + '/' + now + 'result.html'
# 二进制打开,准备写入文件
fp = open(filename, 'wb')
# 定义测试报告
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试报告', description=u'用例执行情况')
runner.run(discover)
3.生成报告发送报告到指定邮箱,send_email.py代码如图:
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import smtplib
import time
import os
def new_report(path):
lists = os.listdir(path)
lists.sort(key=lambda fn: os.path.getatime(path + '\\' + fn))
file_new = os.path.join(path, lists[-1])
return file_new
# file = new_report('D:\\TestProject\\AutoTest\\report')
# print file
file_new = new_report('E:\\AutoTest\\report')
username = '邮箱账号'
password = '开通163邮箱授权码对应的密码'
sender = username
receivers = ','.join(['zhull@wecut.com',"15736933982@163.com"])
f = open(file_new, 'rb')
mail_body = f.read()
f.close()
msg = MIMEMultipart()
msg['Subject'] = u'接口自动化测试报告'
msg['From'] = sender
msg['To'] = receivers
text = MIMEText("<p>详细内容请查看附件</p>", 'html')
puretext = MIMEText(mail_body, 'html', 'utf-8')
msg.attach(text)
msg.attach(puretext)
att = MIMEApplication(open(file_new, 'rb').read())
att.add_header('Content-Disposition', 'attachment', filename='xlink_report.html')
msg.attach(att)
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com',25)
smtp.login(username, password)
smtp.sendmail(sender, receivers, msg.as_string())
time.sleep(2)
smtp.quit()