有几种测试可以在任何软件上进行。主要有验收测试(或功能测试)和单元测试,这

些是大多数人在讨论软件测试话题时会想到的测试。但是有一些其他类型的测试,你可以

在你的项目中使用。我们将在本节稍后的部分简单地讨论其中的一些。

1.验收测试

验收测试(acceptance tests)专注于一个功能,并像黑盒一样处理软件。它只是确保软

件真的做了它应该做的,使用与用户相同的媒体并控制输出。这些测试通常是在开发周期

中写出来的,以验证应用程序是否满足需求。它们通常作为软件的检查清单运行。通常,

这些测试不是通过 TDD 完成的,而是由项目经理、QA 工作人员甚至客户构建的。在这种

情况下,他们通常被称为用户验收测试。

不过,它们使用 TDD 原则。可以在开发功能之前提供测试。开发人员得到一堆验收测

试,通常由功能规范制定,他们的工作是确保代码通过所有的测试。

用于编写这些测试的工具取决于软件提供的用户界面。Python 开发人员使用的一些流行工具有:

应用程序类型

工具

Web 应用 Selenium(用于使用 JavaScirpt 的 WEB UI)

Web 应用 zope.testbrowser(不测试 JS)

WSGI 应用 paste.test.fixture(不测试 JS)

Gnome 桌面应用

dogtail

Win32 桌面应用

pywinauto

2.单元测试

单元测试(unit tests)是完全适合测试驱动开发的底层测试。顾名思义,它们专注于测试

软件单元。软件单元可以被理解为应用程序代码的最小可测试部分。根据应用程序,软件单元

的大小可能从整个模块到单个方法或函数而不同,但通常单元测试是针对可能的最小代码片段

而编写。单元测试通常将被测单元(模块、类、功能等)与应用程序的其余部分和其他单元隔

离开来。当需要外部依赖时,例如 Web API 或数据库,它们通常被仿真对象或模拟对象所替换。

3.功能测试

功能测试(functional tests)专注于整个特性和功能,而不是小代码单元。它们的目的

类似于验收测试。主要区别是功能测试不一定需要使用与用户相同的接口。例如,当测试

Web 应用程序时,一些用户交互(或其后果)可以通过合成 HTTP 请求或直接访问数据库

来模拟,而不是模拟真实的页面加载和鼠标单击。

相比使用用户验收测试中使用的工具进行测试,这种方法通常更容易且更快。有限功

能测试的缺点是,它们往往不能充分覆盖应用程序,这些应用程序通常有着不同的抽象层

以及不同的组件。关注这些会合点的测试通常称为集成测试。

4.集成测试

集成测试(integration tests)比单元测试代表更高的测试级别。它们测试代码的绝大部分,并专注于许多应用程序层或者组件相互交互的情况。集成测试的形式和范围因项目的

架构和复杂性而异。例如,在小型并且整体式的项目中,这可以像运行更复杂的功能测试

一样简单,并允许它们与真正的后台服务(数据库、缓存等)交互,而不是模拟或仿真它

们。对于从多个服务构建的复杂场景或产品,真正的集成测试可能非常广泛,甚至需要在

反映生产的大型分布式环境中运行整个项目。

集成测试通常与功能测试非常相似,它们之间的边界非常模糊。很常见的是,集成测

试也在逻辑上测试单独的功能和特性。

5.负载和性能测试

负载测试和性能测试(Load and performance testing)提供了关于代码效率而不是其正

确性的客观信息。负载测试和性能测试的术语可以互换使用,但实际上第一个是指性能的

有限方面。负载测试的重点是测量代码在某些人为需求(负载)下的行为。这是一种非常

流行的测试 Web 应用程序的方式,其中负载被理解为来自真实用户或程序化客户端的 Web

流量。重要的是要注意,负载测试往往覆盖整个应用程序的请求,因此非常类似于集成和

功能测试。确保被测试的应用程序的组件完全通过验证,可以正常工作是很重要的。性能

测试通常是指测量代码性能的所有测试,甚至可以针对很小的代码单元。因此,负载测试

只是性能测试的一个特定子类型。

它们是特殊类型的测试,因为它们不提供二进制结果(失败/成功),而只提供一些性

能质量测量。这意味着,需要对单个结果进行解释,且/或与不同测试运行的结果进行比较。

在某些情况下,项目需求可能会对代码设置一些困难的时间或资源限制,但这并不会改变

这些类型的测试方法中始终存在某些任意解释的事实。

负载性能测试是开发需要满足一些服务级别协议的任何软件的一个很好的工具,因为

它有助于降低危及关键代码路径性能的风险。无论如何,它不应该被过度使用。

6.代码质量测试

代码质量没有一个明确说明代码的好坏的衡量标准。不幸的是,代码质量的抽象概念

不能用数字的形式来衡量和表示。但是,我们可以测量已知的与代码质量高度相关的软件

的各种指标。举几个例子,如下所示。

● 代码风格违例的数量。

● 文档数量。

● 复杂性指标,例如 McCabe 的圈复杂度。

● 静态代码分析警告的数量。

许多项目在其持续集成的工作流程中使用代码质量测试。好的并且流行的方法是至少测试基本指标(静态代码分析和代码风格违例),不允许将任何拉低指标的代码合并到主干。