Django中的测试一

Django偏爱使用Python标准库中内置的unittest模块来编写测试,当然在Django中进行web测试也可以使用另一个python测试框架,Django提供了用于这种集成的API和工具。使用python标准模块unittest的单元测试Django中创建应用(mylists)的测试写在应用目录(mylists/)下的tests.py文件中。测试系统会自动在所有以tests开头的文件里...
摘要由CSDN通过智能技术生成

Django偏爱使用Python标准库中内置的unittest模块来编写测试,当然在Django中进行web测试也可以使用另一个python测试框架,Django提供了用于这种集成的API和工具。

使用python标准模块unittest的单元测试

Django中创建应用(mylists)的测试写在应用目录(mylists/)下的tests.py文件中。测试系统会自动在所有以tests开头的文件里寻找并执行测试代码。
Django中创建的测试类都继承自django.test.TestCase,这个类又继承自unittest.TestCase,编写好测试类及对应的以tests开头的测试用例后,可以使用以下命令执行:

python manage.py test mylists

执行命令,测试主要经过了以下一些过程:
1)命令将会寻找mylists应用里(mylists目录下)的测试代码;
2)找到django.test.TestCase的子类;
3)创建一个特殊的数据库供测试使用;
4)在类中寻找测试方法–以tests开头的方法
5)执行方法中的内容(创建变量、实例、断言等)

注意⚠️:如果测试用例依赖数据库连接,比如创建或查询模型,那么编写的测试类需继承自django.test.TestCase,而不是直接继承unittest.TestCase,而如果不依赖数据库,直接继承unittest.TestCase就好,因为使用unittest.TestCase可以避免在交互中运行每个测试用例及刷新数据库的成本。
当然,测试时创建的数据库不是开发时实际的数据库,而是专门为测试创建的空白数据库,当所有的测试都执行完成后,测试的数据库就会销毁。
可以使用命令:

python manage.py test --keepdb

保留测试数据库。
如果在测试用例执行过程中,使用了Ctrl+C中断了测试的执行,用于测试的数据库没有被自动销毁,当运行下一次测试时,会被询问是否reuse or destory the database。使用命令:

python manage.py test --noinput

会强制禁止显示该提示并且会自动销毁之前的测试数据库。

Django测试工具

测试工具之Client

Django提供了一个供测试使用的Client来模拟用户和视图层代码的交互。
Client测试视图函数以及可以和基于django的应用编程交互。
Client测试工具可以完成下列事情:
1)模拟Get和Post请求,观察响应结果–从HTTP到页面内容;
2)查看重定向链以及在每一步确认URL和状态码;
3)用一个包括特定值的模板内容来测试一个被Django模板渲染的请求。

注意⚠️:django的client测试工具不是替代selenium或其他网页测试工具,client有自己的关注点,简要的说有以下两点:
1)使用django的client建立正确的模板,并且向模板传递正确的内容;
2)使用selenium这类web自动化测试框架来测试渲染的HTML以及网页行为,django也提供了对这些框架的支持,如LiveServerTestCase。

使用Client的一个简单例子:

from django.test import Client
c = Client()
response = c.post('/login/', {
   'username' : 'banana', 'password' : '123456'})
response.status_code

response = c.get('/user/details/')
response.content

注意⚠️:
测试工具Client不要求网页服务器在运行着,这是因为client避免了HTTP的开销直接处理Django框架,这对快速运行单元测试是有帮助的;
另外,当需要检索页面时,只需要给定URL的路径,不需要整个域名,比如:

c.get('/login/')

正确,但以下这种方法就是错误的

c.get('https://www.mysite.com/login/')

当然,client测试工具不能检索哪些不是由django项目启动的web页面,如果需要检索这些页面,可以使用python标准库urllib或urllib2。
为解析URL,client会使用由你ROOT_URLCONF配置中的URLconf。
默认情况下,client将禁用任何由你的站点执行的CSRF检查,若想要client测试执行CSRF检查,可以在创建client时添加参数:

csrf_client = Client(enforce_csrf_checks = True)
发出请求

Client类原型是
class Client(enforce_csrf_checks=False, json_encoder=DjangoJSONEncoder, **defaults)源代码
一般情况下,创建client实例只需使用默认参数即可。

c = Client()

可调用的方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值