说起来测试环境,我相信很多人都觉得不稀奇,哪位测试工程师不和测试环境打交道的,那么要是说一下测试环境是什么的时候,怎么规划测试环境,不知道你是不是还是一样觉得稀松平常。
测试环境到底是什么
测试环境是指为了完成软件测试工作所必需的计算机硬件、软件、网络设备、历史数据的总称,简单说就是能够支持完成测试工作所需要的软件和硬件。测试环境是测试活动的基础,正确模拟生产环节,稳定支持测试活动是测试环境的基本要求。稳定可控的测试环境能够提升测试工程师的测试工作效率,测试工程师无需花费时间再测试环境的稳定性、测试数据的适合性上,只要按照测试用例(这里既包含了自动化测试用例也包含手工测试用例)正确执行就可以稳定复现测试过程。
测试环境的搭建原则
一个最理想的测试环境肯定是生产环节的一个复制,但是这种理想的测试环境无论是在物理机时期,还是虚拟机时期,乃至现在容器化之下都是一种很难做到的,这个难做到其实是成本约束的。在真实的工作中,如果在团队中有人问到我们,需要什么样配置的一个测试环境的时候,我相信很多人都会说的并不清楚,往往会陷入需要什么样配置的服务器或者需要多少CPU多少内存上。那么这些需要多少服务器或多少CPU多少内存是怎么规划出来的呢?这就需要测试环境的搭建原则了。
测试环境的搭建的根本原册就是测试环境等价原则,这里的等价就是和生产环节的功能等价,但是不是等规模。这里说的等价针对不同的测试类型有不同方向的考虑。
功能测试测试环境的搭建原则
功能测试主要是根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。因此功能测试的测试环境就应该满足如下的一些原则
- 基础设施尽最大可能做到相同:这里的基础设施包含了网络拓扑结构、防火墙配置、负载均衡策略等。网络拓扑结构相似,这里的网络拓扑结构是说的内网环境,不包含互联网的部分。我们希望测试环境尽最大可能做到相同,这样在做功能测试的时候,我们的被测系统是完全运转和生产近似一致的基础之上,因此测试结果的因为网络拓扑以及网络中网元的一些影响都同时被兼顾到了;防火墙配置要做到完全一致,众所周知很多生产故障都是因为防火墙配置问题导致的无法访问,但是在实际测试环境中很多团队没有防火墙,这部分的问题却没有被测试到,因此在功能测试环境中要求必须有完全一样的防火墙配置,通过功能测试验证每一个业务请求都是通过防火墙返回了正确的响应;负载均衡策略要完全一致,这里是因为负载均衡会导致各式各样的“共享”问题,例如权限共享、数据共享等,因此在功能测试的时候如果测试环境的负载均衡策略和生产一致,对应问题也就无形中被覆盖到了。
- 操作系统要和生产完全一致:操作系统是一个系统能够对外提供服务的基础,那么我们更希望在功能测试的时候能够兼顾任何系统和操作系统之间的依赖关系,因此在功能测试环境中的操作系统在版本、补丁、配置等方面要和生产完全一致。
- 支持被测服务的公共服务要完全一致:这里所说的是一些web容器、消息中间件等在配置上、版本上要和完全一致,这样才能保证所有的情况在测试环境都被验证过。
- 测试数据要在一个完全已知道状态并且要可控制:测试环境中一个最为重要的就是测试数据了,对于测试数据是一个动态状态,因此对于功能测试的数据初始化需要有自己的备份机制,可以随时恢复到初始状态,同时也要求恢复机制时间在分钟级别。同时,在每次功能开始之前都是处于一个已知并且可控的状态,这样才能保证测试用例执行后的实际结果是可信的。
性能测试环境的搭建原则
性能测试对测试环境的要求更加苛刻,我们不能随便按照一种方式搭建测试环境,然后线性评估生产环节的性能结果。性能测试环境在功能测试环境的搭建原则之上,还推荐使用计算单元的方式。那么什么是计算单元呢?假设服务A需要对外提供服务,需要Portal,服务A1、服务A2,那么通过不断地性能测试来划分一个计算单元是1一个Portal、2个服务A1、4个服务A2能够达到最优秀的性能配比,如下图:
这就是一个计算单元,这个组合刚好在提供100并发的情况下,响应时间、服务器资源都满足需求,而且所有服务器的资源利用率都是最高。那么在系统上线后,出现并发急剧增加的情况下,可以同步建立一个计算单元,从而达到快速的最优比扩容,这样也快速提升了整体技术解决方案的吞吐量。
总结
测试环境是测试工作的基础,如果在测试过程中需要不断的维护测试环境的正确性才能保证测试工作的正常执行,那么测试工作的效率会严重受到影响。再如上的原则之下建设测试环境,会让测试工程师聚焦到测试工作中,从而实现更高效的质量保障工作。