django - django pytest 案例失败,而邮递员没有
问题描述
我正在使用 Django 休息框架为 API 编写测试。
用户必须注册然后登录才能访问我的端点。
如果我向邮递员注册(发布),然后登录(发布)并获得 access_token,我随后将其传递给发布请求,我得到 200。
也使用curl
curl --location --request GET 'localhost:8000/api/v1/signals/' \
--header 'Authorization: token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJleHAiOjE2MzI4NTc2MzIsImlhdCI6MTYzMjg1NzMzMn0.WCjjg3jSZ4TO_Q51hGwZmj04iFeV9ffRnp9GaFch_IM' \
--header 'Cookie: csrftoken=HrgKpprN95ExIPmm6Y2Qqc3WvDrfqQRgqUY9v4bTN9gT7nETEuBjhtY6IS7Sv9Ky; sessionid=ml04spqh6gmjuicp8vnda1t0lqopnuvx' \
--data-raw ''
但是如果我写一个测试,它会失败
def test_get_signal(client):
form_data = {
"username": "testuser",
"password": "mytestpassword",
}
CustomUser.objects.create_user(**form_data)
response = client.post("/accounts/login/", form_data, follow=True)
assert response.status_code == 200
response_content = json.loads(response.content)
token = response_content["access_token"]
headers = {
"Authorization": "Token " + token,
"Content-Type": "application/json",
}
response = client.get(
path="/api/v1/signals/",
headers=headers,
)
assert response.status_code == 200
我得到一个 403。我做错了什么?
解决方案
解决方案是我没有发送正确的请求。
在这里找到答案
我将测试重写为:
def test_get_signal():
form_data = {
"username": "testuser",
"password": "mytestpassword",
}
CustomUser.objects.create_user(**form_data)
response = APIclient.post("/accounts/login/", form_data, follow=True)
assert response.status_code == 200
response_content = json.loads(response.content)
token = response_content["access_token"]
APIclient.credentials(HTTP_AUTHORIZATION="Bearer " + token)
response = APIclient.get(
path="/api/v1/signals/",
)
assert response.status_code == 200
推荐阅读
- c# - Blazor 不刷新组件
- node.js - 将 node.js 安装位置更改为“用户/johndoe”?如何?好主意?
- python - 在 python3 中使用 pyrouge 时出现 WinError 2
- html - 缩小谷歌广告代码会违反任何 AdSense 政策吗?
- python - 当列标题包含正斜杠时,如何从 CSV 文件中读取数据?
- javascript - 如何在元素重新渲染后将先前(重新渲染之前)值设置为 ag-grid Cell Renderer 输入元素?
- xcode - 具有任意长 char16_t 缓冲区的结构的 lldb (Xcode) 自定义格式
- laravel - 已弃用:__autoload() 已弃用,请改用 spl_autoload_register()
- python - 为什么会出现“只能将整数标量数组转换为标量索引”的错误?
- javafx - 在 WebView 中显示来自 JavaFX 的 PDF.js 页面