Django 测试:查看创建错误响应的回溯

2023-12-03

该模式来自 django 文档:

class SimpleTest(unittest.TestCase):
    def test_details(self):
        client = Client()
        response = client.get('/customer/details/')
        self.assertEqual(response.status_code, 200)

From: https://docs.djangoproject.com/en/1.8/topics/testing/tools/#default-test-client

如果测试失败,错误消息没有多大帮助。例如,如果 status_code 是 302,那么我看到302 != 200.

现在的问题是:错误的 HTTPResponse 是在哪里创建的?

我想查看解释器的堆栈跟踪,其中创建了错误的 HTTPResponse 对象。

我阅读了文档Django 的断言但没有找到匹配的方法。

Update

这是一个普遍的问题:如果断言失败,如何立即看到想要的信息?由于这些断言(self.assertEqual(response.status_code, 200))很常见,我不想开始调试。

2016年更新

我又产生了同样的想法,发现当前的答案并不是 100% 容易。我写了一个新的答案,它有一个简单易用的解决方案(django web 客户端的子类):Django:assertEqual(response.status_code,200):我想查看有用的函数调用堆栈


我认为这可以通过创建一个来实现TestCaseMonkeypatches 的子类django.http.response.HttpResponseBase.__init__()记录堆栈跟踪并将其存储在Response对象,然后写一个assertResponseCodeEquals(response, status_code=200)方法,在无法显示位置时打印存储的堆栈跟踪Response被创建。

我实际上可以自己使用一个解决方案,并且可能会考虑实施它。

更新: 这是一个 v1 实现,它可以使用一些改进(例如,仅打印堆栈跟踪的相关行)。

import mock
from traceback import extract_stack, format_list
from django.test.testcases import TestCase
from django.http.response import HttpResponseBase

orig_response_init = HttpResponseBase.__init__

def new_response_init(self, *args, **kwargs):
    orig_response_init(self, *args, **kwargs)
    self._init_stack = extract_stack()

class ResponseTracebackTestCase(TestCase):
    @classmethod
    def setUpClass(cls):
        cls.patcher = mock.patch.object(HttpResponseBase, '__init__', new_response_init)
        cls.patcher.start()

    @classmethod
    def tearDownClass(cls):
        cls.patcher.stop()

    def assertResponseCodeEquals(self, response, status_code=200):
        self.assertEqual(response.status_code, status_code,
            "Response code was '%s', expected '%s'" % (
                response.status_code, status_code,
            ) + '\n' + ''.join(format_list(response._init_stack))
        )

