def test_recharge(self, item): # 第一步:准备数据 url = conf.get('env', 'base_url') + item['url'] # *****************************动态替换参数************************************** # 动态处理需要进行替换的参数 # item['data'] = item['data'].replace('#member_id#', str(self.member_id)) item['data'] = replace_data(item['data'],TestRecharge) # print(item['data']) params = eval(item['data']) # 0000000000000000000V3版本的改动0000000000000 par_sign = HandleSign.generate_sign(self.token) params.update(par_sign) # 0000000000000000000V3版本的改动0000000000000 # ***************************************************************************** expected = eval(item["expected"]) method = item['method'].lower() # &&&&&&&&&&&&&&&请求接口之前查询用户的余额&&&&&&&&&&&&&&&& sql = 'SELECT leave_amount FROM futureloan.member WHERE mobile_phone="{}"'.format( conf.get("test_data", 'mobile')) # 执行sql查询余额 start_amount = self.db.find_one(sql)[0] print("用例执行之前,用户的余额:", start_amount) # 第二步:发送请求,获取接口返回的实际结果 response = requests.request(method=method, url=url, json=params, headers=self.headers) res = response.json() print("预期结果:", expected) print("实际结果:", res) # &&&&&&&&&&&&&&&请求接口之后查询用户的余额&&&&&&&&&&&&&&&& # 执行sql查询余额 end_amount = self.db.find_one(sql)[0] print("用例执行之后,用户的余额:", end_amount) # 第三步:断言 try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) # &&&&&&&&&&&&&&&校验数据库中用户余额的变化是否等于充值的金额&&&&&&&&&&&&&&&& if res['msg'] == 'OK': # 充值成功,用户余额的变化为充值金额 self.assertEqual(float(end_amount - start_amount), params['amount']) else: # 充值失败,用户余额变化为0 self.assertEqual(float(end_amount - start_amount), 0) except AssertionError as e: my_log.error("用例--【{}】---执行失败".format(item['title'])) my_log.exception(e) raise e else: my_log.info("用例--【{}】---执行通过".format(item['title']))
def test_invest(self, item): # 第一步:准备用例数据 url = conf.get('env', 'base_url') + item['url'] item['data'] = replace_data(item['data'], TestInvest) params = eval(item['data']) expected = eval(item['expected']) method = item['method'] # ----------------投资前查询数据库--------------------------------- # 查用户表的sql sql1 = 'SELECT leave_amount FROM futureloan.member WHERE id="{}"'.format( self.member_id) # 查投资记录的sql sql2 = 'SELECT id FROM futureloan.invest WHERE member_id="{}"'.format( self.member_id) # 查流水记录的sql sql3 = 'SELECT id FROM futureloan.financelog WHERE pay_member_id="{}"'.format( self.member_id) # if item['check_sql']: s_amount = self.db.find_one(sql1)[0] s_invest = self.db.find_count(sql2) s_financelog = self.db.find_count(sql3) # 第二步: 发生请求 response = requests.request(method=method, url=url, json=params, headers=self.headers) res = response.json() print("预期结果:", expected) print("实际结果:", res) # -------------------投资后查询数据库-------------------------------- if item['check_sql']: e_amount = self.db.find_one(sql1)[0] e_invest = self.db.find_count(sql2) e_financelog = self.db.find_count(sql3) # 第三步:断言 try: self.assertEqual(expected['code'], res['code']) self.assertIn(expected['msg'], res['msg']) # 断言实际结果中的msg是否包含 预期结果msg中的内容 if item['check_sql']: # 断言用户余额 self.assertEqual(params['amount'], float(s_amount - e_amount)) # 断言投资记录 self.assertEqual(1, e_invest - s_invest) # 断言流水记录 self.assertEqual(1, e_financelog - s_financelog) except AssertionError as e: my_log.error("用例--【{}】---执行失败".format(item['title'])) my_log.exception(e) raise e else: my_log.info("用例--【{}】---执行成功".format(item['title']))
def test_register(self, item): # 第一步、准备用例数据 # 1、接口地址 url = self.base_url + item['url'] # 2、接口请求参数 # 判断是否有手机号需要替换 if '#mobile#' in item['data']: setattr(TestRegister, 'mobile', self.random_mobile()) # TestRegister.mobile = self.random_mobile() item['data'] = replace_data(item['data'], TestRegister) params = eval(item['data']) # 3、请求头 # 4、获取请求方法 ,并转换为小写 method = item['method'].lower() # 5、用例预期结果 expected = eval(item['expected']) # 第二步:请求接口,获取返回实际结果 # requests.post(url=url, json=params, headers=self.headers) response = requests.request(method, url, json=params, headers=self.headers) res = response.json() # 查询数据库中该手机对应的账户数量 sql = 'SELECT * FROM futureloan.member WHERE mobile_phone="{}"'.format(params.get('mobile_phone', "")) count = self.db.find_count(sql) # if item['check_sql']: # sql = item['check_sql'].format(params.get('mobile_phone', "")) # count = self.db.find_count(sql) # 第三步:断言 print("预期结果:", expected) print("实际结果:", res) try: # 断言code和msg字段是否一致 self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) # 判断该用例是否需要进行数据库校验 if item['check_sql']: print('数据库中查询的的数量为:', count) self.assertEqual(1, count) except AssertionError as e: # 记录日志 my_log.error("用例--【{}】---执行失败".format(item['title'])) my_log.exception(e) # 回写结果到excel(根据公司中实际需求来决定用例结果写不写到excel中) # 注:回写excel需要花费大量的时间 raise e else: my_log.info("用例--【{}】---执行通过".format(item['title']))
def test_withdraw(self, item): # 第一步:准备数据 url = conf.get('env', 'base_url') + item['url'] # *****************************动态替换参数************************************** # 动态处理需要进行替换的参数 # item['data'] = item['data'].replace('#member_id#', str(self.member_id)) # print(item['data']) item['data'] = replace_data(item['data'], TestWithdraw) params = eval(item['data']) # ***************************************************************************** expected = eval(item["expected"]) method = item['method'].lower() # ************取现之前查询数据库用户账户金额****************** sql = 'SELECT leave_amount FROM futureloan.member WHERE mobile_phone="{}"'.format( conf.get("test_data", 'mobile')) # 执行sql查询余额 start_amount = self.db.find_one(sql)[0] print("用例执行之前,用户的余额:", start_amount) # 第二步:发送请求,获取接口返回的实际结果 response = requests.request(method=method, url=url, json=params, headers=self.headers) res = response.json() print("预期结果:", expected) print("实际结果:", res) # ************取现之后查询数据库用户账户金额****************** # 执行sql查询余额 end_amount = self.db.find_one(sql)[0] print("用例执行之后,用户的余额:", end_amount) # 第三步:断言 try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) # ************断言用户账户金额变化值,是否等于取现成功的金额****************** if item['check_sql']: self.assertEqual(params['amount'], float(start_amount - end_amount)) except AssertionError as e: my_log.error("用例--【{}】---执行失败".format(item['title'])) my_log.exception(e) raise e else: my_log.info("用例--【{}】---执行通过".format(item['title']))
def test_login(self, item): # 第一步、准备用例数据 # 1、接口地址 url = self.base_url + item['url'] # 2、接口请求参数 item['data'] = replace_data(item['data'], TestLogin) params = eval(item['data']) # 3、请求头 # 4、获取请求方法 ,并转换为小写 method = item['method'].lower() # 5、用例预期结果 expected = eval(item['expected']) # 第二步:请求接口,获取返回实际结果 # requests.post(url=url, json=params, headers=self.headers) response = requests.request(method, url, json=params, headers=self.headers) res = response.json() # 第三步:断言 print("预期结果:", expected) print("实际结果:", res) try: # 断言code和msg字段是否一致 # self.assertEqual(expected['code'], res['code']) # self.assertEqual(expected['msg'], res['msg']) # 使用自定义的方法进行断言 self.assertDictIn(expected, res) except AssertionError as e: # 记录日志 my_log.error("用例--【{}】---执行失败".format(item['title'])) my_log.exception(e) # 回写结果到excel(根据公司中实际需求来决定用例结果写不写到excel中) # 注:回写excel需要花费大量的时间 raise e else: my_log.info("用例--【{}】---执行通过".format(item['title']))
def test_add(self, item): # 第一步:准备数据 url = conf.get('env', 'base_url') + item['url'] item['data'] = replace_data(item['data'], TestAdd) params = eval(item['data']) expected = eval(item['expected']) method = item['method'] # 调用接口之前:查询数据库该用户的项目数量 sql = "SELECT * FROM futureloan.loan WHERE member_id={}".format( self.member_id) start_count = self.db.find_count(sql) print("调用接口之前的项目个数:", start_count) # 第二步:调用接口,获取实际结果 response = requests.request(method=method, url=url, json=params, headers=self.headers) res = response.json() # 调用接口之后:查询数据库该用户的项目数量 end_count = self.db.find_count(sql) print("调用接口之后的项目个数:", end_count) # 第三步: 断言 try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) # 根据添加项目是否成功,来对数据库进分别的校验 if res['msg'] == 'OK': self.assertEqual(end_count - start_count, 1) else: self.assertEqual(end_count - start_count, 0) except AssertionError as e: my_log.error("用例--【{}】---执行失败".format(item['title'])) my_log.exception(e) raise e else: my_log.info("用例--【{}】---执行成功".format(item['title']))