使用robotframework做接口测试二——处理响应数据
初使用RequestsLibrary做接口测试时,你会不会感到困惑,为什么会有${resp.content}, ${resp.status_code}这样的写法,这个status_code什么鬼,f5查的时候怎么没说明这个东西,为什么写Demo的人知道可以这么写,我少写个’_’可不可以,还有其它啥高端玩法是我不知道的,这玩意的使用说明到底保存在哪啊喂!
说到这个,我们先来了解一下,返回的${resp}是个什么类型的对象,在rf上用个巧妙的方法查看:

运行这段脚本,第4行的打印结果是:INFO : <class 'requests.models.Response'>
从结果可以看出${resp}是一个类对象,源码可在requests/models/Response查看,对象句点操作一般是取对象属性,顺藤摸瓜,找出该类的所有属性,第6行打印结果:
['__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编码
一、状态码
状态码什么的,百度上讲的肯定比我讲得清楚,我就不讲了。
另外,一般来说,系统内部会有一个自定义的响应码,与http的状态码不可混淆。
这里主要讲一下RequestsLibrary中对30X状态码的处理,默认情况下,RequestsLibrary的重定向是开着的,也就是说,如果请求返回的状态码为302,它会自动帮你访问重定向地址,并最终返回重定向地址的状态码。具体画风如何,请查看Demo:

二、处理一个简单的响应
响应body:
{
"origin": "183.16.189.96"
}
不多说了,看图:第8行关键字需导入Collections库

三、处理多层级的响应body
这是一个一般复杂的响应body,多层级的json,实际中,你可能要取到某个nickName为“
test1”的数据并校验。
{
"api": "api.name",
"v": "1.0",
"code": "10000",
"error_msg": "success",
"data": {
"userlist": [{
"uid": "94901",
"nickName": "test1",
}, {
"uid": "1010640",
"nickName": "test2",
}, {
"uid": "1012130",
"nickName": "test3",
}]
}
}
还是希望大家有点python基础,这种json返回格式,一层层地来抽丝剥茧,{}为字典,用字典运算符,为list,用列表运算符,假设上面那个json是我的响应body。
取第一个nickName的值应该是这样:${resp.json()[‘data’][‘userlist’][0][‘nickName’]},log该变量,值应为:test1。用大白话解释这个表达式就是:把最外面的字典里的data的值里边的userlist的值的第一个字典元素取出来,再对这个字典里的nickName的值。好吧,我已经尽我最大能力翻译了。
另外还有人,可能想一次把所有列表中的nickName取了,也有个简单的办法:


这个用法有点炫酷,细说起来可以整成一个熟练使用rf+evaluate装逼指南系列。这是题外话了。对于初学者,还是1 要懂点python, 2 要懂rf和python之间的表达切换,rf里最好的调试语句是log。建议多写多log。
使用robotframework做接口测试二——处理响应数据的更多相关文章
- 使用robotframework做接口测试之一——准备工作
最近发现做接口测试的朋友越来越多了,打算写一个系列的rf+requests做接口测试(主要是Http接口)的文档,可以帮助新入门的同学对接口测试有个大概的了解,同时也是敦促自己做总结的一种手段.希望经 ...
- 使用robotframework做接口测试5——一个用例中调多个接口
凡是涉及一点点有接口关联的,都可能下一个接口需要上一个接口的某个返回值作为入参,最直接的例子,就是登录依赖.用接口做业务性的测试,也绝对离不开接口依赖的,业务都是一系列接口串联的结果,有时候一个接口操 ...
- 使用robotframework做接口测试4——搞定接口签名及密码加密
接口签名是我做接口测试撞到的第一块石头,刚到新公司,本来想默默憋出来一个大招,然后碰到了签名接口,直接给跪了.于是只好找开发哥哥帮忙,把签名算法的java文件拿到,一行行对着用python实现了一遍. ...
- 使用robotframework做接口测试三——保持登录状态
调用登录接口登录了,其他的接口怎么保持登录状态呢? 首先来看一看,web端或者说客户端是怎么样用cookie/token等保持登录状态的.一般来说,cookie都会在登录接口由服务端返回,而且会是在 ...
- jmeter响应数据Unicode编码转换为汉字
2018-07-09 10:24:34 每次用jmeter做接口测试时,响应信息中文总是显示Unicode编码格式,每次都要在网上寻找这一段转换的代码,但是我发现在网上找这段代码有点麻烦,像我 ...
- python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)
简介 上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试. 什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统 ...
- jsonpath对json数据进行分析校验做接口测试
在做接口测试的时候, 我们需要对返回的数据进行分析校验, 一般返回的都是json格式的数据, 怎么来解析校验呢? 之前有看过使用递归遍历json数据的, 然后找到了jsonpath, 可以很方便的对j ...
- jmeter使用正则表达式从上一个http响应数据里提取关键字传递给下一个http请求(二)
通过jmeter从表格批量读取数据(一)(http://www.cnblogs.com/lelexiong/p/8728993.html)介绍了从表格批量读取数据,读取数据之后,如果要提取响应数据里面 ...
- jmeter对响应数据做断言
单独校验某个接口中的某个字段时,断言就相当于检查点 添加http请求,输入路径url
随机推荐
- Linux之yum软件管理
YUM yum = Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包.它能自动解决包的倚赖性问题. 它能便于管理大量系统的更新问题 yum特点 *可以 ...
- 微信小程序aes前后端加密解密交互
aes前后端加密解密交互 小程序端 1. 首先引入aes.js /** * [description] CryptoJS v3.1.2 * [description] zhuangzhudada so ...
- php类知识---最疯狂的魔术方法serialize,_sleep,__wakeup,unserialize,__autoload,__clone
serialize-----把实例化的对象写入文件 __sleep 调用serialize时触发 <?php class mycoach { public function __construc ...
- QSettings 介绍
https://blog.csdn.net/liang19890820/article/details/50513695 QSettings settings(“./test.ini”, QSetti ...
- spring-boot + mybatis + mysql+shiro 整合
参考地址 https://blog.csdn.net/clj198606061111/article/details/82948757 https://blog.csdn.net/ityouknow/ ...
- gulp 使用指南
只放一个链接是不是太不负责任 https://gulpjs.com/ https://blog.csdn.net/guang_s/article/details/84664769 gulp安装过程在此 ...
- flask框架(十): 闪现
一:闪现flash基本用法 # -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/5 9:34 from flask impo ...
- 2019牛客暑期多校训练营(第一场)H 线性基+计算贡献
题意 给n个整数,求满足子集异或和为0的子集大小之和. 分析 将问题转化为求每个元素的贡献次数之和. 先对n个数求线性基,设线性基大小为r,即插入线性基的数字个数为r,可以分别计算线性基内数的贡献和线 ...
- jdk中使用的设计模式
在JDK(Java Development Kit)类库中,开发人员使用了大量设计模式,正因为如此,我们可以在不修改JDK源码的前提下开发出自己的应用软件,研究JDK类库中的模式实例也不失为学习如何使 ...
- R-三次指数平滑法实践
data <- read.csv("H://day_shuaka.csv") raw0 <- data[359:752,] raw0$weekday <- as. ...