首页 > 解决方案 > 运行单个测试有效,但运行多个测试失败 - Flask 和 Pytest

问题描述

这真的很奇怪。我有以下简单的烧瓶应用程序:

- root
- myapp
  - a route with /subscription_endpoint
- tests
  - test_az.py
  - test_bz.py

test_az.py 和 test_bz.py 看起来都一样。有一个设置(取自https://diegoquintanav.github.io/flask-contexts.html),然后是一个简单的测试:

import pytest
from myapp import create_app
import json

@pytest.fixture(scope='module')
def app(request):
    from myapp import create_app
    return create_app('testing')


@pytest.fixture(autouse=True)
def app_context(app):
    """Creates a flask app context"""
    with app.app_context():
        yield app

@pytest.fixture
def client(app_context):
    return app_context.test_client(use_cookies=True)


def test_it(client):
    sample_payload = {"test": "test"}
    response = client.post("/subscription_endpoint", json=sample_payload)
    assert response.status_code == 500

运行 pytest,将运行这两个文件,但 test_az.py 会成功,而 test_bz.py 会失败。http请求会返回404错误,表示test_bz在app中找不到路由。如果我单独运行它们,那么它们的展位就会成功。这很奇怪!似乎第一个测试在某种程度上影响了第二个测试。

我实际上添加了第三个测试 test_cz.py,它也会失败。所以只有第一个会运行。我觉得这与那些固定装置有关,但不知道在哪里看。

标签: pythonflaskpytest

解决方案


为夹具创建一个conftest.py例如客户端夹具并在两个测试中使用相同的夹具?

现在,如果您说提供的代码是另一个文件中相同的测试示例,那么您正在为客户端创建 2 个固定装置。我会首先清理它并创建一个conftest.py包含所有固定装置的 1,然后在您的测试中使用它们,这可能会对您有所帮助。

还可以查看如何使用pytestFlask 文档中的描述


推荐阅读