如何将参数发送到夹具方法

How to send parameters to a fixture method

我是端到端测试的新手。我决定使用 pytest 和 fixtures,但是我在为我的 fixture 方法提供参数时遇到了问题。我有一个名为 authorize 的方法,我在其中推送一个 api 密钥和一个密码,并在我的 get 方法中使用它 returns base64 授权。此外,如果 api 密钥和密码未在授权方法中给出,它会打印一条消息,要求用户手动输入它们。问题是,当我尝试按下 api 键并像这样直接传递给授权时 -> 授权(“MyApiKey”,“Test123”),程序给出错误

Fixture "authorization" called directly. Fixtures are not meant to be called directly, but are created automatically when test functions request them as parameters.

当我执行以下操作时 my_auth = authorization, "MyAPIKey", "Test123" 不会发生错误,但不幸的是它没有使用这些参数并希望我手动输入新数据。我该如何解决这个问题?

@pytest.fixture(scope="class")
def authorization(API_KEY="", password=""):
    if API_KEY and password:
        user_data = authorize(API_KEY, password)
    else:
        user_data = authorize()
    return user_data

class Test_create_fixture():
@pytest.mark.usefixtures(name=['authorization'])
    def test_get_empl(self, authorization):
        my_auth = authorization, "MyAPIKey", "Test123"
        response = get('https://w3schools.com', my_auth)
        assert response.status_code == 200

如错误所述,fixture 是自动创建的,因此您不能也不应该直接向它们传递参数。请注意,固定装置可以链接,即一个固定装置的参数可以是其他固定装置。

为了传递参数,您必须从其他来源读取它,这里有几个选项:

  1. 其他硬编码参数的灯具
  2. 从配置文件读取
  3. 从环境变量读取

使用 my_auth = authorization, "MyAPIKey", "Test123" 是可行的,因为它实际上是将参数硬编码到方法参数中