测试用例类: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()

 

posted on 2020-03-09 19:16  诚实的表达自己  阅读(618)  评论(0编辑  收藏  举报