【robotframework】部分問題及解決思路總結(截止2018.03)

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

點滴記錄
感謝團隊的默默幫助
感恩,傳遞

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章