Pytest Xdist 并行执行,防止重新创建数据库
Pytest Xdist parallel execution, prevent recreating the database
我正在尝试通过并行执行 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 配置中强制执行此操作?
您可以为每个线程使用不同的数据库。 worker_id
fixture 允许你这样做
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 个数据库。这带来了同步对夹具中共享资源的访问的有趣转折。
如果您在其余代码中不会遇到任何问题,您可以使用它:
CREATE DATABASE IF NOT EXISTS test1database;
我正在尝试通过并行执行 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 配置中强制执行此操作?
您可以为每个线程使用不同的数据库。 worker_id
fixture 允许你这样做
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 个数据库。这带来了同步对夹具中共享资源的访问的有趣转折。
如果您在其余代码中不会遇到任何问题,您可以使用它:
CREATE DATABASE IF NOT EXISTS test1database;