今天首席CTO笔记来给各位分享关于如何进行django单元测试的相关内容,其中也会对django test进行详细介绍,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、Django单元测试测试视图问题,怎么解决2、如何加快django单元测试的速度3、如何在Eclipse中利用pydev调试DjangoDjango单元测试测试视图问题,怎么解决
为什么要进行单元测试? 单元测试保证局部代码的质量 单元测试在隔离的前提下,分别对各个代码单元进行测试,能够达到其他测试不可能达到的测试完整性,从而保证了局部代码的质量。只有局部代码的质量得到了保证,软件产品的质量才可能得到保证。 单元测试改良项目代码的整体结构 要对代码进行单元测试,最起码的前提是代码能够隔离,也就是说,要具有一定的可测性,因此,单元测试是一种有效的约束机制,这种机制将有效地改良代码的整体结构。例如,如果把业务代码直接写在界面类中,将很难进行单元测试,随意的不合理的紧耦合也会造成难于测试,单元测试使这些不好的特性得于及时发现,从而很容易进行修正。可测性是高质量代码的首要特性,不具有可测性,也就无法衡量代码的正确性,有了可测性,也就基本上保证了代码的可扩展性、可复用性。 单元测试降低测试、维护升级的成本 错误越早发现,修复的代价越小,另一方面,如果代码经过了充分的单元测试,集成测试和系统测试就只需要关注设计方面的问题。自动回归测试也大量降低升级维护成本。 使开发过程适应频繁变化的需求 单元测试自然地使开发流程变得“敏捷”,这是因为,整体结构良好的代码具有较好的可扩展性,自动回归测试又能保证修改不会引入新的错误,因此可以适应频繁变动的需求,降低系统分析、架构设计和后期测试的压力。 单元测试有助于提升程序员的能力 对程序员来说,单元测试有利于养成缜密的思维习惯,及提高设计能力。 由谁进行测试?开发部门还是测试部门? 应该由开发部门进行单元测试! 由测试部门进行单元测试的问题 代价高:反复的重新理解代码需要大量的时间,反复的沟通也需要大量的成本。 人手不足:进行单元测试的人员需要具备编码能力,很多软件企业的测试部门都没有足够的人手。 耽误了测试部门对其他测试的准备工作:编码阶段,测试部门要为集成测试、系统测试等做好准备,如果测试部门陷在单元测试的“泥潭”里,很可能影响这些准备工作。 由开发部门进行单元测试的问题 担心影响开发进度:这是现实问题,但自动化的单元测试工具可以解决这个问题。 程序员不习惯做单元测试:这种习惯是可以理解的,但并不难改变,实际上,程序员写程序时都是要进行测试调试的,只不过通常比较零散和随意而已。 测试自己编写的代码,难于保证测试的效果:测试自己写的代码,通常会只测试正常的输入,因此难于保证测试的完整性,但自动化的单元测试工具,可以统计白盒覆盖,甚至提供用于找出遗漏的测试用例的工具,达到很高的测试完整性。只要达到了足够的测试完整性,那么,无论谁测试,效果都是一样的。 无论由哪个部门做单元测试,都要面对一些问题,但开发部门所面对的问题可以借助工具来解决,而由测试部门进行单元测试,要么无法真正实施,要么代价昂贵。 由测试部门进行单元测试为什么成本昂贵? 需多次重复理解程序 测试人员进行单元测试时必须理解程序功能甚至代码逻辑;充分的单元测试通常会发现很多细小的错误,程序员修改代码时,又要再次理解程序。理解程序是很耗费时间的。 反复沟通需要大量时间成本 单元测试发现的错误一般是小Bug,但数量可能很多,修改错误一般由程序员进行,测试人员还要确认,这些反复沟通也需要很多的时间。 不利于发挥单元测试对代码结构的约束机制 如果等编码基本完成再由测试部门进行单元测试,也就不能及时发挥单元测试对代码整体结构的约束效果,测试部门拿到代码时,往往会发现难于测试。 耽误测试部门对其他测试的准备工作: 编码阶段,测试部门要为集成测试、系统测试等做好准备,如果测试部门陷在单元测试的“泥潭”里,很可能影响这些准备工作。 基于以上理由,即使测试部门人手充裕,仅仅从效益来考虑,也不应该由测试部门进行单元测试。如果测试部门本来就人力不充裕(进行单元测试的人员需具备编码能力),勉强由测试部门进行单元测试,结果往往是----没有结果。 由开发部门进行单元测试能保证测试效果吗? 程序员测试自己编写的代码,往往只考虑“正常状况”,这当然会影响测试效果。但如果所用的单元测试工具能够统计各种白盒覆盖率,就能检查测试效果。当然,只做到这一点还是不够的,因为白盒覆盖具有逾后逾难的特点,达到一定的覆盖率后,覆盖率的提升会很困难。如果测试工具功能足够强大,能提供工具帮助用户快速地设计测试用例,达到完整的白盒覆盖,那么测试效果就能得到完全的保证。 实际上,如果没有充分的统计数据,没有达到足够的测试完整性,那么由谁做单元测试,效果都不能保证。 进行单元测试,关键是要达到比较高的输入覆盖,这样,无论由谁测试,效果都是一样的。
如何加快django单元测试的速度
首先你看看是否可以进行方法优化。
其次你再看看是否可以将测试在多个进程同时运行。
再或者你可以先运行时间段的测试,再运行时间长的测试。
如果解决了您的问题请采纳!
如果未解决请继续追问
如何在Eclipse中利用pydev调试Django
1. 调试环境安装
Ø PyDev插件安装
在主菜单“Help”—“Software updates…”中添加http //pydev sf net/updates自动下载安装。
Ø 安装完毕配置
在主菜单“window”—“preference”中
2. 创建Pydev Django project
Ø 创建新的
如果已经有了一个django的目录结构,要生成eclipse的工程,可以通过
或者
新建工程。
创建一个即可。
Ø 导入已创建的
如果已有一个eclipse django project指向该目录,可以通过导入方式来引用该project。
Ø 工程设置
工程新建或导入完毕,在工程右键中,选择“属性”,继续配置工程:
顺便配置下project type:
3. 调试设置
可以通过如下配置来实现Web调试,或者一个功能单独调试:
Ø Web调试方式配置
Web调试,实际上就是选用内部的“manage.py runserver --noreload”功能进行调试。
设置完毕,再每次运行该调试选项即可。运行后控制台中出现如下说明:
然后在浏览器中选定录入等相关URL,在需要调试地方打断点即可。
在pydev中调试,修改代码后不能立刻起作用,必须重新调试才行。这也是 noreload的作用。
Ø 单个功能验证
有时只想单独运行某个功能,可以将该功能单独弄一个python函数进行运行。Python的函数调试很简单;但是对于django,因为脱离了Web的配置,调试一个django函数的时候总是因为找不到相关的设置而失败,可以在代码中指定该设置即可。
测试函数:
#导入django project设置
#django.bin.mypython为django工程所在目录
import os
os.environ['DJANGO_SETTINGS_MODULE']='django.bin.mypython.settings'
#说明,如果用到序列化方法,上述方法会提示很多应用模块找不到;
#建议采用如下方法是最好的
from django.core.management import setup_environ
import django.bin.mypython.settings
setup_environ(django.bin.mypython.settings)
#但是最后会出现“Exception exceptions.AttributeError: "'NoneType' object #has no attribute 'print_exc'" in bound method Signal._remove_receiver #of django.dispatch.dispatcher.Signal object at 0x01476890 ignored”。#无解。
#测试函数,注意没有web调用的request等
from django.core import serializers
from mypython.addressbook.models import Address
def test():
objs = Address.objects.all()
str = serializers.serialize("json", objs) #序列化为json对象
print str
#运行测试函数
test()
设置调试项
然后运行即可。
可以借由此进行测试先行,单元测试。
结语:以上就是首席CTO笔记为大家介绍的关于如何进行django单元测试和django test的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。