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
點滴記錄
感謝團隊的默默幫助
感恩,傳遞