Pytest Xdist并行执行,防止重新创建数据库

时间:2018-11-22 11:50:46

标签: selenium pytest xdist

我正在尝试通过并行执行4个线程(-n = 4)来加快python Django Web应用程序中的Selenium测试

在前4个测试中,有3个给出以下错误:

[test setup] [Test Error Output]
Got an error creating the test database: (1007, "Can't create database 'test1database'; database exists")

我知道必须指定安装程序才能在并行测试执行之前运行一次,以防止多次尝试创建数据库,但是我将如何在pytest xdist配置中强制执行此操作?

2 个答案:

答案 0 :(得分:1)

每个线程可能都有一个不同的数据库。 worker_id固定装置可让您做到这一点 https://github.com/pytest-dev/pytest-xdist#identifying-the-worker-process-during-a-test

@pytest.fixture()
def test_database(worker_id):
    return CreateDatabase("test{}database".format(worker_id))

更新

github issue comment显示了OP原始问题的解决方案。它还使用共享模板创建N个数据库。这带来了同步访问Fixture中共享资源的有趣方式。

答案 1 :(得分:0)

如果您在其余的代码中不会遇到任何问题,则可以使用它:

CREATE DATABASE IF NOT EXISTS test1database;