python接口自动化测试框架结构 ( 第三章)
1、创建testcase.py文件
2、新增方法获取excel表内的数据,代码如下(可以放到utlis.py文件里):
def case_data(dataname) -> list:
"""
处理测试用例数据
:param dataname: 测试用例文件名
:return: 测试用例数据
"""
test_case = '../database/{}.xlsx'.format(dataname)
test_num = Excel('r', test_case).read()
testdata = excel_dict(test_num)
return testdata
日常验证,代码如下:
if __name__ == '__main__':
print(case_data('testcase'))
运行结果:
返回结果为一个例表,列表内有两条数据!正常返回即可
3、创建__init__.py文件代码如下:
import logging
from lib.log import init_logging
# 环境切换 loc,dev,uat
surroundings = 'loc' #用来代替get_test_url方法的参数
init_logging()
logging.info("测试日志信息|{}环境".format(surroundings))
此处倒入后方可TestCase类打印日志!
4、新建TestCase类,用来执行代码和设置断言,使用ddt做参数化
新建代码如下:
@ddt.ddt
class TestCase(unittest.TestCase):
@ddt.data(*case_data('testcase'))
def test_run_case(self, data):
"""
执行测试脚本
:param data: 参数化后测试用例|dict类型
:return:
"""
response = send_requests(data) # 返回response
print('________') #没有实际意义- -
logging.info("页面返回信息:%s" % response.json())
执行结果:
上述执行成功成功后,新增写入操作:
因写入格式需list,直接使用封装好的方法处理写入的数据(不懂回去第二章)
code = data['code'] # 获取表内code
status = data['status'] # 获取表内状态码
msg = data['msg'] # 获取响应状态
if code == self.result['code'] and status == self.response.status_code and
msg == self.result['msg']: # 判断返回数据是否和表内数据相同
self.msg_data = "PASS" # 这个值要用来写入
else:
self.msg_data = "FAIl" # 这个值要用来写入
Excel('w', '../results/results.xlsx') \
.write(write_result(value7=str(self.result), value8=self.msg_data)) # 写入时需转换为str类型 (两个参数为例)
写入数据成功后,添加设置断言:
self.assertEqual(self.result['code'], code)
self.assertEqual(self.response.status_code, status)
self.assertEqual(self.result['msg'], msg)
完整代码如下:
import unittest
import ddt
from data.data_driven import data_processing
from lib.sendrequest import send_requests
from lib.utlis import *
def case_data(dataname) -> list:
"""
处理测试用例数据
:param dataname: 测试用例文件名
:return: 测试用例数据
"""
test_case = '../database/{}.xlsx'.format(dataname)
test_num = Excel('r', test_case).read()
testdata = excel_dict(test_num)
return testdata
@ddt.ddt
class TestCase(unittest.TestCase):
@ddt.data(*case_data('testcase'))
def test_run_case(self, data):
"""
执行测试脚本
:param data: 参数化后测试用例|dict类型
:return:
"""
self.response = send_requests(data) # 返回response
print('________')
logging.info("页面返回信息:%s" % self.response.json())
self.result = self.response.json()
code = data['code'] # 获取表内code
status = data['status'] # 获取表内状态码
msg = data['msg'] # 获取响应状态
if code == self.result['code'] and status == self.response.status_code \
and msg == self.result['msg']: # 判断返回数据是否和表内数据相同
self.msg_data = "PASS"
else:
self.msg_data = "FAIl"
Excel('w', '../results/results.xlsx') \
.write(write_result(value7=str(self.result), value8=self.msg_data))
self.assertEqual(self.result['code'], code)
self.assertEqual(self.response.status_code, status)
self.assertEqual(self.result['msg'], msg)
4、新建run.suite.py,运行并生成报告,代码如下:
from case.testcase import TestCase
from setting import REPORT_PATG #倒入setting.py内的变量
from tools.HTMLTestRunner import HTMLTestRunner #网上下一个就行
import unittest
# 1.创建测试套件
suite = unittest.TestSuite()
# 2.添加测试用例
suite.addTest(unittest.makeSuite(TestCase))
# 3.指定报告生成位置 ————REPORT_PATG为存放测试报告的路径(setting.py内的变量)
with open(REPORT_PATG, "wb") as f:
runner = HTMLTestRunner(f, title="AsimovApi", description="None")
runner.run(suite)
运行结果:
报错原因为路径的问题,run.suite.py和存放用例的文件为同级,在文件seeting.py内新增:
case_root = os.path.join(PROJECT_ROOT, 'database') # 测试用例
results_root = os.path.join(PROJECT_ROOT, 'results', 'results.xlsx')#测试结果
REPORT_PATG = os.path.join(PROJECT_ROOT, 'report', 'index.html') # 报告路径
用seeting.py的变量替换路径后代码如下(完整代码):
import unittest
import ddt
from lib.sendrequest import send_requests
from lib.utlis import *
from setting import case_root, results_root
def case_data(dataname) -> list:
"""
处理测试用例数据
:param dataname: 测试用例文件名
:return: 测试用例数据
"""
test_case = case_root + '/{}.xlsx'.format(dataname) #case_root ——为存放测试用例的路径
test_num = Excel('r', test_case).read()
testdata = excel_dict(test_num)
return testdata
@ddt.ddt
class TestCase(unittest.TestCase):
@ddt.data(*case_data('testcase'))
def test_run_case(self, data):
"""
执行测试脚本
:param data: 参数化后测试用例|dict类型
:return:
"""
self.response = send_requests(data) # 返回response
print('________')
logging.info("页面返回信息:%s" % self.response.json())
self.result = self.response.json()
code = data['code'] # 获取表内code
status = data['status'] # 获取表内状态码
msg = data['msg'] # 获取响应状态
if code == self.result['code'] and status == self.response.status_code \
and msg == self.result['msg']: # 判断返回数据是否和表内数据相同
self.msg_data = "PASS"
else:
self.msg_data = "FAIl"
#results_root ———为写入文件存放的路径(setting.py内的变量)
Excel('w', results_root) \
.write(write_result(value7=str(self.result), value8=self.msg_data))
self.assertEqual(self.result['code'], code)
self.assertEqual(self.response.status_code, status)
self.assertEqual(self.result['msg'], msg)
最后再次运行run.suite.py,运行成功后新增日志文件和报告:
点击不迷路,python接口自动化测试框架结构 ( 第五章)
非常感谢您的阅读,第一次写博客文章,写的不好的地方多度包含,欢迎大佬指出代码中的不足,共同提升、共同进步!(要源代码 点赞关注后+VX dengwoi )