vlambda博客
学习文章列表

非功能测试和性能测试的测试左移



您身边是否有这样的朋友,为了美白牙齿,最后却成为了强迫症患者?他们去找美容牙医进行激光美白,然后抱怨说不够美白。最后,牙齿虽然接近无暇,但由于表面无法反射99.9%的光线,而需要提供99.999%洁白牙齿的治疗才能将牙齿变得更白,然而这需要付出高昂的的代价,而且医疗水平也根本达不到。

与此类似,很多测试工程师、性能测试人员和SRE执着于在软件交付前达到99.999%(有时甚至更高)的可靠性以上。

如果您也有类似应用程序可靠性的强迫症,那么很可能您已经迅速地去计算时间,并意识到99.999%相当于每年节省总共约5.26分钟的停机时间。当然,您还会意识到,为了保证99.999%的正常运行时间,测试工程花费的成本和努力是非常巨大的。

非功能测试和性能测试的测试左移

在大多数情况下,将产品的可靠性从99.9%提升到99.999%会比达到99.9%消耗更多的IT预算!

似乎不管我们花多少钱,世界上所有产品的性能测试都不可能消除所有可能导致那0.001%的停机时间的未知状况。这折磨人的世界!

啊...但是不必担心我们无法改进,所有的方法都需要从软件交付的右侧下手。不,不,不...无论如何,当应用程序完全完成后,此时解决问题要付出更多的代价。所以不能等到这个时候才开始。

放轻松,只是一点点建议。没有什么是完美的。

非功能测试和性能测试的测试左移



与早期的开发测试团队合作





为什么不考虑先将生产暂放,在软件生命周期开始时就与开发测试团队沟通呢?

处在软件交付左侧的时候,团队正在绘制地图、编写代码和挑选组件。他们不需要担心世界上的其他事情,也不用担心部署中可能发生什么未知因素。

他们正在忙于运行测试优先的敏捷开发,对每个构建进行许多结构化的代码检查,并运行自动化的单元测试和回归测试套件。在这些测试中,他们做到了测试左移。

他们也不用担心自己所做决策的影响。在将各种服务、软件和基础结构组件集成到一个正在运行的应用程序后,它们在负载下进行交互时会产生无数非功能性问题。

早期的设计和开发上的选择可能会在以后的过程中出现问题,但是传统上,非功能测试(non-functional testing,NFT)和性能测试会在快生产前进行。

等等,如果考虑将NFT引入设计和开发呢?能否提供足够的预警预防产生代价最高的问题?

非功能测试和性能测试的测试左移



将NFT和PerfTest测试左移





由于真实情况很难在实验中得到重现,因此非功能性问题很难在软件的早期发现。

您可以在应用程序界面或用户授权过程上运行Selenium功能测试套件,或者运行一组API服务测试调用和数据集以验证响应,或者对代码运行一堆JUnit或NUnit测试。但是所有这些方法只能测试出您意识到的能在早期阶段发现的问题。

为了更贴近现实世界,团队可以选择三种选择。

非功能测试和性能测试的测试左移
非功能测试和性能测试的测试左移

1.加入功能测试以进行基准测试。如果您在CI / CD软件管道中添加Selenium功能测试,使用类似Parasoft Selenic之类的配套工具实现自动化,并监视每次构建的执行时间,则可以为任何应用程序、组件或服务获得一个相当不错的基准。

一旦响应时间有些偏差(无论出于何种原因),那么构建会自动通知构建平台或开发人员导致特定组件的运行速度降低的异常(可能无法正常运行)。


非功能测试和性能测试的测试左移

2.在负载下重复运行测试。为什么要等到最后才使用需要调用快完成的UI、专业测试能力以及高成本的工具(例如LoadRunner)呢?

如果您从Parasoft SOAtest之类的工具中进行了Selenium测试、安全检查和服务以及集成测试,然后进入循环重复运行,也许会发现某些数据或时序存在高度的重合。恭喜您获得初步左移的性能测试。

此时,您可以组合Web样式、UI调用、对API或事件队列的非UI调用的不同组合进行混合性能测试,从而可以测试应用程序目标生态系统的多个层次,而无需等到完成的应用程序。


非功能测试和性能测试的测试左移

3.隔离环境依赖。将NFT左移的最后一个障碍是应用程序实际存在的环境。要知道现代应用程序是在充满数据和服务依赖关系的世界里发挥作用。

此时可以使用服务虚拟化解决方案进行基于环境的测试,以便对实时应用程序周围所有上游和下游依赖进行检测。这样可以模拟如银行合作伙伴的系统、国家天气或飞行系统等这些永远都不会受到人为控制、也无法导入自己开发测试的环境。

依赖关系可以被监听并捕获为虚拟服务——就软件测试而言“比真实运行”响应更好的组件。

一家加拿大银行就使用了这三种技术的组合。他们自动执行功能测试来获取贷款应用程序组件的基准,然后与其他一些针对数据查询和“Mock”第三方信贷服务的虚拟服务的API调用的测试一起重新运行测试。

但是他们很担忧。如果虚拟API服务响应太慢被测组件会发生什么?如果它做出了预期的响应,但是随后测试团队加快了对第三方响应的虚拟服务的速度,以尽快完成测试。而当响应速度太快时,出现了导致组件事务失败的“竞态条件”!





Intellyx的看法





在软件领域中,完美只有一个定义,但是失败有无穷多个。

就像无论我们做多少次激光美白,我们永远都不会拥有100%洁白的牙齿。无论我们进行多少测试,我们都永远不会100%清除产品中的缺陷,而且这些缺陷很难隔离且修复成本很高。

但是,通过包括非功能测试和性能测试在内的适当的左移测试,我们可以获得一个能消除这些新生问题的预警系统,可以有效避免在性能测试实验室或在客户面前失败。

非功能测试和性能测试的测试左移

Parasoft中国官网:

www.parasoftchina.com



非功能测试和性能测试的测试左移