class HandleAssert: def __init__(self): self.sql_com_res = {} # 存储sql查询之后的比较结果 self.db = HandleDB() # 打开数据库连接 def assert_sql(self, check_sql_str): self.get_sql_comp_res(check_sql_str) # 关闭数据库连接 self.db.close() if False in self.sql_com_res.values(): logger.error("断言失败,数据库比对不成功!") raise AssertionError else: logger.info("数据库比对成功!") def get_sql_comp_res(self, check_sql_str): check_sql_dict = eval(check_sql_str) logger.info("数据库校验为:\n{}".format(check_sql_dict)) if check_sql_dict["check_type"] == "value": logger.info("比较sql语句查询结果之后的值") sql_res = self.db.get_one(check_sql_dict["check_sql"]) logger.info("执行sql:{}".format(check_sql_dict["check_sql"])) logger.info("查询结果:{}".format(sql_res)) logger.info("预期结果为:{}".format(check_sql_dict["expected"])) # 执行的结果进行比较。sql_res为字典类型 for key, value in check_sql_dict["expected"].items(): if key in sql_res.keys(): if isinstance(sql_res[key], Decimal): sql_res[key] = float(sql_res[key]) logger.info("将Decimal转换为float后的值:{}".format(sql_res[key])) if value == sql_res[key]: self.sql_com_res[key] = True # 比较成功 存储到sql_com_res中 logger.info("比较成功!") else: self.sql_com_res[key] = False # 比较失败 存储到sql_com_res中 logger.info("比较失败!") else: logger.info("sql查询结果里面没有对应的列名{},请检查预期结果或查询语句是否正确}".format(key)) # 比对slq语句查询之后的条数 elif check_sql_dict["check_type"] == "count": logger.info("比较sql语句查询之后的条数,sql查询结果为整数,只要比对数字即可!") sql_res = self.db.get_count(check_sql_dict["check_sql"]) logger.info("执行sql:{}".format(["check_sql"])) logger.info("查询结果:{}".format(sql_res)) logger.info("预期结果为:{}".format(check_sql_dict["expected"])) # 比对 if sql_res == check_sql_dict["expected"]: self.sql_com_res["count"] = True logger.info("比较成功!") else: self.sql_com_res["count"] = False logger.info("比较失败!")
def get_new_phone(): # 判断手机号是否已经注册,如果已经注册,重新生成新的手机号码 while True: phone = __gen_phone() # 向数据库查询手机号是否已存在,如果查询结果为0,则为未注册,return退出循环 hd = HandleDB() select_sql = f"select * from member where mobile_phone={phone};" count = hd.get_count(select_sql) if count == 0: hd.close() return phone