一、请求函数
二、路径函数
import os
'''专门来读取路径的值'''
#切换到顶级目录
project_path=os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]
#测试用例的路径
test_case_path=os.path.join(project_path,'testcase_03','test.xlsx')
print(test_case_path)
#测试报告的路径
test_report_path=os.path.join(project_path,'report','测试报告1.html')
print(test_report_path)
三、excel读取
from openpyxl import load_workbook
# 相对路径 绝对路径
# 打开工作簿
class DoExcel:
@staticmethod
def get_data(file_name, sheet_name):
# wb=load_workbook("../testcase_03/test.xlsx")
wb = load_workbook(file_name)
sheet = wb[sheet_name]
test_data = []
for i in range(2, sheet.max_row + 1):
row_data = {}#字典
row_data['case_id'] = sheet.cell(i, 1).value
row_data['url'] = sheet.cell(i, 3).value
row_data['data'] = sheet.cell(i, 4).value
row_data['title'] = sheet.cell(i, 5).value
row_data['http_method'] = sheet.cell(i, 6).value
row_data['expected'] = sheet.cell(i, 7).value
test_data.append(row_data)
return test_data
def write_back(self, file_name, sheet_name, i, value, j=8): # 专门写回数据
wb = load_workbook(file_name)
sheet = wb[sheet_name]
sheet.cell(i, j).value = value
wb.save(file_name)
if __name__ == '__main__':
res = DoExcel().get_data("D:\PycharmProjects\class_01\\testcase_03\\test.xlsx", 'Sheet1')
print(res)
四、测试用例
import unittest
from testcase_03.project_path import *
from testcase_04.http_request import HttpRequest
from testcase_04.get_cookie import GetCookie
#针对数据是列表嵌套列表/列表嵌套字典时,我们可以进行脱外套处理,脱完之后有几条元素就有几条用例
from ddt import ddt,data
from testcase_03.do_excel import DoExcel
#地址前面的r是进行特殊字符的转义
test_data=DoExcel.get_data(test_case_path, 'Sheet1')
#装饰测试类
@ddt
class TestHttpRequest(unittest.TestCase):
def setUp(self):
pass
#data装饰我们的测试用例
@data(*test_data)
#将拆分的数据一条一条传进来,保存到item中去
def test_getlist(self,item):
#data是字符串存入字典里面还是字符串,不再是字典,所以需要eval一下
res = HttpRequest().http_request(item['url'], eval(item['data']), item['http_method'], getattr(GetCookie, 'cookie'))
#存入excel中的code是数字,需要str一下
self.assertEqual(str(item['expected']),res.json()['code'])
print("获取到的结果是:{0}".format(res.json()))
def tearDown(self):
pass
五、测试报告
import unittest
import HTMLTestRunner
from testcase_03.test_http_request import TestHttpRequest
from testcase_03.project_path import *
suite=unittest.TestSuite()
loader=unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestHttpRequest))
with open(test_report_path, 'wb') as file:
# 执行用例
runner = HTMLTestRunner.HTMLTestRunner(stream=file,
title='test_getlist',
description='单元测试报告',
verbosity=2)
runner.run(suite)