
有几种测试可以在任何软件上进行。主要有验收测试或功能测试和单元测试这些是大多数人在讨论软件测试话题时会想到的测试。但是有一些其他类型的测试你可以在你的项目中使用。我们将在本节稍后的部分简单地讨论其中的一些。验收测试验收测试acceptance tests专注于一个功能并像黑盒一样处理软件。它只是确保软件真的做了它应该做的使用与用户相同的媒体并控制输出。这些测试通常是在开发周期中写出来的以验证应用程序是否满足需求。它们通常作为软件的检查清单运行。通常这些测试不是通过 TDD 完成的而是由项目经理、QA 工作人员甚至客户构建的。在这种情况下他们通常被称为用户验收测试。不过它们使用 TDD 原则。可以在开发功能之前提供测试。开发人员得到一堆验收测试通常由功能规范制定他们的工作是确保代码通过所有的测试。用于编写这些测试的工具取决于软件提供的用户界面。Python 开发人员使用的一些流行工具有应用程序类型工具Web 应用Selenium用于使用 JavaScirpt 的 WEB UIWeb 应用zope.testbrowser不测试 JSWSGI 应用paste.test.fixture不测试 JSGnome 桌面应用dogtailWin32 桌面应用pywinauto单元测试单元测试unit tests是完全适合测试驱动开发的底层测试。顾名思义它们专注于测试软件单元。软件单元可以被理解为应用程序代码的最小可测试部分。根据应用程序软件单元的大小可能从整个模块到单个方法或函数而不同但通常单元测试是针对可能的最小代码片段而编写。单元测试通常将被测单元模块、类、功能等与应用程序的其余部分和其他单元隔离开来。当需要外部依赖时例如 Web API 或数据库它们通常被仿真对象或模拟对象所替换。功能测试功能测试functional tests专注于整个特性和功能而不是小代码单元。它们的目的类似于验收测试。主要区别是功能测试不一定需要使用与用户相同的接口。例如当测试Web 应用程序时一些用户交互或其后果可以通过合成 HTTP 请求或直接访问数据库来模拟而不是模拟真实的页面加载和鼠标单击。相比使用用户验收测试中使用的工具进行测试这种方法通常更容易且更快。有限功能测试的缺点是它们往往不能充分覆盖应用程序这些应用程序通常有着不同的抽象层以及不同的组件。关注这些会合点的测试通常称为集成测试。集成测试集成测试integration tests比单元测试代表更高的测试级别。它们测试代码的绝大部分并专注于许多应用程序层或者组件相互交互的情况。集成测试的形式和范围因项目的架构和复杂性而异。例如在小型并且整体式的项目中这可以像运行更复杂的功能测试一样简单并允许它们与真正的后台服务数据库、缓存等交互而不是模拟或仿真它们。对于从多个服务构建的复杂场景或产品真正的集成测试可能非常广泛甚至需要在反映生产的大型分布式环境中运行整个项目。集成测试通常与功能测试非常相似它们之间的边界非常模糊。很常见的是集成测试也在逻辑上测试单独的功能和特性。负载和性能测试负载测试和性能测试Load and performance testing提供了关于代码效率而不是其正确性的客观信息。负载测试和性能测试的术语可以互换使用但实际上第一个是指性能的有限方面。负载测试的重点是测量代码在某些人为需求负载下的行为。这是一种非常流行的测试 Web 应用程序的方式其中负载被理解为来自真实用户或程序化客户端的 Web流量。重要的是要注意负载测试往往覆盖整个应用程序的请求因此非常类似于集成和功能测试。确保被测试的应用程序的组件完全通过验证可以正常工作是很重要的。性能测试通常是指测量代码性能的所有测试甚至可以针对很小的代码单元。因此负载测试只是性能测试的一个特定子类型。它们是特殊类型的测试因为它们不提供二进制结果失败/成功而只提供一些性能质量测量。这意味着需要对单个结果进行解释且/或与不同测试运行的结果进行比较。在某些情况下项目需求可能会对代码设置一些困难的时间或资源限制但这并不会改变这些类型的测试方法中始终存在某些任意解释的事实。负载性能测试是开发需要满足一些服务级别协议的任何软件的一个很好的工具因为它有助于降低危及关键代码路径性能的风险。无论如何它不应该被过度使用。代码质量测试代码质量没有一个明确说明代码的好坏的衡量标准。不幸的是代码质量的抽象概念不能用数字的形式来衡量和表示。但是我们可以测量已知的与代码质量高度相关的软件的各种指标。举几个例子如下所示。● 代码风格违例的数量。● 文档数量。● 复杂性指标例如 McCabe 的圈复杂度。● 静态代码分析警告的数量。许多项目在其持续集成的工作流程中使用代码质量测试。好的并且流行的方法是至少测试基本指标静态代码分析和代码风格违例不允许将任何拉低指标的代码合并到主干。