pytest如何实现在收集用例之前实现数据预热(每个session仅执行一次预热/预设过程)?

场景:
有一批case,需要实时获取最新数据,再根据某些规则生成可供paramtrize使用的用例集,由于执行测试之前,先执行了收集过程,所以导致paramtrize中使用的数据不是最新数据,需要在paramtrize执行之前,先将数据预热(大概要实现的过程为:执行收集前,获取最新数据,并将最新数据写入yaml文件,在收集case时,读取yaml文件的最新数据,并执行数据解析封装)
case如下图

个人已经尝试的方法/思路:
方法一(无法实现):采用fixture实现setUp和tearDown过程,如图:
多次尝试后,setUp和tearDown过程在用例收集完毕,执行测试时才被调用,故无法实现需求
image
方法二(无法实现):在conftest.py中使用hook函数—pytest_sessionstart函数
要么报错,要么无任何反应
image

方法三(无法实现):在conftest.py中使用hook函数–pytest_collection函数
要么报错,要么无任何反应
PS:忘记截图啦,代码与方法二一致

方法四(无法实现):在conftest.py中使用request.param传递case
前置条件是:1. 存在setUp和tearDown过程的fixture(scope=“session”, autouse=True) 2. 存在通过request.param传递数据的fixture ==>结果是 2先被加载 再加载了1 数据还是对不齐

求助一下大佬,还有其他办法能实现吗??还是hook函数用错了呢???使用哪个hook函数?如何实现呢? :kissing:

正常来说,测试开始前就是应该要有明确的测试数据

在这种测试场景,造数的过程也应该是测试的一环。测试步骤则为:
1.数据生成
2.校验数据并循环校验数据的后续执行是否符合预期

但是在这种测试场景中,步骤2的测试量会很庞大,所有需要对步骤2进行拆分。测试步骤变为:
1.数据生成并校验数据是否符合预期。并将该用例执行顺序放在最前面:@pytest.mark.run(order=1)
2.以数据驱动方式,依次测试每组数据是否正常:@pytest.mark.run(order=2)

1 Like
关闭