初使用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做接口测试二——处理响应数据的更多相关文章

  1. 使用robotframework做接口测试之一——准备工作

    最近发现做接口测试的朋友越来越多了,打算写一个系列的rf+requests做接口测试(主要是Http接口)的文档,可以帮助新入门的同学对接口测试有个大概的了解,同时也是敦促自己做总结的一种手段.希望经 ...

  2. 使用robotframework做接口测试5——一个用例中调多个接口

    凡是涉及一点点有接口关联的,都可能下一个接口需要上一个接口的某个返回值作为入参,最直接的例子,就是登录依赖.用接口做业务性的测试,也绝对离不开接口依赖的,业务都是一系列接口串联的结果,有时候一个接口操 ...

  3. 使用robotframework做接口测试4——搞定接口签名及密码加密

    接口签名是我做接口测试撞到的第一块石头,刚到新公司,本来想默默憋出来一个大招,然后碰到了签名接口,直接给跪了.于是只好找开发哥哥帮忙,把签名算法的java文件拿到,一行行对着用python实现了一遍. ...

  4. 使用robotframework做接口测试三——保持登录状态

    调用登录接口登录了,其他的接口怎么保持登录状态呢?  首先来看一看,web端或者说客户端是怎么样用cookie/token等保持登录状态的.一般来说,cookie都会在登录接口由服务端返回,而且会是在 ...

  5. jmeter响应数据Unicode编码转换为汉字

    2018-07-09     10:24:34 每次用jmeter做接口测试时,响应信息中文总是显示Unicode编码格式,每次都要在网上寻找这一段转换的代码,但是我发现在网上找这段代码有点麻烦,像我 ...

  6. python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)

    简介 上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试. 什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统 ...

  7. jsonpath对json数据进行分析校验做接口测试

    在做接口测试的时候, 我们需要对返回的数据进行分析校验, 一般返回的都是json格式的数据, 怎么来解析校验呢? 之前有看过使用递归遍历json数据的, 然后找到了jsonpath, 可以很方便的对j ...

  8. jmeter使用正则表达式从上一个http响应数据里提取关键字传递给下一个http请求(二)

    通过jmeter从表格批量读取数据(一)(http://www.cnblogs.com/lelexiong/p/8728993.html)介绍了从表格批量读取数据,读取数据之后,如果要提取响应数据里面 ...

  9. jmeter对响应数据做断言

    单独校验某个接口中的某个字段时,断言就相当于检查点 添加http请求,输入路径url

随机推荐

  1. C语言构建小型Web服务器

    #include <stdio.h> #include <sys/socket.h> #include <stdlib.h> #include <string ...

  2. Python—数据类型之字典(Dict)

    其它数据类型转成字典 arr1 = ['jack', 'rose', 'marry'] arr2 = [68, 85, 66] dict1 = dict(zip(arr1, arr2)) print( ...

  3. vue中点击按钮自动截图并下载图片

    点击一个按钮,截取对应区域的界面,才对截取的界面进行裁切并下载 下载    html2canvas    npm install html2canvas  --save 引用 : import htm ...

  4. 基于node.js的websocket上传小功能

    一.node.js 在目录里新建index.js var ws = require("nodejs-websocket"); console.log("开始建立连接... ...

  5. Qbxt AH d4 && day-6

    /* 这两天考试直接呵呵了. 赶脚对qbxt的题目无感. 同时也发现了自己的一些问题. 一些思路题总是自己傻逼的挖个坑跳进去. 这两天场场倒数ORZ. 始终是最弱的.... 然后NOIP光荣三等奖了吧 ...

  6. Android 内存 - 获取单个应用内存限制

    方法一: adb shell getprop | grep dalvik.vm.heapgrowthlimit [dalvik.vm.heapgrowthlimit]: [64m] 方法二: Acti ...

  7. 使用matplotlib绘制常用图表(1)

    #导入相关包from matplotlib import pyplot as plt import matplotlib from matplotlib import font_manager #初始 ...

  8. Makefile简单编写实例

    介绍一下Makefile的简单编写例子. 编写Makefile的规则就是: 目标文件:依赖文件 (tab)编译规则 现在我有一个文件目录结构为: 解释一下这几个文件.首先我创建makefile目录,底 ...

  9. Spring Boot教程(四十一)LDAP来管理用户信息(1)

    LDAP简介 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的数据库系统,其专门针对读 ...

  10. 树状数组(BIT)

    树状数组 树状数组是在线段树的结构上改造而来数据结构,主要用于完成: 给定一个初始值全为0的数列 ①给定i,计算返回a1+a2+--+ai的值 ②给定i和x,执行ai+=x BIT的求和 ll sum ...