#处理excel数据
# coding:utf-8
import xlrd
class ExcelUtil():
def __init__(self, excelPath, sheetName="Sheet1"):
self.data = xlrd.open_workbook(excelPath)
self.table = self.data.sheet_by_name(sheetName)
# 获取第一行作为key值
self.keys = self.table.row_values(0)
# 获取总行数
self.rowNum = self.table.nrows
# 获取总列数
self.colNum = self.table.ncols
def dict_data(self):
if self.rowNum <= 1:
print("总行数小于1")
else:
r = []
j=1
for i in range(self.rowNum-1):
s = {}
# 从第二行取对应values值
values = self.table.row_values(j)
j += 1
for x in range(self.colNum):
s[self.keys[x]] = values[x]
if x==self.colNum-1:
r.append(s)
return r
#发送邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
def mail(content):
""" 发送邮件 """
# 第三方 SMTP 服务
mail_host = "smtp.qq.com" # 设置服务器
mail_user = "123456@qq.com" # 用户名
mail_pass = "xxxxxxxxxxx" # 口令
# 设置收件人和发件人
sender = '390952822@qq.com'
receivers = ['123@winning.com.cn'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
# 创建一个带附件的实例对象
message = MIMEMultipart()
# 邮件主题、收件人、发件人
subject = '请查阅--测试报告' # 邮件主题
message['Subject'] = Header(subject, 'utf-8')
message['From'] = Header("{}".format(sender), 'utf-8') # 发件人
message['To'] = Header("{}".format(';'.join(receivers)), 'utf-8') # 收件人
# 邮件正文内容 html 形式邮件
send_content = content
# 获取测试报告
html = MIMEText(_text=send_content, _subtype='html', _charset='utf-8') # 第一个参数为邮件内容
# 构造附件
att = MIMEText(_text=send_content, _subtype='base64', _charset='utf-8')
att["Content-Type"] = 'application/octet-stream'
file_name = 'test02.html'
att["Content-Disposition"] = 'attachment; filename="{}"'.format(file_name) # # filename 为邮件附件中显示什么名字
message.attach(html)
message.attach(att)
try:
smtp_obj = smtplib.SMTP()
smtp_obj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtp_obj.login(mail_user, mail_pass)
smtp_obj.sendmail(sender, receivers, message.as_string())
smtp_obj.quit()
print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")
from excelRead import ExcelUtil
import unittest
import ddt
import requests
import json
filepath = "data_excel.xls"
data = ExcelUtil(filepath)
datalist = data.dict_data()
#获取excel数据,并开始接口测试
@ddt.ddt
class TestRequest(unittest.TestCase):
def setUp(self):
pass
@ddt.data(*datalist)
def test01(self,dlist):
if dlist:
if dlist['type']=='get':
try:
data = requests.get(dlist['data'])
self.assertIsNotNone(data,msg = '测试失败时打印的信息')
response = str(int(dlist['response1']))
row = data.json()
self.assertEqual(row['resultcode'], response, msg='error:'+row['reason'])
except json.decoder.JSONDecodeError as e:
self.assertEqual(1, 0, msg='URL ERROR')
if dlist['type']=='post':
try:
data = requests.post(dlist['url'], data=eval(dlist['data']))
response = str(int(dlist['response1']))
row = data.json()
self.assertEqual(row['resultcode'], response, msg='error:'+row['reason'])
except json.decoder.JSONDecodeError as e:
self.assertEqual(1, 0, msg='URL ERROR')
#生成测试报告并发送邮件
# coding: utf-8
from HTMLTestRunner import HTMLTestRunner
import unittest
from requestsTest02 import TestRequest
from emailTest import mail
def get_case_result():
filename = r"E:\mytest\test02.html" # 定义报告存放路径
print(filename)
fp = open(filename, 'wb')
# 构造测试套件
suite = unittest.TestSuite()
# 第一种方法:传入'模块名.TestCase名'
suite.addTests(unittest.TestLoader().loadTestsFromName('requestsTest02.TestRequest'))
#suite.addTests(unittest.TestLoader().loadTestsFromName('TestEmail.testLogin'))
# 执行测试
#runner = unittest.TextTestRunner(verbosity=2)
runner = HTMLTestRunner(stream=fp,
title='Test',
description='测试结果如下: ')
runner.run(suite)
f1 = open(filename, 'r', encoding='utf-8')
res = f1.read()
f1.close()
mail(res)