数据库断言封装 与 替换

数据库断言封装

import ast
import jsonpath
from common.my_mysql import My_mysql
from common.py_log import LoggerHandler

loger = LoggerHandler()

class MyAssert:
    def assert_db(self,check_db_str):
        """
        1、将check_db_str转成python对象(列表),通过eval
        2、遍历1中的列表,访问每一组db比对
        3、对于每一组来讲,1)调用数据库类,执行sql语句。调哪个方法,根据type来决定。得到实际结果
                       2)与期望结果比对
        :param check_db_str: 测试数据excel当中,assert_db列读取出来的数据库检验字符串。
              示例:[{"sql":"select id from member where mobile_phone='#phone#'","expected":1,"type":"count"}]
        :return:
        """
		# 所有断言的比对结果列表
        check_db_res = []

        # 把字符串转换成python列表
        check_db_list = ast.literal_eval(check_db_str)  # 比eval安全一点。转成列表。

        # 建立数据库连接
        db = My_mysql()

        # 遍历check_db_list
        for check_db_dict in check_db_list:
            loger.info("当前要比对的sql语句:\n{}".format(check_db_dict["sql"]))
            loger.info("当前执行sql的查询类型(查询结果条数 或 查询某个值。):\n{}".format(check_db_dict["db_type"]))
            loger.info("期望结果为:\n{}".format(check_db_dict["expected"]))

            # 根据type来调用不同的方法来执行sql语句。
            if check_db_dict["db_type"] == "count":
                 loger.info("比对数据库查询的结果条数,是否符合期望")

                 # 执行 sql 语句
                 res = db.get_count(check_db_dict["sql"])
                 loger.info("sql的执行结果为:\n{}".format(res))

                 # 将比对结果添加到结果列表当中
                 check_db_res.append(res == check_db_dict["expected"])


                 # if check_db_dict["comp_type"] == "eql":
                 #     check_db_res.append(res == check_db_dict["expected"])

            if False in check_db_res:
                loger.error("部分断言失败!,请查看数据库比对结果为False的")
                # raise AssertionError
                return False
            else:
                loger.info("所有断言成功!")
                return True
             
if __name__ == '__main__':
    # 已经从excel当中读取出来的字符串
    check_db_str='''[{"sql":"select id from member where mobile_phone='14560748362'","expected":1,"db_type":"count"}]'''
    res = MyAssert().assert_db(check_db_str)
    print(res) 
    

=====================================

#phone# 占位符替换

1、在excel中准备测试数据 - 登陆接口
2、从excel当中读取测试数据 - 登陆接口
3、定义一个测试类TestLogin,使用参数化
4、在类内部:
4.1 如果有要替换的占位符,那么先要替换掉占位符。 – 也要准备占位符对应的数据。
4.2 把替换之后的请求数据(json格式的字符串),转换成一个字典
4.3 发起请求,并接收响应结果
4.4 定义空列表,存放响应断言和数据库断言的最终结果
4.5 处理响应结果断言
4.6 处理数据库断言
4.6 最后看4.4的列表中是否有False,有就AssertionError

import os
import json
import pytest
from common.py_log import LoggerHandler
from common.my_assert import MyAssert
from common.My_excel import MyExcel
from common.my_requests import MyRequests
from common.handele_phonne import get_new_phone
from common.my_path import testdata_dir

logger = LoggerHandler()
# 第一步:读取注册接口的测试数据 - 是个列表,列表中的每个成员,都是一个接口用例的数据。
excel_path = os.path.join(testdata_dir,"注册接口用例.xlsx")
me = MyExcel(excel_path, "注册")
cases = me.read_data()

# 第二步:遍历测试数据,每一组数据,发起一个http的接口请求
# 实例化请求对象
mq = MyRequests()
massert = MyAssert()


class Test_Register:

    @pytest.mark.parametrize("case", cases)
    def test_register(self,case):

        logger.info("=========================== 注册接口测试 ==============================")
		
		new_phone = get_new_phone()		# # 设置属性,自动生成手机号码,方便替换是调用。
		
        # 1、替换请求数据当中,要替换掉的内容。占位符的形式:#value#
        # 替换掉占位符 - 请求数据和断言里面替换掉 #phone# ,替换成未注册手机号码
        if case["req_data"].find("#phone#") != -1:	# 如果 case["req_data"] 和 case["req_data"] .里面的(#手机号码#) != -1:  (-1)在这里是没有。
            case["req_data"] = case["req_data"].replace("#phone#", new_phone)	# case["req_data"] = case["req_data"].替换掉(#手机号码#,new_phone:新生成的手机号码)

        if case["assert_list"] and case["assert_list"].find("#phone#") != -1:	# 如果 case["assert_list"] 和 case["assert_list"] .里面的(#手机号码#) != -1:
            case["assert_list"] = case["assert_list"].replace("#phone#", new_phone)		# case["assert_list"] = case["assert_list"].替换掉(#手机号码#,new_phone:新生成的手机号码)

        if case["assert_db"] and case["assert_db"].find("#phone#") != -1:		# 如果 case["assert_db"] 和 case["assert_db"] .里面的(#手机号码#) != -1:
            case["assert_db"] = case["assert_db"].replace("#phone#", new_phone)		# case["assert_db"] = case["assert_db"].替换掉(#手机号码#,new_phone:新生成的手机号码)

        # 2、把替换之后的请求数据(json格式的字符串),转换成一个字典
        req_dict = json.loads(case["req_data"])

        # 3、发起请求,并接收响应结果
        resp = mq.send_requests(case["url"], case["method"], req_dict)
        print(resp.json())

        # 定义结果空列表,方便下面断言后添加到列表里面。
        assert_res = []

        # 4、断言响应结果中的数据
        if case["assert_list"]:
            response_check_res = massert.assert_response_value(case["assert_list"], resp.json())
            assert_res.append(response_check_res)

        # 5、断言数据库
        if case["assert_db"]:
            db_check_res = massert.assert_db(case["assert_db"])
            assert_res.append(db_check_res)

        # 最终的抛 AssertttionError
        if False in assert_res:
            raise AssertionError
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值