• Python接口自动化(一)---json数据类型取值


      接触自动化也有一段时间了,之前学习过selenium,appium,这段时间在学习接口自动化,上次出现一个问题,是requests的json解析数据,要从解析出来的数据选取数据出来做assertEqual判断,结果把我难倒了,虽然说是一点简单的知识点,但是如果基础不扎实,或者不仔细的人,就会遇到我的这种情况,最终询问了老司机,把问题解决了。

    案例回顾

      下面附上接口:

    http://tj.nineton.cn/Heart/index/all?city=CHSH000000&language=zh-chs&unit=c&aqi=city&alarm=1
    这个是一个天气预报的接口,通过postman解析,会得到一个返回值,利用json解析,会得到很多数据,那么我选取其中的一部分数据,另外加上几个元组,把元组也整合在一起,做一个解析。
      下面附上解析的数据

    r =  {

        "status": "OK",

        "weather": [

          {

            "city_name": "上海",

            "now": {

              "text": "阴",

              "code": "9"

                         },

            "future": [

              {

                "date": "2017-05-12",

                "high": "22"

              },

               {

                "date": "2017-05-13",

                "high": "30"

                }

                 ]

                 },

          ("NanChang","ChangSha","HangZhou"),

                 ["ShangHai","BeiJing","ShenZhen"]

          ]

        }

    那么,我们要分别获取字典里面的status为OK的值,city_name为上海的值,date为2017-05-13,还有元组里面的"ChangSha",list里面的"ShenZhen"的值

    有些人看到,就会比较迷糊,看到这么多,我该如何取值,或者,可能会由于自己的粗心,没有看到某一个符号,或者少数了几个数,导致测试结果的失败,那么,在写答案之前,我们先解析一下上边的数据类型。

       {}那么肯定为字典咯,("NanChang","ChangSha","HangZhou")为元组,["ShangHai","BeiJing","ShenZhen"]为列表list

    一,元组回顾

      下面,我们就先回顾一下元组,

    Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

    例:other_city = ("NanChang","ChangSha","HangZhou")

    元组与字符串类似,下标索引从0开始,可以进行截取,组合等...

    >>> r = ("NanChang","ChangSha","HangZhou")

    获取单个字符串
    >>> r[0]
    'NanChang'

    截取第一个和第二个字符串
    >>> r[0:2]
    ('NanChang', 'ChangSha')

    获取倒数第一个字符串
    >>> r[-1]
    'HangZhou'

    获取所有的字符串
    >>> r[0:]
    ('NanChang', 'ChangSha', 'HangZhou')

    二,列表list回顾

    同理,列表list的获取方式与元组一样,我们就做一个简单的回顾就可以了

    r ["NanChang","ChangSha","HangZhou"]
    >>> r[0]
    "NanChang"

    此处不再多说

    三,字典回顾

    下一个就是字典,

    字典是另一种可变容器模型,且可存储任意类型对象。

    字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示

    d = {key1 : value1, key2 : value2 }

     我们举一个例子

    >>> d = {"name":"XiaoMing","age":"15","sexy":"man"}
    >>> d["name"]
    'XiaoMing'

    四,答案解析

    那么,分析完以上信息,就可以开始我们取值了,相信你看到这里,就会感觉,无论多少数据,取值会很简单的

    1,status

    取第一个值:status,它就在字典里面第一个,所以很好取值,就是

    >>> r["status"]
    'OK'

    2,city_name = 上海

    取第二个值:city_name为上海,这里面有点绕,dict+list+dict,其实这样分析出来就很简单了,那么我们就开始一步步分析吧

    上海在weather里面,所以我们取值

    r["weather"]
    [{'now': {'text': '阴', 'code': '9'}, 'city_name': '上海', 'future': [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]}, ('NanChang', 'ChangSha', 'HangZhou'), ('ShangHai', 'BeiJing', 'ShenZhen')]

    city_name在list里面的第一个dict里面,所以我们取值

    >>> r["weather"][0]
    {'now': {'text': '阴', 'code': '9'}, 'city_name': '上海', 'future': [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]}

    上海在dict的city_name里面,所以就很简单的三步取值取出来的

    >>> r["weather"][0]["city_name"]
    '上海'

    3,date = 2017-05-13

    现在取第三个值date为2017-05-13,这个其实就是比上面的多了两步,多了一个list和一个dict,我就直接写答案了

    >>> r["weather"][0]["future"][1]["date"]
    '2017-05-13'

    4,ChangSha 和 ShenZhen的取值

    现在取第四个值,元组里面的"ChangSha"

    "ChangSha"在元组里面,这个元组在list里面,所以,我们先要获取到该元组

    r["weather"][1]
    ('NanChang', 'ChangSha', 'HangZhou')

    在下一步

    r["weather"][1][1]
    'ChangSha'

    同理,list里面的"ShenZhen"的值就会变得很简单了,我就直接写答案了

    >>> r["weather"][2][2]
    'ShenZhen'

    解析数据其实很简单,只要有点基础,就可以解析,只不过第二个值会有点绕,dict+list+dict+list,经过一分析,就会发现,其实不会太难,一步一步慢慢分析,做测试不是会去找bug,也要去分析原因,你会事半功倍的。

    最后附上所有的代码

    r = {
    "status": "OK",
    "weather": [
    {
    "city_name": "上海",
    "now": {
    "text": "阴",
    "code": "9"
    },
    "future": [
    {
    "date": "2017-05-12",
    "high": "22"
    },
    {
    "date": "2017-05-13",
    "high": "30"
    }
    ]
    },
    ("NanChang","ChangSha","HangZhou"),
    ("ShangHai","BeiJing","ShenZhen")
    ]
    }

    >>> r["status"]
    'OK'


    >>> r["weather"]
    [{'now': {'text': '阴', 'code': '9'}, 'city_name': '上海', 'future': [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]}, ('NanChang', 'ChangSha', 'HangZhou'), ('ShangHai', 'BeiJing', 'ShenZhen')]


    >>> r["weather"][0]
    {'now': {'text': '阴', 'code': '9'}, 'city_name': '上海', 'future': [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]}


    >>> r["weather"][0]["city_name"]
    '上海'

    >>> r["weather"][0]

    {'now': {'text': '阴', 'code': '9'}, 'city_name': '上海', 'future': [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]}


    >>> r["weather"][0]["future"]
    [{'high': '22', 'date': '2017-05-12'}, {'high': '30', 'date': '2017-05-13'}]

    >>> r["weather"][0]["future"][1]["date"]
    '2017-05-13'


    >>> r["weather"][1][1]
    'ChangSha'
    >>> r["weather"][2][2]
    'ShenZhen'

    禁止转载以及商业用途,仅作为学习资料,违者必究

  • 相关阅读:
    易语言常用源码
    ci的数据库地址
    格式化输出php数组
    mysql插入表情问题
    线程、进程与协程2
    线程、进程与协程
    if __name=='__main__"的作用
    动态导入模块
    面向对象补充之方法
    getpass模块
  • 原文地址:https://www.cnblogs.com/EvenZheng/p/6850873.html
Copyright © 2020-2023  润新知