pytest_api/tools/regular_control.py

135 lines
3.7 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.

import re,os
from faker import Faker
from tools.log_control import ERROR
import jsonpath
from tools.cache_control import Cache
from config.configs import Config
import time
class MyMetaClass(type):
def __getattr__(self, item):
return os.environ[item]
class MyClass(metaclass=MyMetaClass):
pass
class Context:
def __init__(self):
self.f = Faker(locale='zh_CN')
@property
def get_host11(self):
#判断环境testingstaging,prod, testing-global, staging-global.0
return Config().get_host11()
@property
def get_female_name(self) -> str:
return self.f.name()+ str(self.get_now_time)
@property
def get_female_phone(self) -> str:
return self.f.phone_number()
@property
def get_password(self):
return Config().__getattr__("dm_password")
@property
def get_now_time(self):
now = time.time()
return int(round(now * 1000))
@property
def insert_vin(self):
return "zidh"+ str(self.get_now_time)
def regular(target) -> str:
"""
使用正则替换请求数据
target:yaml的用例数据
:return:
"""
try:
# 匹配规则
regular_pattern = r'\${{(.*?)}}'
while re.findall(regular_pattern, target):
# group(1) 列出第一个括号匹配部分,host
key = re.search(regular_pattern, target).group(1)
# print("str(getattr(Context(), key))",str(getattr(Context(), key)))
# str(getattr(Context(), key)),返回 https://tsp.testing.davincimotor.com
try:
target = re.sub(regular_pattern, str(getattr(MyClass, key)), target, 1)
except KeyError:
target = re.sub(regular_pattern, str(getattr(Context(), key)), target, 1)
# return target
return target
except AttributeError:
ERROR.logger.error('未找到对应的替换数据,请检查数据是否存在', target)
raise
def sql_json(js_path, res):
return jsonpath.jsonpath(res, js_path)[0]
def sql_regular(value, res=None):
"""
这里处理sql中的依赖数据通过获取接口响应的jsonpath的值进行替换
:param res: jsonpath使用的返回结果
:param value:
:return:
"""
sql_json_list = re.findall(r"\$json\((.*?)\)\$", value)
for i in sql_json_list:
pattern = re.compile(r'\$json\(' + i.replace('$', "\$").replace('[', '\[') + r'\)\$')
key = str(sql_json(i, res))
value = re.sub(pattern, key, value, count=1)
value = sql_regular(value, res)
return value
def cache_regular(value):
"""
通过正则的方式,读取缓存中的内容
例:$cache{login_init}
:param value:
:return:
"""
# 正则获取 $cache{login_init}中的值 --> login_init
regular_dates = re.findall(r"\$cache\{(.*?)\}", value)
# 拿到的是一个list循环数据
for regular_data in regular_dates:
value_types = ['int:', 'bool:', 'list:', 'dict:', 'tuple:', 'float:']
if any(i in regular_data for i in value_types) is True:
value_types = regular_data.split(":")[0]
pattern = re.compile(r'\'\$cache{' + regular_data+ r'(.*?)}\'')
regular_data = regular_data.split(":")[1]
else:
pattern = re.compile(r'\$cache\{' + regular_data.replace('$', "\$").replace('[', '\[') + r'\}')
cache_data = Cache(regular_data).get_cache().replace(r'\n','').replace(r'\u2005', '')
value = re.sub(pattern, cache_data, value)
return value
if __name__ == '__main__':
# res = regular("${{get_host11}}")
# print(res)
# aa = '$cache{login_token}'
# ress = cache_regular(aa)
# print(ress)
a = Context().get_host11()
print(a)