class MyTestCase(ResponseTracebackTestCase):
    def test_index_page_returns_200(self):
        response = self.client.get('/')
        self.assertResponseCodeEquals(response, 200)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 测试:查看创建错误响应的回溯 的相关文章

  • 如何在 Ubuntu 上安装 Python 模块

    我刚刚用Python写了一个函数 然后 我想将其做成模块并安装在我的 Ubuntu 11 04 上 这就是我所做的 创建 setup py 和 function py 文件 使用 Python2 7 setup py sdist 构建分发文
  • Django modelForm 中的文件上传

    我正在尝试在 appengine django 中上传文档 使用纯 django 代码成功上传文档 使用 python manage py runsever 但是当我尝试使用 appengine 项目运行 django 时 它给了我错误 E
  • 获取单个方程的脚本

    在文本文件中输入 a 2 8 b 3 9 c 4 8 d 5 9 e a b f c d g 0 6 h 1 7 i e g j f h output i j 期望的输出 输出 2 8 3 9 0 6 4 8 5 9 1 7 如果输入文件名
  • 类属性在功能上依赖于其他类属性

    我正在尝试使用静态类属性来定义另一个静态类属性 我认为可以通过以下代码来实现 f lambda s s 1 class A foo foo bar f A foo 然而 这导致NameError name A is not defined
  • 如何自动替换多个文件的文本内容中的字符?

    我有一个文件夹 myfolder包含许多乳胶表 我需要替换其中每个字符 即替换任何minus sign by an en dash 只是为了确定 我们正在替换连字符INSIDE该文件夹中的所有 tex 文件 我不关心 tex 文件名 手动执
  • NLTK、搭配问题:需要解包的值太多(预期为 2)

    我尝试使用 NLTK 检索搭配 但出现错误 我使用内置的古腾堡语料库 I wrote alice nltk corpus gutenberg fileids 7 al nltk corpus gutenberg words alice al
  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • VSCode pytest 测试发现失败

    Pytest 测试发现失败 用户界面指出 Test discovery error please check the configuration settings for the tests 输出窗口显示 Test Discovery fa
  • 如何在 Windows 上使用 Python 3.6 来安装 Python 2.7

    我想问一下如何使用pip install对于 Python 2 7 当我之前安装并使用 Python 3 6 时 我现在必须使用 Windows 上的 Python 版本 pip install 继续安装 Python 3 6 我需要使用以
  • 如何为多组精灵创建随机位置?

    我尝试使用 blit 和 draw 方法进行 for 循环 并为 PlayerSprite 和 Treegroup 使用不同的变量 for PlayerSprite in Treegroup surface blit PlayerSprit
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di
  • 在pycharm中调试python代码

    这个问题类似于this https stackoverflow com questions 10240018 how to use pycharm to debug python script一 我正在尝试调试pyethapp https
  • WindowsError:[错误 5] 访问被拒绝

    我一直在尝试终止一个进程 但我的所有选项都给出了 Windows 访问被拒绝错误 我通过以下方式打开进程 一个python脚本 test subprocess Popen sys executable testsc py 我想杀死那个进程
  • 使用 lambda 函数更改属性值

    我可以使用 lambda 函数循环遍历类对象列表并更改属性值 对于所有对象或满足特定条件的对象 吗 class Student object def init self name age self name name self age ag
  • 使用 Doc2vec 后如何解释 Clusters 结果?

    我正在使用 doc2vec 将关注者的前 100 条推文转换为矢量表示形式 例如 v1 v100 之后 我使用向量表示来进行 K 均值聚类 model Doc2Vec documents t size 100 alpha 035 windo
  • Django-celery/RabbitMQ 在哪里存储任务结果?

    我的 celery 数据库后端设置是 CELERY RESULT BACKEND database CELERY RESULT DBURI mysqlite db 我使用 RabbitMQ 作为我的消息发送器 似乎没有任何结果存储在数据库中
  • 从 dask 数据框中的日期时间序列获取年份和星期?

    如果我有一个 Pandas 数据框和一个日期时间类型的列 我可以按如下方式获取年份 df year df date dt year 对于 dask 数据框 这是行不通的 如果我先计算 像这样 df year df date compute
  • PyQt 中的线程和信号问题

    我在 PyQt 中的线程之间进行通信时遇到一些问题 我使用信号在两个线程 发送者和监听者 之间进行通信 发送者发送消息 期望被监听者接收 但是 没有收到任何消息 谁能建议可能出了什么问题 我确信这一定很简单 但我已经环顾了几个小时但没有发现
  • 具有指定置信区间的 Seaborn 条形图

    我想在 Seaborn 条形图上绘制置信区间 但我已经计算出置信区间 如何让 Seaborn 绘制我的置信区间而不是尝试自行计算它们 例如 假设我有以下 pandas DataFrame x pd DataFrame Group 1 0 5
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • 如何在tax_query和meta_query WordPress中给出OR关系

    我想给出之间的 OR 关系tax query and meta query post args array post type gt post order gt DESC meta query gt array relation gt OR
  • .sqlite 和 .storedata 之间有什么区别

    当您使用核心数据在 Xcode 上启动新的 iOS 项目时 它会使用扩展名初始化数据库 sqlite 当您对 OSX 的新项目执行相同的操作时 数据库的扩展名是 storedata 两者有什么区别吗 谢谢 iOS 上的 CoreData 仅
  • Dialogflow CX 中的可单击选项

    是否可以显示可点击的选项 in Dialogflow CX 如果 是 我可以举个例子 我在 Dialogflow CX 中创建了一个简单的代理 当用户输入城市名称时 我想列出应该是的密码可点击的 我怎样才能做到这一点Dialogflow C
  • String.Split 与字符串?

    我有一个可能非常简单的问题 我想做一个经典String Split 但是是字符串 而不是字符 喜欢string Split word 并返回一个数组 就像我所做的那样string Split x 您可以使用String Split stri
  • 验证器的 Spring 单元测试问题

    我正在尝试为我拥有的验证器类编写单元测试 因此 在我的 UniqueEmailValidator 类中 我注入了一个 Service 组件来检查它是否存在 AllArgsConstructor public class UniqueEmai
  • 对 c# .net 中的服务结果进行正确的空检查

    有贾里德 帕森斯的推文谁是 C 编译器开发人员 该推文声称我们应该使用 is object 作为非空检查 我的问题是为什么会这样 如果我从服务调用中得到结果 我应该运行 is object 检查而不是 null 吗 根据我的理解和我在微软文
  • 如何使用OpenSSL的SHA256函数

    我正在编写一个程序来熟悉 OpenSSL libncurses 和 UDP 网络 我决定使用 OpenSSL 的 SHA256 来熟悉行业加密标准 但我在使其正常工作时遇到了问题 我已将错误与 OpenSSL 与编译程序的链接隔离开来 我正
  • MySQL:使用 BEGIN&COMMIT 插入同一查询中的多个表

    我想使用 BEGIN 和 COMMIT 在同一查询中插入多个表 看来错误是在开始时发生的 这是我的 SQL 命令 BEGIN INSERT INTO Product pName pBrand pCategory pSize pQuantit
  • 如何获取字段类型和值?

    我目前正在尝试使用 mysql php 构建一个表单 下面是我到目前为止的代码的一部分 BLOCK 1 proceso mysqli fetch assoc result my query returns only one row
  • 默认模板类参数混淆了 g++?

    昨天 我遇到了 g 3 4 6 编译器问题 我使用 Intel 9 0 编译器编译的代码没有出现问题 下面的代码片段显示了发生的情况 template
  • 替代 tkinter.dooneevent

    我正在将一个程序 VMD 视觉分子动力学 移植到 Python 3 x 该程序是用 C 编写的 并且嵌入了 Python 和 TCL 解释器 其大部分 UI 是使用 TCL TK 框架和 OpenGL 进行硬编码的 因此 UI 刷新是手动完
  • 检查电子邮件地址在 iOS 上是否有效[重复]

    这个问题在这里已经有答案了 可能的重复 在 iOS 2 0 上的 Objective C 中验证电子邮件地址的最佳实践 我正在开发一个 iPhone 应用程序 我需要用户在登录时提供他的电子邮件地址 检查电子邮件地址是否有效的最佳方法是什么
  • 如何通过 SSH 连接到 colima 实例

    查找 SSH 所需的步骤colima 这太新了 文档有点匮乏 我需要复制卷并运行scp看起来很理想 最快的答案 colima ssh 使用快速回答ssh tmpconfig mktemp limactl show ssh format co
  • 旋转 UIButton

    我一直在尝试使用以下方法旋转按钮 IBAction rotate id sender CGPoint pencilCenter pencil center pencil setCenter pencilCenter CGFloat floa
  • Java/Mongodb 身份验证

    我看到很多教程展示了如何使用 Java 在 mongodb 中进行身份验证 我的 mongodb 配置为启用身份验证 在控制台中我使用 使用管理员 db auth myUser newPassword 并且运行良好 在java中 在访问的每
  • 按组的平均值划分数据列

    如果我有一个数据框 例如 group rep 1 4 each 10 data c seq 1 10 1 seq 5 50 5 seq 20 11 1 seq 0 3 3 0 3 DF data frame group data 现在 我想
  • 检测 PHP 变量不足:FALSE、NULL、unset()、empty()?

    定义 PHP 中不存在某个值或不足以满足应用程序需求的最佳方法是什么 var NULL var array var FALSE 最好的测试方法是什么 isset var empty var if var NULL if var 将变量初始化
  • System.in.read实际返回什么?

    什么是 System in read 返回 这文档 says 返回 数据的下一个字节 如果到达流末尾则为 1 49是字符的 ASCII 值1 它是第一个字节的值 The stream of bytes that is produced wh
  • 如何使用 Android 从 Firebase 数据库获取嵌套子项?

    我想从这种类型的 JSON 树中获取所有允许的子项的列表 databaseRef child Users child Allowded addValueEventListener new ValueEventListener Overrid
  • Django 测试:查看创建错误响应的回溯

    该模式来自 django 文档 class SimpleTest unittest TestCase def test details self client Client response client get customer deta