2.2 设计合适的性能测试环境

上述的内容中我们讲述了如何选择“合适的性能测试工具”,接下来我们需要考虑性能测试环境。在理想的情况下,它应该与生产环境一致,但是由于各种原因,几乎很难做到这一点。

服务器的数量和规模(可能是最常见的原因)

由于成本和复杂性方面的原因,在部署环境上提供一个与真实环境相同的服务器类型和架构,常常是不太现实的。但是,即使您无法做到在每一个应用层上都使物理服务器的数量和真实环境相等,那么请尽量与实际服务器的规模保持一致。这将允许您确定一个独立服务器的能力,并提供一个可靠的水平尺度基准。

带宽和网络连接

在测试过程中同样的,目标测试服务器也很少能够与真实情况部署在同一个地点,不过网络环境倒是常常可以共享。

应用层数量

在多数情况下,应用服务的数量对性能测试有效性的影响比服务器数量的影响还要大得多。因此,关键是要维持实际的部署模式,除非别无选择。举例来说,如果在您的应用服务器和用户中间有一个代理服务器,那么在测试环境中也请尝试加入一个代理服务器。

应用程序数据库规模

测试环境数据库的规模应该和真实环境接近,否则,二者之间的差异可能会对性能测试结果的有效性造成相当大的影响。比如:对容量为1GB的数据库执行测试,而实际部署时却要达到50GB的规模,这是完全不现实的,测试结果不具有可比性。

由此得出,典型的性能测试环境只是部署环境的一部分。在这样的环境下测试所得到的性能结果令人满意,就可以让我们深信,当系统切换到完整的生产环境下时,情况会变得更好。(但不幸的是,这种想法通常是错误的!)

在我所遇到的项目中,所有性能测试都是在真实环境下进行的。然而这并不是一种普遍的做法,而且多了一组需要额外考虑的因素,比如说在测试执行过程中,其他应用程序的事务量,以及真实系统用户的影响。这样的测试通常被安排在非正常上班时间,这是为了降低外部因素对测试结果造成的影响,以及测试对生产环境的影响。

简而言之,在受到各种制约的情况下,您应该尽可能地使性能测试环境接近真实环境。这样的要求与单元测试是不同的,单元测试的重点是确保应用程序正常地工作。有一种观点认为,对于功能和性能测试而言,最好是按最精简的模式部署,这是种误解。

举个例子,有一家重要的英国银行在他们最大的分支机构里创建了一个测试实验室。这个环境包括超过150台工作站,每台工作站都配备了一位出纳,桌面上默认安装了所有软件。最关键的是,上面还安装了自动化测试软件,从而为功能和性能测试项目提供了一个精确的仿真环境。

创建一个性能测试环境可不是一项无关紧要的任务,这可能需要许多个星期甚至许多个月的时间。因此,为了完成这项任务,您需要规划一段比较充裕的时间。

想要更透彻地理解整个测试环境,首先就需要更有效地测试设计和规划,帮助您在项目中及早识别测试风险。有些时候,在整个项目的生命周期过程中,这一过程必须定期评审。总而言之,在设计一个测试环境时有三个层次的侧重。

完全真实或接近真实的环境

这是一种理想状态,但如前所述,由于一些实际的和商业上的原因,往往这是很难以实现的。

生产环境的子集。使用较少的服务器,但部署的规模和应用层都与生产环境一致

这通常可以实现——出于裸设备角度的重要考虑,对每个应用层的服务器规格必须与生产环境一致。这可以让您对单台服务器所能提供的可靠水平扩展的容量限制做准确评估。

生产环境的子集。使用较少的和小规模的服务器

这是最可能的一种情况:测试环境足以满足应用程序部署的需要,但是在数量上、部署层上以及服务器的规模上都和生产环境大相径庭。

2.2.1 虚拟技术

虚拟化技术是一种新的影响测试环境设计的相关因素,它的出现在很多方面影响了测试环境的设计。多年来,VMWare在这一方面是市场的领导者,不过在这个领域,目前正面临来自其他厂商产品的挑战,如微软的虚拟服务器技术。需要特别注意的是虚拟化使得准确地模拟生产环境上的服务器数量和规模成为可能。

如果在生产环境上也使用了虚拟技术,那就更好了,因为测试环境和生产环境可以十分接近。假如情况并非如此,那么在对比逻辑(虚拟)服务器和物理(实际)服务器的时候还有一些事情需要牢记。

总线和LAN-WAN

虚拟服务器间共享同一组物理总线进行通信,以及通过LAN或WAN进行通信,这两种情况会表现出不同的特点。尽管这些虚拟通信可能使用虚拟的网卡(Network Interface Cards, NICS),它不会受到(除非人为产生)典型网络问题的影响,例如网络带宽限制和潜在的影响。在数据中心环境,物理服务器的网络问题不会很多,因此,这不是什么大问题。不过,如果生产环境上的物理服务器是通过LAN或WAN远程连接的,那么在测试中使用通用总线虚拟服务器并不能真正替代服务器之间的通信。同样,最好(除非与生产环境的架构一致)不要将不同应用层的虚拟服务器部署在同一台物理机上。也就是说,不要混合匹配,保持所有Web应用程序和数据库虚拟服务器在逻辑上一起,但在物理上分开。

物理网卡和虚拟网卡(NIC)

虚拟服务器往往使用虚拟网卡。也就是说,除非每一台虚拟服务器都有一个物理的网卡,否则多台服务器将共享一个物理网卡。当前的网络适配技术已经相当成熟,因此一个网卡不太可能超负荷。然而,多服务器网络流量同时使用一个物理网卡,增加了超负荷的可能性。对此我的建议是,降低物理网卡和虚拟网卡之比,(尽量让一块物理网卡同时承担少量的虚拟网卡的数量)。