但是还是有缺陷的,比如 yaml 中的函数必须和 get_yaml 函数在同一个 py 文件中,不然计算不出来。但是还是放到这里,期望有人可以提出其他的想法吧。
我还是决定把这两个问题先解决。
针对这个需求,我想到了一个比较笨的想法,就是在 yaml 中使用 ${变量或者函数}的形式,但是我可以在 get yaml 中数据的时候,对里面符合上述形式的内容进行替换。代码如下:
def get_yaml(filepath, field):
"""
读取yaml文件
:param filepath: 文件路径
:param field: yaml中的key
:return: dict,list
"""
with open(filepath, 'r', encoding='utf-8') as f:
file_data = f.read()
data = yaml.load(file_data, Loader=yaml.FullLoader)
f.close()
raw_data = data[field]
# 将原生数据转为字符串类型
string = str(raw_data)
# 从字符串中搜索符合${函数/变量}的字符串,并将其中的函数/变量计算出来
for expression in re.findall("(?<=\\${)[A-Za-z_][A-Za-z0-9_()^{}]+(?=})", string):
value = str(eval(expression))
# 将其代替其中的函数/变量
string = string.replace(f"${{{expression}}}", value)
return eval(string)
比较笨,而且里面的正则表达式不知道有没有囊括所有情况,但是算是一种办法。
应该是搞不出来了
yaml 中:
读取后输出:
好像是无法使用的。
可以发一下链接给我吗,我查了很多资料,但是没看到类似的内容
yaml python 好像只能有锚点和引用 即&*
好的,我试试,谢谢您
他们也在说这个不是特别好的办法,我之前是这么做的,既然@pytest.fixture(scope="session", autouse=True)
存在,我觉得应该也是可以用的。
想要不写死数据,要用到参数化,如果放到 yml 文件中,数据就只能写死了,如果放到 py 文件中,数据可能是活的,但是可读性太差,这个问题有办法协调吗?
↑
谢谢,已修改~
答案是 module 'pytest' has no attribute 'allure'是真的,不能用@pytest.allure....这种方法了,直接是@allure....方法
我也是这么做的,allure 下的是最新的 2.13,环境变量也有配置
试过了 pip3 或者 pip 都是一样的,d:/python 就是 python3 的路径,下面报告了 script 等子文件夹
我的 pytest 和 allure-pytest 是一起装好的,您可以看上面的图
顶一哈
现在遇到了一个问题,如果前往自己专门的环境,需要在页面进行一个切换操作,但是如果切换用例失败了,(重跑也失败了),则还是会进行其他用例,这样的话则会影响到其他环境,这种情况应该怎么办?
有点点不知道 requests.Session 的意义?
因为先 login 再查询一些东西,当我查询时,想要 header 里面的内容保持,但是也并没有保持呀,仍然是初始化的一个:
{'User-Agent': 'python-requests/2.24.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
也使用了 session.headers.update(headers),但是好像登陆时只保持了登陆的 header,当查询时 header 就更新了
我问一下,谢谢
class TreeMap:
def __init__(self, source_dict=None):
self._dict = dict() if source_dict is None else source_dict
self._sorted_dict = self._sort()
def _sort(self):
_sorted_dict = OrderedDict()
_sorted_keys = list()
for _key in self._dict.keys():
bisect.insort(_sorted_keys, _key)
for _sorted_key in _sorted_keys:
_sorted_dict[_sorted_key] = self._dict[_sorted_key]
return _sorted_dict
def __getitem__(self, index):
length = self.__len__()
if index >= length:
raise StopIteration
_sorted_dict = self._sorted_dict.copy()
try:
for i in range(length):
item = _sorted_dict.popitem(last=False)
if i == index:
return item
except KeyError:
raise
def __setitem__(self, key, value):
self._dict[key] = value
self._sorted_dict = self._sort()
def __len__(self):
return len(self._sorted_dict)
def __str__(self):
self._sorted_dict = self._sort()
return str(dict(self._sorted_dict))
def add(self, key, value):
self.__setitem__(key, value)
def get(self, key):
return self._sorted_dict.get(key)
def items(self):
return self._sorted_dict.items()
谢谢,可以获得一些启发
意思是至少是一个集合不是 map?
我是需要把一段 java 的代码转为 python ,里面用到了 TreeSet 和 TreeMap, TreeSet 确实必须要是集合的形式,list 也可以,但不能是字典吧。
但是必须是 set 的形式