考虑到文章篇幅过长,计划分两部分写完《利用Python Locust库基于Robot Framework实现接口性能测试》,包含设计策略、框架设计、核心源码的分享,本篇主要分享设计策略、框架设计及实际应用效果。核心源码部分将在第二部分中进行分享,文章链接如下:
《利用Python Locust库基于Robot Framework实现接口性能测试(二)》
由于公司内测试环境(Linux虚拟机)系统资源性能指标无法保证,使得业务性能受到影响,进而导致性能测试结果的可靠性较低,因此性能测试大多在实际生产环境上进行。
因此萌生一个想法——如何提高测试环境性能测试结果的可靠性并实现持续构建性能测试?
性能瓶颈的影响因素
性能瓶颈定位从维度上划分,性能指标主要分为两大类,分别是业务性能指标和系统资源性能指标。
业务性能指标可以直观地反映被测系统的实际性能状况,常用的指标项有:
系统资源性能指标,主要是反映整个系统环境的硬件资源使用情况,常用的指标包括:
测试环境下测试结果可靠性的探讨
在测试环境系统资源性能指标不满足性能测试条件时,性能的测试结果是难以被认可的。这也是我们在测试环境(linux虚拟机)下,不做性能测试的原因,只有在生产环境进行实测时,会开展性能测试。
矛盾双方是可以互相转换的,假如测试环境的测试结果不是进行性能评估的,而是用来比对的呢?——与上一次该接口在该测试环境下的性能测试结果比较。实现接口的不同版本的横向比较。理论上,不同版本非重大改动的情况下的接口性能指标是相对稳定的(测试环境数据量等因素已考虑),因此我们利用这一点,进行同一接口在相同测试环境下的不同版本的性能指标比较结果是相对可靠的。
持续性的性能测试探讨
随着版本的迭代,每次迭代是否需要进行接口的性能测试,个人认为是需要的。但由于实际的测试环境、人力投入、测试周期等因素,难以做到持续性的性能测试,大多数在某一个版本或交付版本进行性能测试,再进一步就是线上生产环境的性能监控。
那么是否有必要构建持续性的性能测试呢,如何构建?是否可以像构建自动化用例那样,快速的构建接口的性能测试用例呢?使性能测试常态化,抱着这种期望,在前段时间,我使用Python的Locust库基于Robot Framework做了一次尝试,实践效果不错,随后也应用到了实际项目当中。
持续性的性能测试设计策略
核心理念
围绕产品进行持续性的业务性能指标比对,实现性能测试的常态化。
框架定位
该框架适应于对接口进行持续性的性能比对,如比对新旧版本接口的性能指标差异是否保持在合理的范围内,以便对新旧版本性能差异较大的接口进行更深层的性能测试。
框架构建
技术栈:Python、 Locust、Robot Framework、SqLite
如下图所示,整体架构目前分为压力生成关键字、负载控制(包含结果采集)关键字、结果分析器关键字、文件清除关键字四部分。
性能测试整体设计
压力生成关键字
根据性能测试用例模版与接口请求类型、检查点、请求体等内容构建Locustfile文件(接口性能测试用例),当前只支持单接口的性能测试:
请求参数说明
响应返回说明
负载控制(包含结果采集)关键字
运行接口性能测试用例,获取性能测试结果,并实现结果入DB数据库:
请求参数说明
响应返回说明
结果分析关键字
获取性能测试结果根据阈值校验项,检测各项结果是否超过历史平均结果的阈值设定,如果异常则断言失败。
请求参数说明
文件清除关键字
删除临时文件,包含Locustfile文件、执行结果文件:
请求参数说明
考虑到文章篇幅过长可能影响阅读体验,关于每个关键字的设计及核心源码分享我们将在后续文章中分享。
应用效果
场景一 单接口性能测试,无参数化。
我们可以看到通过几行简单的配置,就可完成接口的性能测试用例开发。
场景二 单接口性能测试,参数化。
参数化数据存放在parameterfile.txt中。
参数化文件 parameterfile.txt
测试结果
一般情况,此次测试结果不超过历史均值的设定阀值,则视为通过,否则异常。
运行结果
若对你有所帮助,欢迎大家评论、留言。
相关阅读 《利用Python Locust库基于Robot Framework实现接口性能测试(二)》
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!