测试用例类:test_cases
import unittest from ddt import ddt, data from unittestreport import list_data, ddt from api.tools.handle_path import test_data_dir from api.tools.handle_excel import HandleExcel from api.tools.handle_replace import HandleReplace from api.tools.handle_response import HandleResponse from api.tools.handle_requests import HandleRequests from api.tools.handle_extract import HandleExtract from api.tools.handle_assert_db import HandleAssertDb from api.tools.handle_db import mysql from api.tools.handle_log import my_log from api.conf.setting import assert_db_info # 获取测试用例数据 case_list = HandleExcel(test_data_dir, "place_order").get_excel_test_case() @ddt class TestPlaceOrder(unittest.TestCase): @classmethod def setUpClass(cls) -> None: # 请求头 cls.header = {"Content-Type": "application/json;charset=UTF-8", "locale": "zh_CN"} # 参数替换类的初始化 cls.handle_replace = HandleReplace() # 参数化data,用配置文件读取数据进行参数化 # 请求响应数据类的初始化 cls.handle_response = HandleResponse() # 确定响应类型,进行断言 cls.handle_requests = HandleRequests() # 发送请求 cls.handle_extract = HandleExtract() # 全局变量提取 cls.handle_assert_db = HandleAssertDb() # 数据库断言 @classmethod def tearDownClass(cls) -> None: mysql.db_close() # @list_data(case_list) 相当于@data(*case_list) # [{},{}]多少个{}代表多少个测试用例 @list_data(case_list) # [{},{}] # unittestreport类中的list_data和data功能差不多,可以自动读取excel中的title字段,生成到测试报告中 def test_place_order(self, case): # 很多错误是由于类型错误导致{},{} # 1、发送请求前:需要解决data中的/n和空格,需要正则参数化数据##替换 # 2、如果setup_sql不为空,会调用前置处理执行setup_sql语句,获取字典数据,然后设置为内属性(__execute_sql_and_setattr) new_data = self.handle_replace.replace_data(case["data"], setup_sql=case["setup_sql"]) my_log.info(msg=f"参数化后的入参data格式:{new_data}") # 2、发送请求 new_response = self.handle_requests.send_requests(url=case["url"], method=case["method"], data=new_data, is_upload=case["is_upload"]) my_log.info(msg=f"处理后的响应结果是:{new_response}") # 断言 预期结果:case["expected_data"] = {"token_type":"bearer"} {"response":"验证码有误或已过期"} # 实际结果: {'response_type': 'str', 'response': '验证码有误或已过期'} {'response_type': 'json','token_type': 'bearer'} my_log.info(msg="处理后的响应结果是:{}".format(case["expected_data"])) # 3、接口响应断言 self.handle_response.assert_response(case["expected_data"], new_response) # 4、通过extract方法提取响应结果,生成全局变量 预期结果 实际响应数据 self.handle_extract.handle_extract(case["extract_data"], new_response) # 5、数据库断言 self.handle_assert_db.assert_db(assert_db=case["assert_db"]) if __name__ == '__main__': unittest.main()