处理cookie和jsonpath使用


 

case_numtitleurlmethodparamsdatajsoncookiesheadersexcept
neeo_001 token_登录 http://www.neeo.cc:6002/pinter/bank/api/login2 post 空的就是不需要的参数 {"userName": "admin", "password": "1234"}       {"code":0}
neeo_002 token_查询余额 http://www.neeo.cc:6002/pinter/bank/api/query2 get {"userName": "admin"}       {"testfan-token": "${neeo_001>data>data}$"} {"code":0}
neeo_003 cookies_登录 http://www.neeo.cc:6002/pinter/bank/api/login post   {"userName": "admin", "password": "1234"}       {"code":0}
neeo_004 cookies_查询余额 http://www.neeo.cc:6002/pinter/bank/api/query get {"userName": "admin"}     neeo_003   {"code":0}

headers的{"testfan-token": "${neeo_001>data>data}$"} 是个键值对,值的意思${neeo_001>data>data}$从neeo_001用例里的data参数中拿到data里的token


# import requests
# neeo_001
# # response = requests.request(method='post', url='http://www.neeo.cc:6002/pinter/bank/api/login2', data={"userName":"admin", "password":1234})
# # data = response.json()
# {'code': '0', 'message': 'success', 'data': 'c7cc8dc46af242bebd8fc318127dccfe'}
#
# neeo_002
# response = requests.request(method='get', url='http://www.neeo.cc:6002/pinter/bank/api/query2', params={"userName": "admin"},
#                             headers={"testfan-token": data['data']}
#                             )
# print(response.json())
# {'code': '0', 'message': 'success', 'data': '$ 92,937,464'}
​
​
​
​
"""
JsonPath:
​
​
正则匹配: ${neeo_001>data>data.info.address.phone}$   --> neeo_001>data>data.info.address.phone  --> abc
​
正则替换:${neeo_001>data>data.info.address.phone}$ --> abc
​
abc
${}$
${neeo_001>data>data.info.address.phone}$
abc
${neeo_001>headers>data}$
${neeo_001>params>data}$
​
neeo_001 data data.info.address.phone
    - neeo_001:依赖数据来自于哪个用例
    - data: 来自于哪个用例中的什么参数:
        - response.json
        - headers
        - cookies
        - params
    - data.info.address.phone: 数据所在的路径
​
neeo_001 data data
case_num 
​
"""

 

正则匹配:(在线正则工具)

 

 

 

JsonPath:

Json Path和JSON文档有关系,正如XPath之于XML文档一样,JsonPath为Json文档提供了解析能力,通过使用JsonPath,你可以方便的查找节点、获取想要的数据,JsonPath是Json版的XPath。

https://blog.csdn.net/koflance/article/details/63262484

https://www.cnblogs.com/Neeo/articles/12787888.html

pip install jsonpath-rw
​
​
data = {
    'code': '0',
    'message': 'success',
    'data': '95e947dd5a684105b97cf74d3a4514a8',
    "info": {
        "address": "北京",
        "phone": "1212313123"
    },
    "item": [
        {"user": "zhangkai"},
        {"user": "wuaihua"},
    ],
    "userName": "zhangkai",
    "password": 1234,
}
​
# print(data['info']['phone'])
# a = 'info.address'
a = 'item.[1].user'
# a = '$..user'
​
​
from jsonpath_rw import parse
#
# js_exe = parse(a)  # 发一个解析路径类型是str的
# match = js_exe.find(data)
# print([i.value for i in match])
import re
import json
data2 = {
    "userName": "${neeo_002>params>userName}$",
    "password": "${neeo_003>data>password}$",
    "user": "${neeo_003>data>item.[0].user}$"
}
​
pattern = re.compile('\${(.*?)}\$') # 正则匹配
match_list = pattern.findall(json.dumps(data2))
# ['neeo_002>params>userName', 'neeo_003>data>password', 'neeo_003>data>item.[0].user']
print(match_list)
for i in match_list:
    case, params, json_path = i.split(">")
    # neeo_002 params userName
    print(case, params, json_path)
    match = parse(json_path).find(data)
    # [DatumInContext(value='zhangkai', path=Fields('userName'), context=DatumInContext(value={'code': '0', 'message': 'success', 'data': '95e947dd5a684105b97cf74d3a4514a8', 'info': {'address': '北京', 'phone': '1212313123'}, 'item': [{'user': 'zhangkai'}, {'user': 'wuaihua'}], 'userName': 'zhangkai', 'password': 1234}, path=This(), context=None))]
    temp = [v.value for v in match][0]
    # zhangkai
    # 1234
    data2= re.sub(pattern, temp, json.dumps(data2), 1)
    # {"userName": "zhangkai", "password": "${neeo_003>data>password}$", "user": "${neeo_003>data>item.[0].user}$"}
    print(data2)
    # break
​
​
​
 

 

 

处理cookie的思路

思路:

  1. 在每个用例发请求的时候,查看响应结果是否有cookies返回

  2. 如果有cookie返回,就把保存起来

    1. 保存到本的指定目录,以域名命名,当有接口需要cookies的时候,去指定目录里根据域名匹配查找cookies,然后携带。(psotman cookie管理器的思路)

    2. 将cookies保存到当前的用例对象中,可以为用例对象新建一个临时字段,来保存cookies,谁要用,就来找就完了。

 

问题:如何获取域名?

从url上切
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-10-28 08:55  贰号猿  阅读(49)  评论(0)    收藏  举报