1.初级版本,pytest断言成功和失败,这边接口都是另外封装的,只需要传indata参数和cookies
1 @pytest.mark.parametrize("casename,indata,except_result", get_excel_data("合同分类", "contract_types_del")) 2 def test_delete_contract_types1(self, casename, indata, except_result, before_add_contract_types): 3 ret = Api_Contract_types().del_contract_types(indata, before_add_contract_types[1]) 4 print("用例编号》》》", casename) 5 # print(ret) 6 try: 7 # 如果返回响应结果有error,执行error判断,没有执行删除成功判断 8 if ret.get('error') != None: 9 assert ret['error']['message'] == except_result['error']['message'] 10 assert ret['error']['error'] == except_result['error']['error'] 11 12 else: 13 assert ret == except_result 14 except Exception as e: 15 log.error("断言出错,错误信息:{}".format(e)) 16 # 输出错误信息 17 print("错误原因:", e) 18 raise
2.进阶版本,我就偷懒了,放另一个接口代码,下面断言Excel中的
失败:message,error,
成功:name,amount,receive_payment_type,amount_type,create_date字段。这个接口跑了几十个用例,暂时没啥问题,欢迎大佬指正不足之处!
备注:name字段这边有个bug,我加这个抛异常是为了区分响应结果和Excel的预期结果没有name导致的nokey name报错,其实可以不写。
1 #添加合同,固定销售合同分类id,销售部id,签约对象张三id 2 @pytest.mark.parametrize("casename,indata,except_result",get_excel_data("合同","addcontracts")) 3 def test_add_contract1(self,casename,indata,except_result,init_add_contract_type,init_add_acounnt): 4 indata['contract_type']=init_add_contract_type[0] 5 indata['othercompany']=init_add_acounnt[0] 6 indata['company_id']=init_add_contract_type[1] 7 print("用例编号》》》》", casename) 8 ret=Api_Contract().add_contract(indata,init_add_contract_type[2]) 9 try: 10 # 如果返回响应结果有error,执行error判断,没有则执行成功的判断 11 if ret.get('error') != None: 12 assert ret['error']['message'] == except_result['error']['message'] 13 assert ret['error']['error'] == except_result['error']['error'] 14 else: 15 #判断响应结果中是否包含name,不包含抛异常找不到name参数 16 if ret.get('value')[0].get('name')!=None: 17 assert ret['value'][0]['name'] == except_result['name'] 18 #如果响应结果中包含amount_type,就做断言是否和预期结果相等 19 if ret.get('value')[0].get('amount_type')!=None: 20 assert ret['value'][0]['amount_type'] == except_result['amount_type'] 21 # 如果响应结果中包含amount,就做断言是否和预期结果相等 22 elif ret.get('value')[0].get('amount')!=None: 23 assert ret['value'][0]['amount'] == except_result['amount'] 24 # 如果响应结果中包含receive_payment_type,就做断言是否和预期结果相等 25 elif ret.get('value')[0].get('receive_payment_type')!=None: 26 assert ret['value'][0]['receive_payment_type'] == except_result['receive_payment_type'] 27 elif ret.get('value')[0].get('create_date')!=None: 28 assert ret['value'][0]['create_date'] == except_result['create_date'] 29 else: 30 raise Exception("返回响应body中没有找到name参数") 31 32 Api_Contract().del_contract({"contracts_id":ret['value'][0]['_id']},init_add_contract_type[2]) 33 34 except Exception as e: 35 log.error("断言出错,错误信息:{}".format(e)) 36 # 输出错误信息 37 print("错误原因:", e) 38 raise