python - 如何使用请求对象测试视图
问题描述
我需要进行测试以查看我的视图是否正常工作。但是,我在测试文件中没有找到如何使用请求对象。
我的视图功能是:
def track_view(request):
user_email, user_order = request.session['email'], request.session['order']
if request.method == 'POST':
client_id = request.META.get('HTTP_HOST').split(':8000')[0]
payload = "{ \n\"description\": \"Rastreio de pedido\", \n\"subject\": \"Rastreamento " + user_order + ' ' + user_email + "\", \n\"email\": \"" + user_email + "\", \n\"priority\": " + str(
priority['low']) + ", \n\"status\": " + str(status['closed']) + ", \n\"group_id\": " + str(group[
'Logística']) + ", \n\"type\": \"Rastrear Pedido\", \n\"product_id\": " + str(client[client_id]) + "}"
headers = {
'Content-Type': "application/json",
'Cache-Control': "no-cache"
}
response = requests.request("POST", url, data=payload, headers=headers, auth=('XXX', 'X'))
print(response.text)
context = {'email_variable': user_email,
'order_variable': user_order}
return redirect('atendimento:final_view')
logo_image = 'client_logo/' + request.META.get('HTTP_HOST').split(':8000')[0] + '.png'
context = {'logo_image': logo_image,
'user_email': request.POST.get('email'),
'user_order': request.session['order']}
return render(request, 'atendimento/track_page.html', context)
我怎样才能使这项工作来测试对该视图的不同输入?
解决方案
您应该使用测试客户端来测试请求。
def test_track_view(self):
session = self.client.session
session['email'] = 'foo@bar.com'
session['user_order'] = 'whatever'
url = reverse('my-url')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
请注意,您可能还想模拟 requests 对象,以便您的测试实际上不会向外部 API 发出请求。
另请注意,手动构建 JSON 字符串确实不是一个好习惯。相反,创建一个字典,并将其转储到 JSON:
payload = { "description": "Rastreio de pedido", ... "priority": priority['low'], "status": status['closed'], "group_id": group['Logística']...}
response = requests.request("POST", url, data=json.dumps(payload), headers=headers, auth=('XXX', 'X'))
推荐阅读
- python - 有没有办法在调用 .as_integer_ratio() 时返回完全降低的比率?
- java - JFrame 标签出现重叠
- python - Python:具有对象列表的对象 - 根据列表成员的属性创建方法
- php - 如何在php中检查多个文件是否为空?
- python - .format 可变表格宽度
- javascript - Javascript函数不等待函数完成
- c++ - 初始化后,二维指针数组在元素中不包含值
- python - 将参与者网络输出缩放到 Keras Rl 中的动作空间边界
- mysql - 列出某些时期内的所有日期
- java - 如何在 Java swing 中使用鼠标?