1.某接口脚本没通过,报错信息如下:
Keyword ‘AutoTestLib_Common.Create Dict’ expected 3 non-keyword arguments, got 0.;methodName方法名,常量:deviceFingerPrint??
原因:
Source文件下的User Keyword文件,忘记写入前三个固定参数,因此报错。
前提:
根据接口文档提供的信息,发送的请求参数按照3+n的形式去定义,3个固定,n个随机。
‘AutoTestLib_Common.Create Dict‘方法中按照以上前提写了代码
def createDict(self,serviceName,bizType,methodName,callback=False,**kws):
# dst_str = '{"bizType":"123","params":{"mobile":"123456","idCard":"123456","name":"zhangsan"},"serviceName":"123","methodName":"123"}'
dst_str = '''{'''
if serviceName!='null':
dst_str = dst_str + '''"serviceName":"%s",'''%serviceName
if bizType!='null':
dst_str = dst_str + '''"bizType":"%s",'''%bizType
if methodName!='null':
dst_str = dst_str + '''"methodName":"%s",'''%methodName
dst_str = dst_str + '''"params":{'''
# dst_str = '''{"bizType":"%s","serviceName":"%s","methodName":"%s","params":{'''%(bizType,serviceName,methodName)
for key,value in kws.items():
if value !='null':
dst_str = dst_str + '"%s":"%s"'%(key,value) + ','
dst_str = dst_str[:-1] + '}}'
2.某接口脚本没通过,报错信息如下:
Keyword ‘AutoTestLib_Common.Create Dict’ got positional argument after named arguments.
原因:
User Keyword文件中的变量名排序错误或变量名书写有误,不够仔细。
3.xx力14-17,3个接口;
前提:
需要短信验证码,认证接口要单独拿出,手动认证20分钟后,才能请求。
思路:
考虑从后台服务器日志去拿取验证码,但由于是第三方接口所以暂时没做。
如果一定要做,可以考虑手机收到后在脚本中填写,再去请求。
4.有的接口并非前3个必填,与最开始定义的脚本不一致。
此时会报错:
Keyword ‘AutoTestLib_Common.Create Dict’ expected 3 non-keyword arguments, got 2.
可以看到此时最初方法中的逻辑已经不能满足业务需要,修改代码逻辑如下:
def createDict(self,serviceName,bizType,methodName,callback=False,**kws):
dst_str = '{"bizType":"123","params":{"mobile":"123456","idCard":"123456","name":"zhangsan"},"serviceName":"123","methodName":"123"}'
dst_str = '''{"bizType":"%s","serviceName":"%s","methodName":"%s","params":{'''%(bizType,serviceName,methodName)
for key,value in kws.items():
if value !='null':
dst_str = dst_str + '"%s":"%s"'%(key,value) + ','
dst_str = dst_str[:-1] + '}}'
self.jsonData = dst_str
用本人真实信息去请求都code=3004
结论:
确实是接口有问题
5.某接口报错:
TypeError: list indices must be integers, not str
原因:
接口请求参数格式发生变化,JSON串中增加了一个list:
data": {
"records": [
{
"user_name": "张三",
"user_credentials_type": "0",
"user_credentials_no": "123",
"order_no": "123",
"biz_type": "123",
"order_status": "123",
"create_amt": "123.00",
"pay_month": "1",
"gmt_ovd_date": "2015-05-01 00:00:00",
"overdue_days": "1",
"overdue_amt": "1123.79",
"gmt_pay": "",
"memo": ""
},
{
"user_name": "李四",
"user_credentials_type": "0",
"user_credentials_no": "123456",
"order_no": "123456",
"biz_type": "1",
"order_status": "04",
"create_amt": "123.00",
"pay_month": "123",
"gmt_ovd_date": "2015-05-01 00:00:00",
"overdue_days": "",
"overdue_amt": "",
"gmt_pay": "2015-04-30 11:58:33",
"memo": ""
}
]
}
解决方式:
新增了List的索引,因此需要修改脚本中的变量名称书写格式,在record后面加上“[0]”用来代表该元素在List中的位置:
从${data['item']['sendDataFeedback']['serviceName']}
改为${data['item']['sendDataFeedback']['params']['data']['records'][0]['create_amt']}
6.对于同一个接口,根据请求内容的不同,返回内容不一样,应该如何编写用户关键字?
意思就是:
属性名 类型 描述
params JSONObject 参数
typeId Integer 必传:1-车架号vin,2-车品牌;3-车系;4-车型
bizType String 业务类型:固定值(B004)
vin String 17位车架号,TypeId为1时,必传
token String typeId为2时,必传
brandId String typeId为3时,必传
这里的后3个参数会根据typeId的不同而确定是否传参,所以需要在代码里根据字段是否为空,加了一个条件去判断:
def createDict(self,serviceName,bizType,methodName,callback=False,**kws):
# dst_str = '{"bizType":"123","params":{"mobile":"123456","idCard":"123456","name":"1234"},"serviceName":"123","methodName":"123"}'
dst_str = '''{'''
if serviceName!='null':
dst_str = dst_str + '''"serviceName":"%s",'''%serviceName
if bizType!='null':
dst_str = dst_str + '''"bizType":"%s",'''%bizType
if methodName!='null':
dst_str = dst_str + '''"methodName":"%s",'''%methodName
dst_str = dst_str + '''"params":{'''
# dst_str = '''{"bizType":"%s","serviceName":"%s","methodName":"%s","params":{'''%(bizType,serviceName,methodName)
for key,value in kws.items():
if value !='null':
dst_str = dst_str + '"%s":"%s"'%(key,value) + ','
dst_str = dst_str[:-1] + '}}'
self.jsonData = dst_str
7 有3个接口报2000,但是用jmeter跑的时候是200;
原因:
Userkeyword里面的参数顺序配置错误导致传参错误;
8 某接口,jmeter:200,rf:code=2002
原因:
从上一个case中的userKeyword中的关键字copy过来之后忘记修改直接使用了
9 某接口:需要上传图片文件作为请求的一部分,属于校验参数之一;
思路:
写个方法来调用图片
10 某接口:预期结果是失败,返回的信息是失败,但该信息存储在json中的下一级data串里面,脚本中应该如何去做校验?
{code=200,data={"success":false,"code":123,"error":"POLICE_IDENTITY_CHECK_ID_INVALID","errorDesc":"身份证验证查询输入身份证不合法"}}
**思路**:
在脚本中使用rf源生库的关键字,拆分出该data串,然后校验;
**解决方式:**
${dataJson} To Json ${jsondata['data']}
Should Be Equal ${dataJson['code']} ${123}
Should Not Be Equal ${dataJson['code']} ${200}
11 某接口返回结果:
msg=数据处理系统异常;code=123
原因:
用户关键字里面的参数顺序和传参顺序写反了
12 大蜂查询,参数很多,逐个手写太慢,需要考虑是否有别的办法
思路:
暂时没想到:)
13 支付结算协会:回调接口,参数格式发生了变化,接口文档中,此处不再采用3+n的格式来请求了
思路:
在原有的方法中(前文)通过参数去判断是否为False,然后在新写的方法里完成:
解决方法:
def createDict_callback(self,targetMemberNo,version,**kws):
dst_str = '''{'''
if targetMemberNo!='null':
dst_str = dst_str + '''"targetMemberNo":"%s",'''%targetMemberNo
if version!='null':
dst_str = dst_str + '''"version":"%s",'''%version
dst_str = dst_str + '''"data":{'''
for key,value in kws.items():
if value !='null':
dst_str = dst_str + '"%s":"%s"'%(key,value) + ','
dst_str = dst_str[:-1] + '}}'
self.jsonData = dst_str
点滴记录
感谢团队的默默帮助
感恩,传递