数据库如何做断言处理?看完这一篇文章就够了
在我们测试过程当中,经常遇到要对数据库进行做旁段处理,比如一个【添加】功能,添加
完数据之后,会在数据库中生成一条新的记录,那你是怎么判断数据库中有没有这一条记录呢?
import ast import jsonpath from common.mylogger import logger from common.my_mysql import MyMysql 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 = [] check_db_list = ast.literal_eval(check_db_str) # 比eval安全一点。转成列表。 db = MyMysql() # 遍历check_db_list for check_db_dict in check_db_list: logger.info("当前要比对的sql语句:\n{}".format(check_db_dict["sql"])) logger.info("当前执行sql的查询类型(查询结果条数/查询某个值.):\n{}".format(check_db_dict["db_type"])) logger.info("期望结果为:{}".format(check_db_dict["expected"])) # 根据type来调用不同的方法来执行sql语句。 if check_db_dict["db_type"] == "count": logger.info("比对数据库查询的结果条数,是否符合期望") # 执行sql语句 res = db.get_count(check_db_dict["sql"]) logger.info("sql的执行结果为:{}".format(res)) # 将比对结果添加到结果列表当中 check_db_res.append(res == check_db_dict["expected"]) logger.info("比对结果为:{}".format(res == check_db_dict["expected"])) if False in check_db_res: logger.error("部分断言失败!,请查看数据库比对结果为False的") # raise AssertionError return False else: logger.info("所有断言成功!") return True if __name__ == '__main__': # 已经从excel当中读取出来的字符串 check_db_str = """[{"sql":"select id from member where mobile_phone='15500000000'","expected":1,"db_type":"count"}]""" res = MyAssert().assert_db(check_db_str) print(res)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步