在课堂上使用 JWT 令牌编写 pytest

问题描述 投票:0回答:1

我有一个 TestSecured 类,其中有一些方法可以获取受保护的端点,因此您需要一个 jwt 来发出请求。我正在尝试优化我的测试类,这样我就不需要登录过程 3 次,而只需要 1 次,并在我的 3 次测试方法中使用相同的令牌。

@pytest.mark.usefixtures("client", "auth", "setup_user_and_token")
class TestSecured:
        

    def test_get_operations(self, client, setup_user_and_token):
        # headers = {'Authorization' : f'Beare {setup_user_and_token}'}
        response = client.get(f'{SECURED_ROUTE}get-operations', headers=setup_user_and_token)
        assert response.status_code == 200

    def test_post_operation(self, client, auth):
        return "ok"


    def test_post_ope2(self,client,auth):
        print("ok")

如果我使用我创建的 setup_user_and_token 固定装置在每个方法中设置标头,它就会起作用。

@pytest.fixture(scope="class")
def setup_user_and_token(auth):
    response = auth.login()
    token = response.get_json()['access_token']
    return {'Authorization' : f'Bearer {token}'}

但我想使用 setup_class() 只执行一次。我怎样才能实现这个目标?

python flask pytest
1个回答
0
投票

您可以向测试类添加固定装置并在那里使用固定装置

class TestSecured:

    @pytest.fixture(scope="class", autouse=True)
    def setup_class(self, setup_user_and_token, client, auth):
        TestSecured.__setup_user_and_token = setup_user_and_token
        TestSecured.__client = client
        TestSecured.__auth = auth

    def test_get_operations(self):
        # headers = {'Authorization' : f'Beare {setup_user_and_token}'}
        response = client.get(f'{SECURED_ROUTE}get-operations', headers=self.__setup_user_and_token)
        assert response.status_code == 200

您还应该删除

usefixtures
标记,您可以使用它或直接调用灯具,请参阅参考

© www.soinside.com 2019 - 2024. All rights reserved.