class GetData: '''专门来读取路径的值''' base_path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[ 0] #G:\python3_code\sublime_text03\14SoftwareTest\APITest\qcd_ApiTest # 测试用例路径 case_path = os.path.join(base_path, 'test_case', 'test_case.xlsx') # 测试报告路径 report_path = os.path.join(base_path, 'test_result', 'report', 'test_api.html') # 配置文件路径 config_path = os.path.join(base_path, 'conf', 'webservice.conf') # 日志文件路径 log_path = os.path.join(base_path, 'test_result', 'log', 'test_log.txt') # 未注册手机号 no_reg_tel = pd.read_excel(case_path, sheet_name='init').ix[0, 1] # 未用过的手机号 reg_name = GetRegName.get_reg_name() #获取ip ip = GetIp.get_ip() # 接口url地址 sms_service_url = ReadConfig.read_config(case_config_path, 'URL', 'sms_service') finance_user_info_url = ReadConfig.read_config(config_path, 'URL', 'finance_user_info')
def do_mysql(self, sql, db=1): ''' :param sql: SQL语句 :param db: 选择的数据库 :return:关于返回值:如果只有单个值单元素,返回单个值,如:1;多元素,返回列表,如:[1, 2, 3] 如果多个值单元素。返回列表,如:[1, 2, 3];多元素,返回嵌套列表,如:[[33, '支付宝'], [35, '天猫商城']] ''' config = eval(ReadConfig().read_config(db_conf_path, 'DATABASE', 'config')) config['database'] = ReadConfig().read_config(db_conf_path, 'DATABASE', 'database%s' % db) cnn = pymysql.connect(**config) cursor = cnn.cursor() try: cursor.execute(sql) result = cursor.fetchall() if len(result) == 1: if len(result[0]) == 1: new_result = result[0][0] else: new_result = list(result[0]) else: new_result = [] for i in result: if len(i) == 1: new_result.append(i[0]) else: new_result.append(list(i)) return new_result except Exception as e: self.logger.error('查询数据出错了,报错是:%s' % e) finally: cursor.close() cnn.close()
def my_log(self, level, msg): my_logger = logging.getLogger(ReadConfig().get('logs', 'logger_name')) my_logger.setLevel(ReadConfig().get('logs', 'logger_level')) formatter = logging.Formatter(ReadConfig().get('logs', 'formatter')) aa_handle = logging.StreamHandler() aa_handle.setLevel(ReadConfig().get('logs', 'handle_level')) bb_handle = logging.FileHandler(contants.logs_path, encoding='utf-8') bb_handle.setLevel(ReadConfig().get('logs', 'file_level')) aa_handle.setFormatter(formatter) bb_handle.setFormatter(formatter) my_logger.addHandler(aa_handle) my_logger.addHandler(bb_handle) if level == "DEBUG": my_logger.debug(msg) if level == "INFO": my_logger.info(msg) if level == "WARNING": my_logger.warning(msg) if level == "ERROR": my_logger.error(msg) if level == "CRITICAL": my_logger.critical(msg) my_logger.removeHandler(aa_handle) my_logger.removeHandler(bb_handle)
def my_log(self, level, msg): # 创建收集器 my_logger = logging.getLogger(ReadConfig().get('LOGS', 'logger_name')) my_logger.setLevel(ReadConfig().get('LOGS', 'collect_level')) #输出格式 formatter = logging.Formatter(ReadConfig().get('LOGS', 'export_formatter')) #控制台输出设置 ch = logging.StreamHandler() ch.setLevel(ReadConfig().get('LOGS', 'console_handler_level')) ch.setFormatter(formatter) fh = logging.FileHandler(contants.log_path, encoding='utf-8') fh.setLevel(ReadConfig().get('LOGS', 'file_handler_level')) fh.setFormatter(formatter) my_logger.addHandler(ch) my_logger.addHandler(fh) if level == 'DEBUG': my_logger.debug(msg) elif level == 'INFO': my_logger.info(msg) elif level == 'ERROR': my_logger.error(msg) elif level == 'WARNING': my_logger.warning(msg) elif level == 'CRITICAL': my_logger.critical(msg) my_logger.removeHandler(ch) my_logger.removeHandler(fh)
def do_excel(self): flag = ReadConfig().read_config(pro_path.conf_path, 'TESTCASE', 'flag') case_id_list = ReadConfig().read_config(pro_path.conf_path, 'TESTCASE', 'case_id_list') wb = load_workbook(self.file_path)#打开工作簿 sheet = wb[self.sheet_name]#获取表单 tel = self.get_tel()#从Excel里获取初始化手机号 self.update_tel(tel+1)#获取完毕之后 更新初始化的手机号码 self.used_tel(tel)#调用函数 存储手机号码 test_data=[] #所有的测试数据放到一个列表里 for i in range(2,sheet.max_row+1): sub_data = {}#每一行数据存入到字典里 sub_data['CaseId'] = sheet.cell(i,1).value sub_data['Title'] = sheet.cell(i, 2).value sub_data['Method'] = sheet.cell(i, 3).value sub_data['URL'] = sheet.cell(i, 4).value sub_data['Param'] = sheet.cell(i, 5).value #请求参数 if sub_data['Param'].find('${tel}')!=-1:#find函数 如果存在, sub_data['Param'].replace('${tel}',str(tel)) sub_data['ExpectedResult'] = sheet.cell(i, 6).value test_data.append(sub_data)#添加数据到列表里面 #根据配置文件的开关来决定运行哪些测试用例 if flag=='on':#意味着执行所有的用例 final_data = test_data else:#执行指定列表里面的数据 final_data=[]#用来存储最后要执行的用例 for i in eval(case_id_list): final_data.append(test_data[i-1])#注意这里的写法? return final_data#返回最终的数据
def __init__(self): host = ReadConfig().get('mysql','host') post = ReadConfig().get_int('mysql', 'post') #post是一个数值,用getint()方法获取 usr = ReadConfig().get('mysql', 'usr') pwd = ReadConfig().get('mysql', 'pwd') try: self.db = pymysql.connect(host=host, user=usr, password=pwd, port=post,cursorclass=pymysql.cursors.DictCursor) except ConnectionRefusedError as e: print('mysql数据库连接错误') raise e
def test_login(self, case): max_mobilephone = str( int(self.mysql_tool.fetch_one(self.sql)['MobilePhone']) + 1) # 查询数据库最大手机号+1 ReadConfig().write_value('MobilePhone', 'max_phone', max_mobilephone) # 最大手机号写入配置文件 my_logger.info('目前正在执行第{0}条用例:{1}'.format(case.case_id, case.title)) my_logger.info('----------开始检查url请求地址--------') url = ReadConfig().get('test_api', 'url_pre') + case.url my_logger.info('url接口地址是:{0}'.format(url)) #将excel读取出来的字符串转换成字典 my_logger.info('----------开始检查请求参数------------') data = case.data data = json.loads(SeekReplace().seek_replace(data)) my_logger.info('开始检查请求参数:{0}'.format(data)) resp = HttpRequest(method=case.method, url=url, data=data) try: self.assertEqual(case.expected, resp.get_text()) Test_result = 'Pass' except AssertionError as e: Test_result = 'Failed' print('断言出错了%s:', e) raise e my_logger.info('本条用例的测试结果:{}'.format(Test_result)) # 数据验证 if int(resp.get_json()['code']) == 10001: # 注册成功,数据库查询有记录 sql = 'SELECT * FROM future.member where MobilePhone="{0}"'.format( max_mobilephone) expected = max_mobilephone resp = self.mysql_tool.fetch_one(sql) if resp is not None: # 判断查找数据库数据非空 self.assertEqual(expected, resp['MobilePhone']) my_logger.info('注册成功,数据库查询正确') else: # 如果查询为空, my_logger.info('注册成功,数据库查询无数据') raise AssertionError else: # 注册不成功,数据库查询为空 sql = 'SELECT * FROM future.member where MobilePhone="{0}"'.format( max_mobilephone) member = self.mysql_tool.fetch_one(sql) if member is None: # 如果查询数据库为空 expected = None self.assertEqual(expected, member) my_logger.info('注册不成功,数据库查询无增加数据') else: # 查询数据库非空 my_logger.info('注册不成功,数据库查询增加数据') raise AssertionError
def __init__(self, sec_name): r = ReadConfig() self.conf = r.getValue(sec_name) self.connect = pymysql.Connect(host=self.conf['url'], port=self.conf['port'], user=str(self.conf['username']), passwd=str(self.conf['password']), db=self.conf['db'], charset='utf8') self.cursor = self.connect.cursor() logs.info('成功连接数据库')
def __init__(self): rc = ReadConfig() self.to_addr = rc.get_db("sendemail", "to_addr") #收信方 self.from_addr = rc.get_db("sendemail", "from_addr") #发信方 self.password = rc.get_db("sendemail", "password") #发信密码 self.email_type = self.to_addr.split("@")[1] self.smtp_server = "smtp." + self.email_type if self.email_type == "qq.com": self.port = 465 elif self.email_type == "163.com": self.port = 25 else: print("请配置目标邮箱类型的端口号!")
def read_data(self, section): #section 配置文件里面的片段名 可以根据你的指定来执行具体的用例 '''从Excel读取数据,有返回值''' #从配置文件里面控制读取哪些用例 case_id = ReadConfig(project_path.conf_path).get_data( section, 'case_id') wb = load_workbook(self.file_name) sheet = wb[self.sheet_name] #唯一的要求是什么?每一行数据要在一起 {} [] #如何把每一行的数据存到一个空间里面去? [] #开始读取数据 #获取存在excel里面的电话号码 tel = self.get_tel() test_data = [] for i in range(2, sheet.max_row + 1): row_data = {} row_data['CaseId'] = sheet.cell(i, 1).value row_data['Module'] = sheet.cell(i, 2).value row_data['Title'] = sheet.cell(i, 3).value row_data['Path'] = sheet.cell(i, 4).value row_data['Method'] = sheet.cell(i, 5).value row_data['Params'] = sheet.cell(i, 6).value row_data['sql'] = sheet.cell(i, 7).value #加上去的sql语句 row_data['ExpectedResult'] = sheet.cell(i, 8).value test_data.append(row_data) wb.close() final_data = [] #空列表 存储最终的测试用例数据 if case_id == 'all': #如果case_id==all 那就获取所有的用例数据 final_data = test_data #把测试用例赋值给final_data这个变量 else: #否则 如果是列表 那就获取列表里面指定id的用例的数据 for i in case_id: #遍历case_id 里面的值 final_data.append(test_data[i - 1]) #?对应关系?? return final_data
def read_data(self): """读取excel内容,有返回值""" case_id = ReadConfig(project_path.conf_path).get_data( 'CASE', 'case_id') wb = load_workbook(self.file_name) sheet = wb[self.sheet_name] test_data = [] for i in range(2, sheet.max_row + 1): row_data = {} row_data['CaseID'] = sheet.cell(i, 1).value row_data['Module'] = sheet.cell(i, 2).value row_data['Title'] = sheet.cell(i, 3).value row_data['Method'] = sheet.cell(i, 4).value row_data['Url'] = sheet.cell(i, 5).value row_data['Params'] = sheet.cell(i, 6).value row_data['ExpectedResult'] = sheet.cell(i, 7).value test_data.append(row_data) wb.close() final_data = [] # 存储最终的测试数据 if case_id == 'all': # 如果等于成立,获取所有的用例数据 final_data = test_data else: # 等于all不成立,就获取指定case_id的数据 for i in case_id: final_data.append(test_data[i - 1]) return final_data
def __init__(self): #数据库链接配置 #数据库连接 db_config = ReadConfig(config_file).read_config('DB_CONFIG', 'config') self.cnn = connect(**eval(db_config)) #建立游标 self.cur = self.cnn.cursor()
def __init__(self): self.excel_path = ReadConfig().read_config_keyword("excel_path_1") self.book = xlrd.open_workbook(self.excel_path) self.table = self.book.sheet_by_index(0) self.excel_copy = "" self.copy_book = "" self.copy_table = ""
def test_list(self, case): my_logger.info('正在执行第{0}条用例{1}'.format(case.case_id, case.title)) url = ReadConfig().get('test_api', 'url_pre') + case.url my_logger.info('检查url接口地址:{0}'.format(url)) if hasattr(Context, 'cookies'): cookies = getattr(Context, 'cookies') else: cookies = None my_logger.info('---------开始http请求-----------') resp = HttpRequest(method=case.method, url=url, data=case.data, cookies=cookies) my_logger.info('---------结束http请求-----------') my_logger.info('请求接口结果是:{0}'.format(resp.get_json())) try: self.assertEqual(case.expected, int(resp.get_json()['code'])) Test_result = 'Pass' except AssertionError as e: Test_result = 'Failed' my_logger.error('出错了{0}'.format(e)) raise e my_logger.info('本条用例执行结果:{0}'.format(Test_result)) # 数据验证 if resp.get_json()['code'] == '10001': seek_list = 'SELECT COUNT(Id) FROM future.member ;' actual = mysql.fetch_one(seek_list)['COUNT(Id)'] expected = len(resp.get_json()['data']) self.assertEqual(expected, actual) my_logger.info('请求返回用户列表记录数与查询数据库member表记录数一致')
def test_get_invest_record(self, case): my_logger.info('正在执行第{0}条用例{1}'.format(case.case_id, case.title)) url = ReadConfig().get('test_api', 'url_pre') + case.url my_logger.info('检查url接口地址:{0}'.format(url)) if hasattr(Context, 'cookies'): cookies = getattr(Context, 'cookies') else: cookies = None data = DoRegex().replace(case.data) data = json.loads(data) my_logger.info('---------开始http请求-----------') resp = HttpRequest(method=case.method, url=url, data=data, cookies=cookies) my_logger.info('---------结束http请求-----------') my_logger.info('请求接口结果是:{0}'.format(resp.get_json())) try: self.assertEqual(case.expected,int(resp.get_json()['code'])) Test_result = 'Pass' except AssertionError as e: Test_result = 'Failed' my_logger.error('出错了{0}'.format(e)) raise e my_logger.info('本条用例执行结果:{0}'.format(Test_result)) # 数据验证 # 如果获取用户投资列表成功,查询返回列表记录数与查询数据库中记录数是否一致 if resp.get_json()['msg'] == '获取用户投资列表成功': seek_invest_record = 'SELECT COUNT(Id) FROM future.invest where MemberID={0};'.format(getattr(Context, 'memberId')) actual = mysql.fetch_one(seek_invest_record)['COUNT(Id)'] expected = len(resp.get_json()['data']) self.assertEqual(expected, actual) my_logger.info('请求返回获取用户所有投资记录数与查询数据库Invest表中记录数一致')
def do_mysql(self, sql): # 数据库连接信息 config = eval(ReadConfig().read_config(file_path.db_config_path, 'DB', 'config')) # 产生数据库连接 conn = mysql.connector.connect(**config) # 获取数据库操作权限 cursor = conn.cursor() # sql = 'select * form coupon' # 执行 cursor.execute(sql) # 获取数据 res = cursor.fetchall() # 关闭 cursor.close() conn.close() return res
def test_profile(self, case_name, path, data, method): base_url = ReadConfig().get_base_url() new_url = base_url + path resp = ConfigHttp().run_main(method=method, url=new_url, data=data) # 断言状态码:200 self.assertEqual(resp.status_code, 200) # 将响应内容转为字典 body = resp.json() # 将字符串转换为字典 data = eval(data) instrument = data["instrumentName"].lower() product_beginner = "course." + instrument + ".beginner" product_intermediate = "course." + instrument + ".intermediate" # mongodb查询语句 beginner = { "_id": ObjectId(data["userId"]), "courseProductId": product_beginner, "transactionType": "course" } intermediate = { "_id": ObjectId(data["userId"]), "courseProductId": product_intermediate, "transactionType": "course" } result_1 = client.search_to_boolean("transactions", beginner) result_2 = client.search_to_boolean("transactions", intermediate) # 断言用户的购买状态 self.assertEqual( body['payload']['isStudyPlanProductPurchased']['Primary'], result_1) self.assertEqual( body['payload']['isStudyPlanProductPurchased']['Intermediate'], result_2)
def get_data(cls, wbname): mode = eval(ReadConfig().read_config(read_path.config_path, 'MODE', 'mode')) #读取配置文件,返回为一个字典 wb = load_workbook(wbname) test_data = [] #存放收集的每一条用例组合而成的字典 for key in mode: #遍历mode里的key值 sheet = wb[key] titles = DoExcel().get_title(wbname, key) #mode等于all时读取该sheet下所有用例 if mode[key] == 'all': for j in range(2, sheet.max_row + 1): #遍历除表头行的其他行 test_lists = {} #存放取出的表格数据组合的key,value值 for i in range(1, sheet.max_column + 1): #遍历每一行 # 替换有noreg_tel的参数 if str(sheet.cell(j, i).value).find('${noreg_tel}') != -1: tel = getattr(GetData, 'noreg_tel') # 利用反射获取初始值 # 用初始值替换 test_lists[titles[i - 1]] = str( sheet.cell(j, i).value).replace( '${noreg_tel}', str(tel)) # 更新未注册号码 DoInitData().updata_initdata(1, 1, int(tel) + 2) # 替换有noreg_tel1的参数 elif str(sheet.cell( j, i).value).find('${noreg_tel1}') != -1: tel = int(getattr(GetData, 'noreg_tel')) + 1 test_lists[titles[i - 1]] = str( sheet.cell(j, i).value).replace( '${noreg_tel1}', str(tel)) else: test_lists[titles[i - 1]] = sheet.cell(j, i).value test_data.append(test_lists) #遍历某个sheet下某几条用例 else: for case_id in mode[key]: #遍历mode里的value值 test_lists = {} for i in range(1, sheet.max_column + 1): #遍历列 if str(sheet.cell(case_id + 1, i).value).find('${noreg_tel}') != -1: tel = getattr(GetData, 'noreg_tel') test_lists[titles[i - 1]] = str( sheet.cell(case_id + 1, i).value).replace( '${noreg_tel}', str(tel)) #组合字典 DoInitData().updata_initdata(1, 1, int(tel) + 2) elif str(sheet.cell( case_id + 1, i).value).find('${noreg_tel1}') != -1: tel = int(getattr(GetData, 'noreg_tel')) + 1 test_lists[titles[i - 1]] = str( sheet.cell(case_id + 1, i).value).replace( '${noreg_tel1}', str(tel)) else: test_lists[titles[i - 1]] = sheet.cell( case_id + 1, i).value test_data.append(test_lists) # 替换除loanid以外的所有变量 test_data = eval(DoRegx.do_regx(str(test_data))) return test_data #返回组装的测试用例
def setUp(self): #获取期望结果放在setUp,充值前先取出leavemount sql = ReadConfig().get('SQL', 'LeaveAmount') global leavemount1 global mysql mysql = MysqlTool() leavemount1 = mysql.fetch_one(sql)['LeaveAmount'] mylogger.info('充值前账户余额:{0}'.format(leavemount1)) return leavemount1
def commit_mysql(self, sql, db=1): config = eval(ReadConfig().read_config(db_conf_path, 'DATABASE', 'config')) config['database'] = ReadConfig().read_config(db_conf_path, 'DATABASE', 'database%s' % db) cnn = pymysql.connect(**config) cursor = cnn.cursor() try: cursor.execute(sql) cnn.commit() except Exception as e: self.logger.error('数据库执行失败') cnn.rollback() raise e finally: cursor.close() cnn.close()
def setUp(self): self.mysql = MysqlTool() # 投资前用户余额 self.seek_mount = ReadConfig().get('SQL', 'LeaveAmount') self.leaveamount1 = self.mysql.fetch_one( self.seek_mount)['LeaveAmount'] # 投资前余额 my_logger.info('投资前用户账户余额:{0}'.format(self.leaveamount1))
def cnn_db(cls,sql): ReadConfig().read_config(config_path, 'DB', 'db_config') #数据库配置 db_config=eval(ReadConfig().read_config(config_path, 'DB', 'db_config')) #创建一个数据库连接 cnn=pymysql.Connect(**db_config) #创建游标 cursor=cnn.cursor() #写一个sql语句----字符串 qurey_sql=sql #执行语句 cursor.execute(qurey_sql) #获取结果 打印结果 res=cursor.fetchone() #结果为一个元组 # res1=cursor.fetchall() #结果为包含多个元组的元组 #关闭游标 cursor.close() return res
class Context: config = ReadConfig() normal_phone = config.get('basic', 'normal_phone') # 从配置文件读取放在context中 pwd = config.get('basic', 'pwd') memberId = config.get('basic', 'memberId') password = config.get('basic', 'password') admin_user = config.get('basic', 'admin_user') admin_pwd = config.get('basic', 'admin_pwd') borrow_member_id = config.get('basic', 'borrow_member_id')
def __init__(self): host, user, password, port, database = [ v for k, v in ReadConfig("host").read_config_items().items() ] self.conn = pymysql.connect(host=host, user=user, password=password, port=int(port), database=database) self.cursor = self.conn.cursor()
def tearDown(self): sql = ReadConfig().get('SQL', 'LeaveAmount') leavemount2 = mysql.fetch_one(sql)['LeaveAmount'] mysql.close() mylogger.info('充值后账户余额:{0}'.format(leavemount2)) if resp.get_json()['msg'] == '充值成功': recharge_mount = data['amount'] mylogger.info('请求参数中充值金额:{0}'.format(recharge_mount)) add_leavemount = leavemount2 - leavemount1 #充值成功增加余额 mylogger.info('账户余额增加金额:{0}'.format(add_leavemount))
class Context: config = ReadConfig() normal_user = config.get("basic", "normal_user") # 类变量 normal_pwd = config.get("basic", "normal_pwd") admin_user = config.get("basic", "admin_user") # 类变量 admin_pwd = config.get("basic", "admin_pwd") loan_member_id = config.get("basic", "loan_member_id") normal_member_id = config.get("basic", "normal_member_id") loan_id = config.get("basic", "loan_member_id") loan_member_id_1 = config.get("basic", "loan_member_id_1")
class MysqlUtil(): host = ReadConfig().get_value("datebase", "host") user = ReadConfig().get_value("datebase", "user") password = ReadConfig().get_value("datebase", "password") mysql = pymysql.connect(host=host, user=user, password=password, port=3306) cursor = mysql.cursor() #在此新建一个查询页面,调用fetch_one函数可进行多次查询 def fetch_one(self, sql): self.cursor.execute(sql) result = self.cursor.fetchone() return result def fetch_all(self, sql): self.cursor.execute(sql) results = self.cursor.fetchall() return def close(self): self.cursor.close() self.mysql.close()
def __init__(self): read_config = ReadConfig() self.in_level = read_config.get_value('log', 'in_level') self.out_level = read_config.get_value('log', 'out_level') self.file_level = read_config.get_value('log', 'file_level') self.format = read_config.get_value('log', 'formatter') self.file_path = contants.log_dir # 收集器 -----创建一个日志收集器 self.my_logger = logging.getLogger( 'python') # getLogger 是个函数,必须传一个参数,作为自己的日志收集器的名字,否则还是会用root logger self.my_logger.setLevel( self.in_level ) # 给日志收集器设置level (相当于第一次过滤) 设置了日志收集器的level,上面加不加名字都可以。但是一般还是要加上名字 # 输出格式 Formatter 是个类 规定日志输出的格式 self.formatter = logging.Formatter(self.format) # 输出渠道 -----指定输出渠道 self.ch = logging.StreamHandler() # 创建一个输出到控制台的渠道 self.ch.setLevel(self.out_level) # 给自己设置的渠道设置level (相当于第二次过滤) self.ch.setFormatter(self.formatter) # 输出渠道 -----输出到指定文件 文件路径 绝对路径和相对路径都可以 self.fh = logging.FileHandler( self.file_path, encoding='utf-8') # 指定参数,默认a模式。有文件,追加。没文件,新建 self.fh.setLevel(self.file_level) self.fh.setFormatter(self.formatter)
def test_add(self, case): global Cookies my_logger.info('正在执行第{0}条用例{1}'.format(case.case_id, case.title)) url = ReadConfig().get('test_api', 'url_pre') + case.url my_logger.info('检查url接口地址:{0}'.format(url)) data = DoRegex().replace(case.data) data = json.loads(data) my_logger.info('检查请求参数{0}'.format(data)) my_logger.info('---------开始http请求-----------') resp = HttpRequest(method=case.method, url=url, data=data, cookies=Cookies) my_logger.info('---------结束http请求-----------') my_logger.info('请求接口结果是:{0}'.format(resp.get_json())) try: self.assertEqual(case.expected, int(resp.get_json()['code'])) Test_result = 'Pass' except AssertionError as e: Test_result = 'Failed' my_logger.error('出错了,{0}'.format(e)) raise e if resp.get_cookie(): Cookies = resp.get_cookie() my_logger.info('执行本条用例测试结果:{0}'.format(Test_result)) # 数据验证 # 当加标成功,根据借款人Id查询数据库load表是否有一条项目记录 if resp.get_json()['msg'] == '加标成功': expected = case.data seek_load_sql = 'select * from future.loan where MemberID={0} ORDER BY CreateTime DESC;'.format( Context.borrow_member_id) loan = self.mysql.fetch_one(seek_load_sql) if loan: # 查询标的记录非空 actual = { 'memberId': str(loan['MemberID']), 'title': loan['Title'], 'amount': int(loan['Amount']), 'loanRate': float(loan['LoanRate']), 'loanTerm': loan['LoanTerm'], 'loanDateType': loan['LoanDateType'], 'repaymemtWay': loan['RepaymemtWay'], 'biddingDays': loan['BiddingDays'] } self.assertDictEqual(expected, actual) my_logger.info('加标成功!查询load表新增一条项目记录') else: # 如果查询标的记录为空,测试不通过 raise AssertionError
def do_mysql(self, sql, data): config = eval(ReadConfig().read_config(project_path.db_conf_path, 'DATABASE', 'config')) cnn = mysql.connector.connect(**config) cursor = cnn.cursor() try: cursor.execute(sql, data) result = cursor.fetchone() return result except Exception as e: logger.error('查询数据出错了,报错是:%s' % e) finally: cursor.close() cnn.close()