测试猿
群这种东西别人不会教你真正的技术,浪费时间不说对别人没有任何收益
好的 我这边尝试下,看看能否满足我的场景,非常感谢您的帮助
1、test_n 不是在一个进程中执行,我用的是线程
2、set_up 和 teardown_class 执行 1 次
3、创建的测试数据相同
4、xdist 有一个问题,就是没办法控制 conftest.py 文件中,@pytest.fixture(scope="session",autouse=True) 执行的次数,也就是说每个进程都会执行一次,导致一个问题,即:我需要在 conftest 中做全局的 token 初始化,我希望@pytest.fixture(scope="session",autouse=True) 只执行一次
5、针对第 4 点我提的问题,您有什么解决方案吗
涉及到一些安全项 代码无法直接提供问题场景样例描述如下:
#!/usr/bin/python
# -*- coding:utf-8 -*-
import pytest
import logging
class TestDemo():
def setup_class(self):
logging.info("这里做初始化操作,比如读取相关参数")
def teardown_class(self):
logging.info("后置操作:删除自动化创建测试项")
# 此处批量删除,比如测试项是以AT-TEST开头的均会删除
@pytest.mark.run(order=1)
def test_1(self):
# 创建了测试服务1,返回服务ID
# 创建后需要根据ID,查询后续操作
pass
@pytest.mark.run(order=1)
def test_2(self):
# 创建了测试服务2,返回服务ID
# 创建后需要根据ID,查询后续操作
pass
@pytest.mark.run(order=1)
def test_3(self):
# 创建了测试服务3,返回服务ID
# 创建后需要根据ID,查询后续操作
pass
# 省略更多类似的创建服务用例...
在并发的时候,test_n 并没有全部执行完成,teardown_class 就会执行,导致部分用例需要根据 ID 做后续处理的时候,查询数据库已经无此 ID 数据了
原因就是因为被批量删除了
您提到的这个方式我也尝试过,代码如下,在并发的时候也控制不住,整个类文件里的用例 还没执行完,就调用了后置处理部分用例需要用的数据被提前在数据库中删除了,导致这些用例报查询不到数据
pytest.fixture(scope="class")
def setup_and_teardown():
logging.info("Setting up...")
yield params
logging.info("Tearing down...")
看上去,大家对这个问题没有什么兴趣啊
测试猿