zoukankan      html  css  js  c++  java
  • jmespath 教程

     
    一、jsonpath
    之前我写接口自动化测试时候,对于复杂的json返回,会使用jsonpath这个第三方库,就像写xpath一样,方便的查询json元素。
    因为之前写WEB自动化时候,总用xpath去查找元素,所以用起来非常顺手。
    这里是github上的链接,感兴趣的童鞋也可以去学习一下
     
    二、jmespath
    不过httprunner使用的是另一个第三方库jmespath,这个我还是第一次听。大概看了下好像也很不错。
     
     
    1. 基础表达式
    ①. 对于字典,可以直接输入key来获取到对应的value。(注意,search是jmespath提供的查询方法,第一个参数是查询语法,第二个则是要查询的数据)
     
    import jmespath
     
    dic_1 = {"a": "foo", "b": "bar", "c": "baz"}
    path = jmespath.search("a", dic_1)
     
    print(path)
     
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    foo
     
     
     
    如果索引的key不存在,那么会返回null,或者等效于null的语言,比如在Python中返回就是None。
    import jmespath
     
    dic_1 = {"a": "foo", "b": "bar", "c": "baz"}
    path = jmespath.search("d", dic_1)
     
    print(path)
     
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    None
     
     
     
    实际中接口的返回值很多是多层嵌套的,比如我要获取最里面一层的value,可以这样查询:
     
    import jmespath
     
    dic_1 = {"a": {"b": {"c": {"d": "value"}}}}
    path = jmespath.search("a.b.c.d", dic_1)
     
    print(path)
     
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    value
     
     
     
     
    同样,如果引用的键不存在,则返回null值。
    2. 切片
    ①. 对于一个列表[],可以直接用下标查询,类似于python中list元素访问。(注意,索引基于0开始的)
     
    import jmespath
     
    # dic_1 = {"a": {"b": {"c": {"d": "value"}}}}
    list_1 = ["a", "b", "c", "d", "e", "f"]
    path = jmespath.search("[1]", list_1)
     
    print(path)
     
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    b
     
     
     
     
    字典和列表的嵌套也非常常见,同样查询也可以组合使用:
     
    import jmespath
     
    dic_1 = {"a": {
              "b": {
                "c": [
                  {"d": [0, [1, 2]]},
                  {"d": [3, 4]}
                ]
              }
    }}
     
    path = jmespath.search("a.b.c[0].d[1][0]", dic_1)
     
    print(path)
     
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    1
     
     
     
     
     
    ③. 列表的切片操作,在这里也可以适用:
    import jmespath
     
    dic_1 = {"a": {
              "b": {
                "c": [
                  {"d": [0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]},
                  {"d": [3, 4]}
                ]
              }
    }}
     
    path = jmespath.search("a.b.c[0].d[1][5:10]", dic_1)
     
    print(path)
     
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    [5, 6, 7, 8, 9]
     
     
     
     
     
    如果切片参数里的步长是负数,则可以反向切片:
    import jmespath
     
    dic_1 = {"a": {
              "b": {
                "c": [
                  {"d": [0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]},
                  {"d": [3, 4]}
                ]
              }
    }}
     
    path = jmespath.search("a.b.c[0].d[1][::-2]", dic_1)#步长是负数
     
    print(path)
      
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    [9, 7, 5, 3, 1]
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    AGC027F Grafting
    JAVA框架 Spring 依赖注入
    JAVA框架 Spring 约束配置本地资源
    JAVA框架 Spring 入门
    JAVA框架Struts2 数据封装
    JAVA框架Struts2 结果页配置
    JAVA框架Struts2 servlet API
    JAVA框架Struts2 Action类
    JAVA框架Struts2--配置讲解
    JAVA框架Struts2(二)
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14118181.html
Copyright © 2011-2022 走看看