【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

点滴记录
感谢团队的默默帮助
感恩,传递

你可能感兴趣的:(python,测试脚本,自动化测试,Robotframework,接口测试)