首页 > 编程问答 >如何在 Django 中调试失败的测试?

如何在 Django 中调试失败的测试?

时间:2024-07-28 16:31:39浏览次数:14  
标签:python django unit-testing testing

如何调试我的测试?例如,我通过 POST 创建一个条目并期望它验证并返回特定页面。它可以在浏览器和 shell 中工作,但测试是唯一失败的事情(讽刺的是!)。我想打印对控制台的响应或其他东西,这样我就可以读取错误或你有什么。但我只能看到我 print 中的东西,例如视图。

不确定是否有必要,但这是来自 tests.py 的有问题的测试代码:

    resp = self.client.post('/meal/invite/', 
        {'summary': 'Test munch', 'when': now(), 'max_diners': '1', 'description': 'Munchies'}, follow=True)
    self.assertEqual(resp.status_code, 200)
    self.assertContains(resp, 'Test munch', 1)
    self.assertContains(resp, 'You are hosting this meal', 1)

最终的断言是不正确的。如果我将其更改为原始表单页面中显示“需要字段”错误的值,则它会通过。我只是看不到我错过了什么。

我还有一些其他测试正在运行,但我只是不知道如何调试它。

它是如何完成的?


在 Django 中调试失败的测试与调试任何其他 Python 代码非常相似。手头上的关键工具是 pdb 模块(Python 调试器) 测试客户端提供的断言方法 。以下是如何执行此操作:

  1. 使用 pdb 设置断点:

  2. 在你的测试方法中,在你想要检查代码的地方导入 pdb 并插入 pdb.set_trace()

```python import pdb

class MyTests(TestCase): def test_my_view(self): # ... 你的测试代码 ...

       pdb.set_trace()  # 将在断点处暂停执行

       resp = self.client.post('/meal/invite/', 
           {'summary': 'Test munch', 'when': now(), 'max_diners': '1', 'description': 'Munchies'}, follow=True)
       # ... 你的断言 ...

```

  • 当你运行你的测试时,执行将在 pdb.set_trace() 行暂停。

  • 使用 pdb 命令检查你的代码:

一旦你处于 pdb 提示符中,你可以使用这些命令: * p <expression> 打印表达式的值。例如, p resp.content 将显示响应的 HTML 内容。 * n 执行下一行代码。 * s 进入函数调用(如果当前行是一个函数调用)。 * c 继续执行,直到遇到下一个断点或测试结束。 * l 显示当前代码上下文。 * q 退出调试器。

  1. 使用断言方法:

Django 的测试客户端提供了一些额外的断言方法,这些方法在你调试响应时非常有用:

  • assertTemplateUsed(response, template_name) 断言视图使用了特定的模板。
  • assertRedirects(response, expected_url) 断言响应被重定向到特定的 URL。
  • assertFormError(response, form_name, field_name, errors) 断言表单中存在特定的错误。

使用这些断言方法可以帮助你缩小错误的范围,并验证你的视图是否按预期运行。

适用于你的情况:

在你的情况下,看起来表单验证可能出现问题。尝试将 pdb.set_trace() 放在你进行 POST 请求的行之前,并检查以下内容:

  • self.client.post() 的响应: 检查 resp.status_code 是否为预期值( 200 表示成功, 201 表示创建)。如果它是像 302 这样的重定向,则表单可能未被验证,并且你正在被重定向回表单页面。打印 resp.content 以查看返回的实际 HTML,并查看是否与预期相符。
  • 表单数据: 使用 p request.POST 来确保你的表单数据被正确发送到视图中。
  • 表单验证逻辑: 如果你的视图中包含自定义表单验证逻辑,请逐步执行它以确保其按预期工作。

通过使用 pdb 和 Django 的测试客户端断言,你可以全面了解你的测试失败的原因,并有效地调试你的 Django 代码。

标签:python,django,unit-testing,testing
From: 12981990

相关文章

  • 如何在 Python 中创建正确显示素数的代码?
    素数是只能被自身和1整除的数。例如,数字5是素数,因为它只能被1整除和5.然而,数字6不是质数,因为它可以被整除通过2和3。编写一个名为is_prime的布尔函数,它接受一个整数作为参数如果参数是素数则返回true,否则返回false。使用程序中提示用户输入数字然后输......
  • Django提示mysql版本过低:django.db.utils.NotSupportedError: MySQL 8 or later is re
    这个提示只是Django的版本检测提示,把它注释掉就好了。全局搜索函数:check_database_version_supported() 文件路径是:django_project\dj01\venv\Lib\site-packages\django\db\backends\base\base.py找到第二个,就是就是使用的那个,把它注释了: definit_connection_sta......
  • 在 MySQL Workbench 中升级 python
    MySQLWorkbench中的python版本不断受到安全标记,因为它不是最新版本。我的电脑上有最新版本,但在MySQL文件中它似乎是旧版本。我怎样才能更新,使其与我的电脑版本相同?尝试看看是否可以更新python,但没有运气很遗憾,你无法直接升级MySQLWorkbench内置的Python版本......
  • 使用 DigitalOcean Spaces 在 Django 应用程序中初始化 boto3 会话时出错
    当我尝试将Django应用程序配置为使用DigitalOceanSpaces处理静态文件和媒体文件时,我遇到了问题。这是我的settings.py文件的相关部分:importboto3frombotocore.exceptionsimportNoCredentialsError,PartialCredentialsErrorfrombotocore.clientimportCo......
  • Python科研武器库 - 文件/路径操作 - 判断路径是否存在
    使用场景:在科研中,用Python处理数据的一个核心目的是批量处理,批量处理节省了研究者大量的时间和精力,不然,还不如手动一个个地去处理。批量处理通常要求数据整体较为规整,能够进行统一的处理操作,但实际数据中总存在一些不规则的样本,甚至有些样本的命名都存在不规范,例如,整个数据集......
  • python刷题常用模板
    #=====================================素数筛Begin=====================================#MAXN=1000prime=[]isprime=[True]*(MAXN+1)defeuler():isprime[1]=Falseforiinrange(2,MAXN+1):ifisprime[i]:prime.append(i)......
  • [附开题]flask框架的全国汽车销售信息查询系统的设计与实现7m1w0(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着中国汽车市场的蓬勃发展,汽车品牌的日益丰富以及消费者购车需求的多样化,汽车销售信息的准确性与时效性成为了市场关注的焦点。传统汽车......
  • [附开题]flask框架的校园停车场管理系统的设计与实现61m0e(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的普及和校园规模的不断扩大,校园内车辆数量急剧增加,停车难问题日益凸显。传统的人工停车场管理模式已难以满足现代校园对高效......
  • [附开题]flask框架的校园学生管理系统s8h32(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着教育技术的不断进步和高校规模的不断扩大,传统的学生管理方式已难以满足现代校园管理的需求。学生数量激增、课程种类繁多、选课流程复......
  • [附开题]flask框架的校园疫情管理系统92tl0(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着新冠疫情的持续影响,校园作为人群密集、流动性大的场所,其疫情防控工作显得尤为重要。传统的手工记录和口头报告方式已难以满足当前复杂......