百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

利用Python Locust库基于Robot Framework实现接口性能测试(一)

toyiye 2024-08-25 15:51 6 浏览 0 评论

考虑到文章篇幅过长,计划分两部分写完《利用Python Locust库基于Robot Framework实现接口性能测试》,包含设计策略、框架设计、核心源码的分享,本篇主要分享设计策略、框架设计及实际应用效果。核心源码部分将在第二部分中进行分享,文章链接如下:

《利用Python Locust库基于Robot Framework实现接口性能测试(二)》

由于公司内测试环境(Linux虚拟机)系统资源性能指标无法保证,使得业务性能受到影响,进而导致性能测试结果的可靠性较低,因此性能测试大多在实际生产环境上进行。

因此萌生一个想法——如何提高测试环境性能测试结果的可靠性并实现持续构建性能测试?

性能瓶颈的影响因素

性能瓶颈定位从维度上划分,性能指标主要分为两大类,分别是业务性能指标系统资源性能指标。

业务性能指标可以直观地反映被测系统的实际性能状况,常用的指标项有:

  • 并发用户数
  • 事务吞吐率(TPS/RPS)
  • 事务平均响应时间
  • 事务成功率

系统资源性能指标,主要是反映整个系统环境的硬件资源使用情况,常用的指标包括:

  • 服务器:CPU利用率、处理器队列长度、内存利用率、磁盘IO状态、网卡带宽使用情况等。
  • 数据库:数据库连接数、数据库读写响应时长、数据库读写吞吐量等。
  • 网络:网络吞吐量、网络带宽、网络缓冲池大小。
  • 缓存(Redis):静态资源缓存命中率、动态数据缓存命中率、缓存吞吐量等。
  • 测试设备(压力发生器):CPU利用率、处理器队列长度、内存利用率、内存交换页面数、磁盘IO状态、网卡带宽使用情况等。

测试环境下测试结果可靠性的探讨

在测试环境系统资源性能指标不满足性能测试条件时,性能的测试结果是难以被认可的。这也是我们在测试环境(linux虚拟机)下,不做性能测试的原因,只有在生产环境进行实测时,会开展性能测试。

矛盾双方是可以互相转换的,假如测试环境的测试结果不是进行性能评估的,而是用来比对的呢?——与上一次该接口在该测试环境下的性能测试结果比较。实现接口的不同版本的横向比较。理论上,不同版本非重大改动的情况下的接口性能指标是相对稳定的(测试环境数据量等因素已考虑),因此我们利用这一点,进行同一接口在相同测试环境下的不同版本的性能指标比较结果是相对可靠的。

持续性的性能测试探讨

随着版本的迭代,每次迭代是否需要进行接口的性能测试,个人认为是需要的。但由于实际的测试环境、人力投入、测试周期等因素,难以做到持续性的性能测试,大多数在某一个版本或交付版本进行性能测试,再进一步就是线上生产环境的性能监控。

那么是否有必要构建持续性的性能测试呢,如何构建?是否可以像构建自动化用例那样,快速的构建接口的性能测试用例呢?使性能测试常态化,抱着这种期望,在前段时间,我使用Python的Locust库基于Robot Framework做了一次尝试,实践效果不错,随后也应用到了实际项目当中。

持续性的性能测试设计策略

核心理念

围绕产品进行持续性的业务性能指标比对,实现性能测试的常态化。

框架定位

该框架适应于对接口进行持续性的性能比对,如比对新旧版本接口的性能指标差异是否保持在合理的范围内,以便对新旧版本性能差异较大的接口进行更深层的性能测试。

框架构建

技术栈:Python、 Locust、Robot Framework、SqLite

如下图所示,整体架构目前分为压力生成关键字、负载控制(包含结果采集)关键字、结果分析器关键字、文件清除关键字四部分。

压力生成关键字

根据性能测试用例模版与接口请求类型、检查点、请求体等内容构建Locustfile文件(接口性能测试用例),当前只支持单接口的性能测试:

请求参数说明

  • host:host地址
  • url:请求url
  • method:请求方式
  • web_reg_find:检查点
  • parameterization:参数,填写文本地址默认进行参数化处理。
  • parameter_allocation_update: 参数分配和更新方式
  • min_wait:最小等待时间,默认10ms
  • max_wait:最大等待时间,默认20ms

响应返回说明

  • filename :初始化性能测试脚本路径

负载控制(包含结果采集)关键字

运行接口性能测试用例,获取性能测试结果,并实现结果入DB数据库:

请求参数说明

  • locustfile:locustfile脚本路径
  • locust_command:locust命令

响应返回说明

  • result:接口测试结果

结果分析关键字

获取性能测试结果根据阈值校验项,检测各项结果是否超过历史平均结果的阈值设定,如果异常则断言失败。

请求参数说明

  • result:接口测试结果
  • threshold_value:比对阈值,默认超过历史测试结果平均数的20%,则视为异常。
  • search:阈值校验项,默认关注平均、最大、最小、中位响应时间、rps
  • result:接口测试结果
  • threshold_value:比对阀值,默认超过历史测试结果平均数的20%,则视为异常。
  • search:关注点,默认关注平均、最大、最小、中位响应时间、rps

文件清除关键字

删除临时文件,包含Locustfile文件、执行结果文件:

请求参数说明

  • filename:Locustfile路径

考虑到文章篇幅过长可能影响阅读体验,关于每个关键字的设计及核心源码分享我们将在后续文章中分享。

应用效果

场景一 单接口性能测试,无参数化。

我们可以看到通过几行简单的配置,就可完成接口的性能测试用例开发。

场景二 单接口性能测试,参数化。

参数化数据存放在parameterfile.txt中。

测试结果

一般情况,此次测试结果不超过历史均值的设定阀值,则视为通过,否则异常。

若对你有所帮助,欢迎大家评论、留言。

相关阅读 《利用Python Locust库基于Robot Framework实现接口性能测试(二)》

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码