自动化测试是什么?
测试是检查代码操作的简单例程。
测试在不同的级别上运行。一些测试可能应用于一个微小的细节(特定的模型方法返回值是否像预期的那样),而另一些测试则检查软件的整体操作(在站点上的用户输入序列是否会产生预期的结果?),它使用shell来检查方法的行为,或者运行应用程序并输入数据来检查它的行为。
自动化测试的不同之处在于,测试工作是由系统完成的。您可以创建一组测试,然后当您对应用程序进行更改时,您可以检查您的代码是否仍然按照您最初的预期工作,而无需执行耗时的手工测试。
为什么你需要创建测试
那么为什么要创建测试,为什么现在呢?
你可能会觉得你已经有足够的时间去学习python/django了,还有一件事要学习和做,可能看起来是压倒性的,也许是不必要的。毕竟,我们的poll 应用现在很愉快; 经历创建自动化测试的麻烦不会使它工作得更好。如果创建poll应用程序是您将做的最后一点Django编程,那么true,您不需要知道如何创建自动化测试。但是,如果不是这样,现在是学习的好时机。
测试可以节省你的时间
在一定程度上,“检查它似乎起作用”将是一个令人满意的测试。在更复杂的应用程序中,组件之间可能有数十个复杂的交互。
任何这些组件的更改都可能对应用程序的行为产生意想不到的后果。检查它是否仍然有效,可能意味着你要运行你的代码的功能,使用20个不同的测试数据,以确保你没有破坏什么——这不是很好地利用你的时间。
当自动化测试可以在几秒钟内完成这项工作时,这一点尤其正确。如果出现问题,测试也将有助于识别导致意外行为的代码。
有时候,把自己从高效的、创造性的编程工作中剥离出来,去面对那些单调乏味、毫无激情的编写测试的工作,尤其是当你知道你的代码运行正常的时候,这似乎是一件苦差事。
然而,编写测试的任务要比花几个小时手动测试应用程序或试图确定新引入问题的原因要更有成就感。
测试不仅能识别问题,还能防止问题
把测试仅仅看作是发展的消极方面是错误的。
如果没有测试,应用程序的目的或预期行为可能是相当不透明的。即使是你自己的代码,你有时也会发现自己在里面戳了一下,试图找出它到底在做什么。
测试改变;他们从内部点亮你的代码,当出现问题时,他们会把注意力集中在错误的部分——即使你甚至没有意识到它出了问题。
测试使您的代码更具吸引力
您可能已经创建了一个优秀的软件,但是您会发现许多其他开发人员会拒绝查看它,因为它缺乏测试;没有测试,他们就不会相信。Django的原始开发者之一Jacob Kaplan-Moss说:“没有测试的代码被设计破坏了。”
其他开发人员希望在他们认真对待之前在您的软件中看到测试,这是您开始编写测试的另一个原因。
测试帮助团队一起工作
前面的要点是根据维护应用程序的单个开发人员的观点编写的。复杂的应用程序将由团队维护。测试可以保证同事不会在无意中破坏你的代码(而且你不知道他们的代码是不会破坏的)。
基本测试策略
有很多方法可以进行编写测试。
一些程序员遵循一种叫做“测试驱动开发”的规程;实际上,他们在编写代码之前就已经编写了测试。这听起来似乎有违常理,但实际上它与大多数人通常会做的事情相似:他们描述了一个问题,然后创建了一些代码来解决这个问题。测试驱动的开发只是在Python测试用例中形式化了问题。
更常见的情况是,测试新手将创建一些代码,然后决定应该进行一些测试。也许在更早的时候写一些测试会更好,但是开始的时候永远不会太迟。
有时很难弄清楚从哪里开始编写测试。如果您已经编写了数千行Python,那么选择要测试的东西可能并不容易。在这种情况下,在下一次修改时编写第一个测试是很有成效的,或者当您添加一个新特性或修复一个bug时。