在django中使用测试组件
1 简介
整体而言,测试网站是一项复杂的任务,
因为它由几层逻辑组成——从 HTTP 级别的请求处理到模型查询,
再到表单验证和处理以及模板渲染。
幸运地,Django 提供了一个测试框架,
其中包含一个基于Python 标准 unittest 库构建的小型类层次结构。
1 django测试模块
测试和测试方法有许多类型、级别和分类。最重要的自动化测试是:
- 单元测试
验证各个组件的功能行为,通常验证到类和功能级别。
- 回归测试
重现历史错误的测试。每个测试最初运行以验证 bug 是否已修复,然后重新运行以确保在以后对代码进行更改后未重新引入该 bug。
- 集成测试
验证组件分组在一起使用时的工作方式。集成测试知道组件之间所需的交互,但不一定知道每个组件的内部操作。它们可能涵盖组件的简单分组,直至整个网站。
尽管名称如此,但此测试框架适用于单元测试和集成测试。
Django 框架添加了 API 方法和工具来帮助测试 Web 和特定于 Django的行为。
这些允许您模拟请求、插入测试数据和检查应用程序的输出。
Django 还提供了用于使用不同测试框架的API(LiveServerTestCase)和工具,例如,您可以与流行的 Selenium 框架集成以模拟用户与实时浏览器的交互。
要编写测试,您需要从任何 Django(或 unittest)测试基类(SimpleTestCase、TransactionTestCase、TestCase、LiveServerTestCase)派生,
然后编写单独的方法来检查特定功能是否按预期工作(测试使用“assert”方法来测试表达式是否产生 or值,或者两个值是否相等,等等)。
启动测试运行时,框架将在派生类中执行所选的测试方法。
测试方法独立运行,在类中定义了常见的设置和/或拆卸行为,如下所示
我们访问测试客户端并发出GET请求。这模拟了您将使用浏览器发出的请求。
注意网络服务器无需运行即可进行单元测试。这测试客户端直接与Django框架一起使用的.
1.0 简单示例
大多数测试的最佳基类是django.test.TestCase。
此测试类在运行其测试之前创建一个干净的数据库,并在其自己的事务中运行每个测试函数。
该类还拥有一个测试客户端,可用于模拟用户在视图级别与代码交互。
在以下各节中,我们将重点介绍使用此 TestCase 基类创建的单元测试。
class DjTestClass(TestCase):
def setUp(self):
# Setup run before every test method.
pass
def tearDown(self):
# Clean up run after every test method.
pass
def test_something_that_will_pass(self):
self.assertFalse(False)
def test_something_that_will_fail(self):
self.assertTrue(False)
django.test.TestCase 类非常方便,但可能会导致某些测试比它们需要的慢,并非每个测试都需要设置自己的数据库或模拟视图交互。
熟悉可以使用此类执行的操作后,您可能希望将某些测试替换为可用的更简单的测试类。
2 小结
有关详细信息,包括测试不独立时该怎么做,请参阅DJANGO_TEST_PROCESSES
https://docs.djangoproject.com/en/4.0/ref/django-admin/#envvar-DJANGO_TEST_PROCESSES
参考 测试运行
https://docs.djangoproject.com/en/4.0/ref/django-admin/#test
- 点赞
- 收藏
- 关注作者
评论(0)