zoukankan      html  css  js  c++  java
  • 使用robotframework做接口测试二——处理响应数据

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

    2-1看resp类型.png



    运行这段脚本,第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:

    2-3重定向.png


    二、处理一个简单的响应
    响应body:
    {
      "origin": "183.16.189.96"
    }

    不多说了,看图:第8行关键字需导入Collections库

    2-2普通响应.png



    三、处理多层级的响应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取了,也有个简单的办法:

    2-4处理多重json.png
    2-5结果.png


    这个用法有点炫酷,细说起来可以整成一个熟练使用rf+evaluate装逼指南系列。这是题外话了。对于初学者,还是1 要懂点python, 2 要懂rf和python之间的表达切换,rf里最好的调试语句是log。建议多写多log。

  • 相关阅读:
    UOS安装gitlab
    docker中连接sqlserver 2008R2(SP3) 失败解决方法
    AtCoder AGC020 E-Encoding Subsets
    CF1553H XOR and Distance
    CF1039E Summer Oenothera Exhibition
    HDOJ 6991 Increasing Subsequence
    HDOJ 6964 I love counting
    Topcoder 15279 SpanningSubgraphs
    全程NOIP计划 题目选做
    分层图总结
  • 原文地址:https://www.cnblogs.com/changyou615/p/8776523.html
Copyright © 2011-2022 走看看