Files
apiautotest/utils/data_utils/extract_data_handle.py

89 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
# @Time : 2023/6/28 14:35
# @Author : chenyinhua
# @File : extract_data_handle.py
# @Software: PyCharm
# @Desc: 提取数据的一些方法
# 标准库导入
import re
# 第三方库导入
from jsonpath import jsonpath
from loguru import logger
from requests import Response
# 本地应用/模块导入
from utils.data_utils.data_handle import data_handle
def json_extractor(obj, expr: str = '.'):
"""
从目标对象obj, 根据表达式expr提取指定的值
:param obj :json/dict类型数据
:param expr: 表达式, . 提取字典所有内容, $.test_api_case 提取一级字典case $.test_api_case.data 提取case字典下的data
:return result: 提取的结果,未提取到返回 None
"""
try:
result = jsonpath(obj, expr)[0] if len(jsonpath(obj, expr)) == 1 else jsonpath(obj, expr)
result = data_handle(obj=result)
logger.debug(f"\n提取对象:{obj}\n"
f"提取表达式: {expr} \n"
f"提取值类型: {type(result)}\n"
f"提取值:{result}\n")
return result
except Exception as e:
logger.debug(f"\n提取对象:{obj}\n"
f"提取表达式: {expr}\n"
f"提取对象: {obj}\n"
f"错误信息:{e}\n")
def re_extract(obj: str, expr: str = '.'):
"""
从目标对象obj, 根据表达式expr提取指定的值
:param obj : 字符串数据
:param expr: 正则表达式
:return result: 提取的结果,未提取到返回 None
"""
try:
# 如果提取后的数据长度为1则取第一个元素返回str否则返回列表
result = re.findall(expr, obj)[0] if len(re.findall(expr, obj)) == 1 else re.findall(expr, obj)
# 由于提取出来的数据都是str格式将eval一样还原数据格式
result = data_handle(obj=result)
logger.debug(f"\n提取对象:{obj}\n"
f"提取表达式: {expr}\n"
f"提取值类型: {type(result)}\n"
f"提取值:{result}\n")
return result
except Exception as e:
logger.debug(f"\n提取对象:{obj}\n"
f"提取表达式: {expr}\n"
f"提取对象: {obj}\n"
f"错误信息:{e}\n")
def response_extract(response: Response, expr: str = '.'):
"""
从response响应对象提取cookies之类
:param response : response对象
:param expr: 提取表达式。部分参考response.status_code response.cookies, response.text, response.headers, response.is_redirect
:return result: 提取的结果,未提取到返回 None
"""
try:
result = eval(expr)
logger.debug(f"\n提取表达式: {expr}\n"
f"提取值类型: {type(result)}\n"
f"提取值:{result}\n")
return result
except Exception as e:
logger.debug(f"\n提取表达式: {expr}\n"
f"提取对象: {response}\n"
f"错误信息:{e}\n")
if __name__ == '__main__':
obj = [{'id': 1, 'user_id': 102, 'action': 'autologin', 'value': '3734462a398eedd9ab7448c4e2880ddd3f9bb2cb'}]
expre = "'user_id': (.*?),"
res = re_extract(obj=str(obj), expr=expre)
print(res)