数据库断言:assert_db

import ast
from api.conf.setting import assert_db_info
from api.tools.handle_replace import HandleReplace
from api.tools.handle_db import HandleDb
from api.tools.handle_response import HandleResponse
# 数据库断言
class HandleAssertDb:
    """
        思路:
        1、图片上传接口,返回的是图片上传后的路径,存在tz_attach_file表的file_path字段
        2、将返回的路径提取出来,做成全局变量(HandleAttr类属性)
        3、去excel中增加assert_db字段,写期望结果,和实际结果数据
            {"expected_data": 1, "actual_data": "select count(1) from tz_attach_file  where file_path ='2024/03/c2876474841b479dab280a9b1cfc63a2.png'"}
        4、获取excel中assert_db字段,拿到实际结果actual_data,替换sql语句,再执行sql语句,获取执行结果
        5、拿expected_data的值与actual_data中sql语句执行的结果进行对比断言
        """
    def __init__(self):
        # 参数替换类
        self.replace_data = HandleReplace()
        # 数据库操作
        self.handle_db = HandleDb()
        # 统一从HandleResponse类断言的类里面去断言
        self.handle_response = HandleResponse()
    # 删除换行符和空格 data:str给变量data制定数据格式,好处,可以使用制定格式的方法
    def __delete_space_wraps(self, data: str):
        """
        :param data:excel中获取的请求参数
        :return: 去掉空格和换行符的请求参数
        """
        for str_data in ["\n"]:  # assert_db不能存在空格
            data = data.replace(str_data, "")
        return data
    def assert_db(self, assert_db):  # expected_data,actual_data取数来源读取excel中的assert_db,数据库断言
        """
        :param assert_db: excel中的assert_db字段
        assert_db_info:配置文件setting中读取
        :return:
        """
        if assert_db:  # 判断是否需要进行sql断言
            # 去除空格和换行
            assert_db = self.__delete_space_wraps(assert_db)
            # 三元运算判断assert_db数据类型是否为dict
            assert_db = assert_db if isinstance(assert_db, dict) else ast.literal_eval(assert_db)
            # 拿到预期结果和实际结果
            expected_data = assert_db["expected_data"]
            sql = assert_db["actual_data"]
            # 拿到实际结果extract_data,替换sql语句
            new_sql = self.replace_data.replace_sql(sql=sql)
            # 操作数据库,拿到入库数据
            actual_data = self.handle_db.get_data(sql=new_sql)  # extract_data=[1] int类型
            # 数据断言
            self.handle_response.assert_db(expected_data, actual_data[0])
        else:
            print("excel中assert_db为空,无需进行mysql断言")

 

posted on 2024-04-06 19:45  诚实的表达自己  阅读(5)  评论(0编辑  收藏  举报