我的测试用例中有以下代码。每当我运行测试用例时,都会生成一个新的令牌,这会耗尽我的配额。
因此,我想使用一些需要由APIClient成功验证的模拟值,而不是实际的令牌。如何模拟此令牌身份验证?
任何帮助都非常感谢。谢谢
设置
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTStatelessUserAuthentication',
],
测试用例
from apps.common.helpers import get_auth0_access_token
class TestDatasetListTestCase(APITestCase):
def setUp(self):
access_token = get_auth0_access_token()
self.client.credentials(HTTP_AUTHORIZATION=f"Bearer {access_token}")
payload = {"label": "new_label"}
response = self.client.post(self.url, payload, format="multipart")
helpers.py
def generate_new_auth0_token()
options = {
"url": f"https://{auth0_domain}/oauth/token",
"headers": {"cache-control": "no-cache", "content-type": "application/json"},
"json": {"audience": audience, "grant_type": grant_type, "client_id": client_id, "client_secret": client_secret},
}
res = requests.post(**options)
return res.json() or Exception(res.text)
1条答案
按热度按时间hsvhsicv1#
在单元测试中,外部API的标准程序是模拟它们。在测试过程中调用这些API是没有意义的,因为除非另一端发生更改(例如更改API),否则这些API将正常工作,但在您的情况下,除非客户端服务器关闭,否则不会出现这种情况,因为您使用的是标准API(具有oAuth的固定规范集)。
如果你仍然愿意测试APIClient,那么我建议你建立一个模拟的oAuth服务器,就像这个开源项目
Mock oAuth Server
。然后,您可以提供API调用的测试URL(或模拟它)。假设你的url是在设置中定义的,你可以这样尝试:并更新helper函数:
有关设置覆盖的详细信息,请参阅文档。