Excel:用于存储测试用例;
requests:接口测试框架,发送请求;
unittest:单元测试框架,用于包装接口测试用例;
ddt:Data-Driven Tests;
yagmail:发送测试报告邮件的库;
xlrd:读取 Excel 文件;
HTMLTestReportCN:生成测试报告模板
class ExceHandle():
def __init__(self,word_path,sheet_name):
'''
:param word_path: Excel文件路径
:param sheet_name: sheet名称
'''
self.workBook = xlrd.open_workbook(word_path)
self.table = self.workBook.sheet_by_name(sheet_name)
self.col_nums = self.table.ncols
self.row_nums = self.table.nrows
self.row_value = self.table.row_values(0)
def testcase_date(self):
result = []
swift_dict = {}
for i in range(self.row_nums-1):
row_data = self.table.row_values(i+1)
for j in range(self.col_nums):
swift_dict[self.row_value[j]] = row_data[j]
if swift_dict:
result.append(swift_dict)
swift_dict = {}
return result
class DataSet():
@classmethod
def get_test_date(self,work_path,sheet_name,testcaseName):
'''
:param work_path: 测试用例路径
:param sheet_name: Excelsheet名称
:param testcaseName: 测试用例名称
:return:
'''
result = ExceHandle(work_path,sheet_name)
testDate = result.testcase_date()
testDateSet = []
for i in range(len(testDate)):
if testDate[i]['TestCaseName'] == testcaseName and testDate[i]['Execute']:
testDateSet.append(testDate[i])
return testDateSet
import requests
import json
class TestRequests():
@classmethod
def test_requests(self,url,method='',header='',data=''):
if data:
data = json.loads(data)
self.response = requests.request(url=url,method=method,headers=header,data=data)
return self.response
import requests
import json
class FrontInterface():
@classmethod
def getLoginUserInfo(self,url_getInfo,method_getInfo='',data_getInfo=''):
if data_getInfo:
data_getInfo = json.loads(data_getInfo)
self.head = {}
getLoginUrl = url_getInfo + 'getLoginUserInfo'
response = requests.request(url=getLoginUrl,method=method_getInfo,data=data_getInfo)
one = response.headers['Set-Cookie'].split(";")
result = one[1].split(",")
self.head['Cookie'] = result[2].strip()
return self.head
@classmethod
def dict_interface_count(self):
dict_interface = {}
dict_interface['getLoginUserInfo'] = self.getLoginUserInfo
return dict_interface
import unittest
import ddt
import json
from TestTool.get_test_date import DataSet
from TestInterface.front_interface import FrontInterface
from TestInterface.test_requests import TestRequests
#读取测试用例数据
test_data = DataSet.get_test_date("TestInterface\TestDate\TestDataSet.xlsx",'TestDataSet','login')
@ddt.ddt
class LoginCase(unittest.TestCase):
def setUp(self):
data = json.loads(test_data[0]['RequestFrontInterface'])
dict_interface = FrontInterface.dict_interface_count()
for key,value in dict_interface.items():
if key == data[key]:
url_front = test_data[0]['RequestUrl']
self.head = dict_interface[key](url_front,test_data[0]['RequestWays'],test_data[0]['RequestFrontData'])
return self.head
@ddt.data(*test_data)
def test_login(self,data):
url_login = data['RequestUrl']+data['RequestInterface']
print(self.head)
responses = SwiftpassRequests.test_requests(url_login,data['RequestWays'],self.head,data['RequestData'])
value = responses.json()['success']
self.assertEqual(value,data['ExceptResult'])
import yagmail
import unittest
import HTMLTestReportCN
import time
import os
discover = unittest.defaultTestLoader.discover('TestCase',pattern='test_*.py')
suite = unittest.TestSuite()
suite.addTest(discover)
now_time = time.strftime("%Y_%M_%d_%H_%M_%S")
now = time.strftime("%Y%m%d")
dir = os.getcwd() + '/' + now
if not os.path.exists(dir):
os.mkdir(dir)
file_dir = dir + '/' + now_time + '_report.html'
report_html = open(file_dir,'wb')
runner = HTMLTestReportCN.HTMLTestRunner(report_html)
runner.run(suite)
report_html.close()
#结合yagmail包,实现发送邮件功能
#注意,网易个人邮箱,password应填入授权码值
yag = yagmail.SMTP(user='emailuser',password='password',host='smtp.exmail.qq.com')
yag.send(to='emailuser',subject="接口自动化测试报告",contents=[file_dir])