【发布时间】:2019-07-26 01:01:21
【问题描述】:
我正在尝试使用 pytest-xdist 以使我的测试并行运行, 问题是每个线程都将转到与所有测试共享的夹具并根据线程数执行它。
这给我带来了一个问题,因为该夹具角色是为我的测试创建数据,一旦它已经创建,我就会得到错误,因为它已经创建(通过 REST)。
conftest.py:
lock = threading.Lock()
@pytest.fixture(scope=session)
def init_data(request):
lock.acquire()
try:
data = []
if checking_data_not_created():
data.append(some_rest_command_creating_data_1())
data.append(some_rest_command_creating_data_2())
finally:
lock.release()
yield data
lock.acquire()
try:
remove_all_data()
finally:
lock.release()
tests_class.py:
class classTests():
def first_test(init_data):
test body and validation....
def second_test(init_data):
test body and validation....
我正在使用命令: pytest -v -n2
假设第一个线程应该运行 first_test() 第二个线程应该运行 second_test() 其中一个总是会失败,因为第一个已经在fixtures部分创建了数据,另一个线程会出现异常,他应该运行的所有测试都将失败。
如您所见,我尝试使用锁来同步线程,但它也不起作用。
知道如何解决这个问题吗?
谢谢。
【问题讨论】:
-
第二个线程得到了什么异常?
-
与我的服务器相关的异常,而不是环境,这不是重点。关键是我只想用 scope=session 运行一次夹具
-
pytest-xdist 使用多个进程,而不是线程!我认为
threading.lock不足以阻止并发访问。 -
我很难理解,感谢您的回复 Samuel
标签: python multithreading pytest xdist