zoukankan      html  css  js  c++  java
  • 【jmespath】—1. 基础用法

    一、jsonpath

    之前我写接口自动化测试时候,对于复杂的json返回,会使用jsonpath这个第三方库,就像写xpath一样,方便的查询json元素。
    因为之前写WEB自动化时候,总用xpath去查找元素,所以用起来非常顺手。
    这里是github上的链接,感兴趣的童鞋也可以去学习一下:jsonpath

    二、jmespath

    不过httprunner使用的是另一个第三方库jmespath,这个我还是第一次听。大概看了下好像也很不错,这里是github链接和官方教程。
    github地址
    官方教程

    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]
    

    上面是一些常规的用法,但是jmespath还提供了一个更强大的核心功能:Projections,可以应用于元素集合的表达式,这个另起再讲。

  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/13218664.html
Copyright © 2011-2022 走看看