def test_invest(self, cases): # 第一步:准备数据 # 获取用例行号 row = cases.caseid + 1 # 获取请求参数 par = Parameterization.parmse_all(cases.datas) # 获取url invest_url = do_yuml.read_yuml('request', 'url') + cases.url # 获取预期结果 expected = cases.expected # 获取标题 msg = cases.title # 第二步:调用投资接口,进行投资 res = self.request.send(invest_url, method=cases.method, data=par) actuall = res.json() # 第三步:比对预期与实际结果 try: self.assertEqual(expected, actuall.get('code'), msg=msg) except AssertionError as e: # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml('msg', 'fail_result')) do_log.error('{},执行测试用例的具体异常为{}'.format(msg, e)) raise e else: if 'token_info' in res.text: token = actuall['data']['token_info']['token'] # 在获取响应结果的字典数据,从中查找token_info new_header = {"Authorization": "Bearer " + token} # 获取请求的token值 self.request.add_hesders(new_header) # 将获取到的token值加更新到请求头中 # check_sql=cases.check_sql # if check_sql: # sql=Parameterization.parmse_all(check_sql) # res_sql=self.do_sql.run(sql) # loan_id=res_sql['id'] # setattr(Parameterization,'a',loan_id) # # 获取loan_id if cases.caseid == 2: loan_id = actuall.get('data').get('id') # 获取响应的json数据中的data,再获取它下面的id setattr(Parameterization, 'loan_id', loan_id) ## 动态创建属性的机制, 来解决接口依赖的问题 # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml('msg', 'success_result')) do_log.info('{},测试用例执行成功'.format(msg)) finally: # 将响应的结果反写到excel的actall这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'case_result'), value=res.text)
def test_login(self, cases): #第一步:准备工作 #获取用例行号 row = cases.caseid + 1 #获取参数 par = Parameterization.parmse_all(cases.datas) #获取url login_url = do_yuml.read_yuml('request', 'url') + cases.url #获取预期结果 expected = json.loads( cases.expected, encoding='utf8') #因为用例是json格式的字符串通过loads转换为Python中的字典 #获取用例标题 msg = cases.title #第二步:调用登录接口发送请求 res = self.request.send(login_url, method=cases.method, data=par) actuall = res.json() #第三步:预期与实际进行对比 try: #用例中的多断言对比就是按照顺序,在异常处理中进行多次断言比较 self.assertEqual(expected['code'], actuall['code'], msg=msg) self.assertEqual(expected['msg'], actuall['msg'], msg=msg) except AssertionError as e: # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml( 'msg', 'fail_result')) do_log.error("{},执行测试的具体的异常为:{}\n".format(msg, e)) raise e else: self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml( 'msg', 'success_result')) do_log.info('{},执行用例通过'.format(msg)) finally: # 将响应的结果反写到excel的actall这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml( 'excel', 'case_result'), value=res.text)
def test_add(self, cases): # 第一步:准备数据 # 获取用例行号 row = cases.caseid + 1 # 获取请求参数 par = Parameterization.parmse_all(cases.datas) # 获取url add_url = do_yuml.read_yuml('request', 'url') + cases.url # 获取预期结果 expected = cases.expected # 因为用例是json格式的字符串通过loads转换为Python中的字典 # 获取标题 msg = cases.title # 第二步:发送加标请求,获取响应结果 res = self.request.send(add_url, method=cases.method,data=par) actuall = res.json() # 将响应结果转换为json格式的数据 # 第三步:对比预期与实际结果 try: self.assertEqual(expected, actuall.get('code'), msg=msg) except AssertionError as e: # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml('msg', 'fail_result')) do_log.error('{},断言的具体异常为{}\n'.format(msg, e)) raise e else: if cases.caseid == 2: # 默认登录接口登录成功 # 取值登录的token token = actuall['data']['token_info']['token'] # 更新请求头 new_header = {'Authorization': 'Bearer ' + token} # 将更新的请求头加的默认的请求头中,有则更新,无则添加 self.request.add_hesders(new_header) self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml('msg', 'success_result')) do_log.info('{},测试用例执行通过'.format(msg)) finally: # 将响应的结果反写到excel的actall这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'case_result'), value=res.text)
def test_register(self,cases): #获取用例的行号 row=cases.caseid+1 #获取用例的参数 par=Parameterization.parmse_all(cases.datas) #获取用例的url register_url=do_yuml.read_yuml('request','url')+cases.url #获取用例的期望结果 expected=cases.expected #获取用例标题 msg=cases.title #第二步:调用请求接口,发送请求,执行注册 res=self.do_request.send(url=register_url,method=cases.method,data=par,is_json=True)#这里的method=cases.method跟is_json=True因为是默认参数,可以省略不写 data_json=res.json()#将响应报文转化为json的字典数据 #第三步:预期与实际结果进行比较 try: # assertEqual第三个参数为用例执行失败之后的提示信息 # assertEqual第一个参数为期望值, 第二个参数为实际值 self.assertEqual(expected,data_json['code'],msg=msg)#预期与实际的2个code进行对比 except AssertionError as e: #将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel','result'), value=do_yuml.read_yuml('msg','fail_result')) do_log.error("{},执行测试的具体的异常为:{}\n".format(msg,e)) raise e else: # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml('msg', 'success_result')) do_log.info('{},执行用例通过'.format(msg)) finally: # 将响应的结果反写到excel的actall这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'case_result'), value=res.text)
def test_rechargd(self, cases): ##第一步:准备工作 #获取用例行号 row = cases.caseid + 1 #获取参数 par = Parameterization.parmse_all(cases.datas) #获取url rechargd_url = do_yuml.read_yuml('request', 'url') + cases.url #获取预期结果 expected = cases.expected #获取用例标题 msg = cases.title check_sql = cases.check_sql # 取出check_sql if check_sql: # 如果check_sql不为空, 则代表当前用例需要进行数据校验 check_sql = Parameterization.parmse_all( check_sql) # 将check_sql进行参数化,根据sql查找数据库充值前的金额 mysql_data = self.do_sql.run(check_sql) # 执行sql amount_before = float( mysql_data['leave_amount']) # 不是float类型, 也不是int类型, 是decimal类型 # 由于使用float转化之后的数, 有可能小数位数超过2位, 需要使用round保留2位小数 amount_before = round(amount_before, 2) #第二步:调用充值接口发送请求 res = self.request.send(rechargd_url, method=cases.method, data=par) actuall = res.json() #第三步:预期与实际进行对比 try: #用例中的多断言对比就是按照顺序,在异常处理中进行多次断言比较 self.assertEqual(expected, actuall['code'], msg=msg) if check_sql: check_sql = Parameterization.parmse_all( check_sql) # 前面的断言成功,获取充值后的金额 mysql_data = self.do_sql.run(check_sql) # 执行sql amount_after = round(float(mysql_data['leave_amount']), 2) # 不是float类型, 也不是int类型, 是decimal类型 actual_amount = round(amount_after - amount_before, 2) #充值后的金额减去充值钱的金额获取差值,保留2位小数进行断言 one_dict = json.loads(par, encoding='utf8') #将json的字符串转化为Python的字典 recharge_amount = one_dict['amount'] #获取充值的金额 self.assertEqual(recharge_amount, actual_amount, msg="实际充值金额与数据库存储金额不符") except AssertionError as e: # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml( 'msg', 'fail_result')) do_log.error("{},执行测试的具体的异常为:{}\n".format(msg, e)) raise e else: # 默认充值接口的第二条测试用例登录成功 if cases.caseid == 2: # 取值登录的token token = actuall['data']['token_info']['token'] # 更新header的请求头 new_header = {'Authorization': 'Bearer ' + token} self.request.add_hesders(new_header) # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml( 'msg', 'success_result')) do_log.info('{},执行用例通过'.format(msg)) finally: # 将响应的结果反写到excel的actall这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml( 'excel', 'case_result'), value=res.text)