基础篇:https://www.jianshu.com/p/fe368461e3a0
1、RobotFramework 接口测试-不定参数问题
用RobotFramework 做接口自动化,这个时候,如果你不确定需要传几个参数该怎么办?
或者接口里面的参数太多,我们参数化的时候,太麻烦
test #test为keyword
[Arguments] ${info}
${data} create dictionary
:FOR ${key} IN @{info.keys()} #获取info字典中key的所有值
\ set to dictionary ${data} ${key} ${info['${key}']}
log ${data}
test01
${dict} create dictionary a=1 b=2 c=3
${dict2} create dictionary
test ${dict}
test ${dict2}
将${dict}传递进test中。运行test01,输出:
${dict} = {"a": "1", "b": "2", "c": "3"}
${data} = {}
{"a": "1", "b": "2", "c": "3"}
${dict} = {}
${data} = {}
{}
2、Robot Framework分层(网上资料少,自己分出来的,很多不足,希望大家一起讨论)
总结下就这张图了。@~@
3.序列化非ascii码中文
>>> ${json}= set variable ${resp.json()}
${json} = {u'msg': u'\u53c2\u6570shopId\u5fc5\u586b'}
>>> ${json} Dumps ${json} ensure_ascii=${False}
${json} = {"msg": "参数shopId必填"}
4.post请求 需要传递中文数字时:
如果请求数据类型为json且带有中文,传递过去会出现乱码。解决办法两部:
1.${header} Create Dictionary Content-Type=application/x-www-form-urlencoded #需要加这段
2.${info} Dumps ${info} ensure_ascii=${False} #传递中文需要转译 #${info}为上图蓝色区域
create session api ${Url["xfdb"]} #${Url["xfdb"]}代表某个url
${resp} post request api ${Url["xfdb1"]} carDealerApplyParam=${info} headers=${header}
如图1:这样的方式传递是不需要使用上述步骤
5.在RF中调用.py文件,使用文件中的方法。
方法一:
输出:
注意:这种情况是通过suit全局调用了此py文件,每个case中都可以用,但是有时候只需要单个case中用到可以用方法二。
方法二:
如图2所示:使用import library 文件地址
6.封装自己的关键字
1. mac电脑:在python安装路径 :/Library/Python/2.7/site-packages下创建一个自己的文件夹,用于放自定义的library库,例如:yyqRFLibrary。
1.创建__init__.py:
2.创建test.py:
3.在RF上导入Library
4.导入之后可以在查看关键字的用法(mac:fn+F5):
例子:
这样就封装了一个自己的关键字。
7.传递参数的结构
总结:params后面的参数是放在Query String中。data后面的参数是放在Form。必须加headers。否则data的参数放不进去
8.请求的数据是一串复杂的json
比如:
如图一。如果要传递进请求中,可能需要不断的拼接,创建list,很繁琐。可以直接使用上节提到的evaluate。
9.处理响应数据
${resp} post request api ${Url["xfdb1"]} carDealerApplyParam=${info} headers=${header}
${resp} 可以理解为一个接口响应回来的对象。可以调用其内部的许多方法实现输出不同的数据。
['__attrs__', '__bool__', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getstate__', '__hash__', '__init__', '__iter__', '__module__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_content', '_content_consumed', 'apparent_encoding', 'close', 'connection', 'content', 'cookies', 'elapsed', 'encoding', 'headers', 'history', 'is_permanent_redirect', 'is_redirect', 'iter_content', 'iter_lines', 'json', 'links', 'ok', 'raise_for_status', 'raw', 'reason', 'request', 'status_code', 'text', 'url']
content: 响应body的内容,二进制编码,如果返回只有文本内容,和text差不多
cookies:响应回写的cookies,cookieJar类对象
headers: 响应头内容
json(): 响应body内容,json格式
status_code: 状态码
text: 响应body的内容,默认unicode编码
log ${resp.json()} #输出响应的json格式数据
${json1} Dumps ${json} ensure_ascii=${False} #这个json数据带中文时,可以使用此方法让其显示中文