作者介绍:吴锋雷。PP云高级测试工程师,拥有10年业务研发和测试经验,目前负责SDK及相关产品的测试工作。

系统上线前一般要通过压力测试来判断下是否能承受预估的访问量,假设我们要测试的接口每天访问量是10万,那么平均下来的RPS(request per second)大概是10,假设高峰时访问量是平时的3倍,那么要上线,RPS必须在30+以上,下面以Locust为例说明下要达成这个目标,怎么来实现压测。

概述

Locust是一个基于python的压力测试工具,可以通过写python脚本的方式来定义用户行为对web接口进行性能测试,扩展性比较好,也可以在较快地实现性能测试。与其他性能测试工具LoadRunner,Jmeter之类的工具相比,Locust的优点有:

1. Locust采用Python脚本描述,比较容易实现复杂的因果逻辑,比如待压的接口有完整的流程的,假设程序要访问一个api,可以把鉴权返回的token放在Queue中,然后在调用接口的task中取得Queue中的token就可以了。另外python脚本也比较容易实现虚拟用户使用的数据不重复,保证并发测试数据唯一性。

2. Locust的http请求基于Request库,这个库简洁易用,功能十分强大。

3. Locust的并发机制摒弃了进程和线程,采用协程(gevent)的机制使,用协程提供的阻塞IO和coroutine来实现网络层的并发请求,即使是单台压力机也能产生数千并发请求数;因此Locust能在使用较少压力机的前提下支持极高并发数的测试。

基本概念

HttpLocust继承了locust 类, 添加了可以发送http请求的功能。

HttpLocust类有如下属性:

task_set:在taskset类定义了每个用户的行为。

min_wait:每个任务最少间隔多久执行一次。

max_wait:每个任务最少间隔多久执行一次。

Host:被压测的网站的域名。

Weight:一个Locust实例被挑选执行的权重,数值越大,执行频率越高。

应用实例

我们以ppyun的一些接口为例,看下locust怎么实现一个简单的性能测试。

代码示例:

上面的例子脚本中主要包含了两个类:PptvyunTasks和WebsiteUser,其中PptvyunTasks是继承了TaskSet,而WebsiteUser是继承了HttpLocust。

我们使用Locust脚本测试的时候,所有的场景都是依赖这两个基类来进行描述的。PptvyunTasks类中定义的是指我们测试任务中的具体业务操作,上面的脚本的意思就是访问一个svc.pptvyun.com路径下两个不同的接口,其中两个请求最小间隔1000ms最大的间隔为5000ms,两个请求比例为2比1。

打开http://localhost:8089/页面就能看到如下页面:填写要模拟的用户数(Numberof user to simulate)和每秒产生的用户数(Hatchrate)

点击Startswarming后,得到如下结果。可以看到由于代码中config接口的权重是1,getplayinfo的权重是2。产生的请求数量getplayinfo接口大概是config接口的两倍。RPS在逐步提升到30后,系统的响应时间趋于稳定,在30ms左右。

通过前面对Locust的使用,可以看到Locust的结果展示比较简单,主要关注并发数、RPS、响应时间、异常率这几个指标,与其它工具相比要少一些,但对多数的场景已经够用了。

python locust api_干货 | 基于Locust的接口压测相关推荐

  1. 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统

    王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...

  2. 基于TCPCopy的仿真压测方案

    基于TCPCopy的仿真压测方案 一.tcpcopy工具介绍 tcpcopy 是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的 ...

  3. 压测——普通接口压测

    理论说明 普通接口压测就是对接口的高频率访问 验证条件主要看两点,一是请求的成功率 二是请求的响应时间 辅助验证条件:可以看服务器的CPU以及内存的运行情况 实际操作 确定压测接口,设计好脚本,通知有 ...

  4. 云效平台性能测试功能:一个基于Jmeter的性能压测平台

    云效平台性能测试功能(Galaxy)是一个基于Jmeter的性能压测平台,它集脚本.场景.压测.监控和报表展示为一体,是一个能快速.低成本实施压测的平台.降低了入门使用成本,让开发和测试都可以方便的执 ...

  5. Go实现http接口压测工具

    使用方式 切换到根目录下,执行: go run main.go -c 500 -n 20 -u https://www.baidu.com 项目目录如下: ├── go.mod 依赖管理 ├── ma ...

  6. 【接口测试】ab进行接口压测

    ab进行接口压测 1.安装 yum -y install httpd-tools 查看信息:ab -V 2.测试 上图是给出的ab工具压测某接口的情况. 下面我们对这些参数,进行相关说明.如下: -n ...

  7. 登录接口压测响应慢频繁GC问题排查

    登录接口压测响应慢频繁GC问题排查 2020.5.22 最近项目组针对几个较重要的接口进行了几十个小时的压测,发现登录接口的压测呈现了一种响应慢且越来越慢的趋势,CPU 也居高不下 压测情况 查看CP ...

  8. JMeter压力测试:单接口压测和多场景混合并发

    单接口并发压测 首先介绍下单接口压测,使用Jmeter的线程组进行设置: 1.线程数:并发用户数 2.Ramp-Up Period(in seconds):运行的时间 3.循环次数:线程运行的次数 一 ...

  9. 使用JMeter进行接口压测

    最近搞接口压测,学了下JMeter的基本使用,特此记录一下 一.下载 官网:https://jmeter.apache.org/download_jmeter.cgi 百度网盘:https://pan ...

最新文章

  1. Python培训分享:Python发展前景怎么样?
  2. Python 搭建车道智能检测系统
  3. C++:32---IO库
  4. spring集成 log4j + slf4j
  5. 简单理解极大似然估计MLE
  6. python可哈希_Python,TypeError:不可哈希类型:'list'
  7. 工作小总结(字符串包含,获取当前页面的url等系列问题)
  8. Python多线程(threading模块)
  9. 网 络 响 应 状 态 码 常 见 的 错 误 代 码 及 错 误 原 因
  10. BIGEMAP APP离线卫星地图数据应用
  11. 油猴/暴力猴工具换cook脚本
  12. 在打开 Office XP 或 Office 2003 文档时,会提示您为 ActiveX 控件授予权限
  13. 德州停电悲剧不会重演 智慧用电是新方向
  14. Android颜色透明度
  15. outlook从服务器中恢复已删除项目,恢复邮箱中的已删除邮件:Exchange 2013 帮助 | Microsoft Docs...
  16. 【已解决】Spring容器中找不到ServletWebServerFactory类出现的异常
  17. waiting for changelog lock.
  18. □ 影片名:《武大郎版大长今》(9225) 在线播放
  19. JAVA获取tomcat信息
  20. 温故而知识--历史清单

热门文章

  1. 2021安徽舒城中学高考成绩查询,2021安徽省地区高考成绩排名查询,安徽省高考各高中成绩喜报榜单...
  2. html5视差滚动效果,视差滚动效果
  3. 配置frp报错start error: type [http] not support when vhost_http_port is not set
  4. 串的块链存储c语言栈,小蚂蚁学习数据结构(18)——串的块链的代码实现
  5. java不同类间调用数组_请问:JAVA中两个类中的方法都需要调用另一个类的数组进行对数组的初始化和调用。...
  6. Ajax解析laravelJSON,3分钟短文:Laravel请求体内JSON格式数据的处理办法
  7. 基于jmx监控kafka_0542-6.1.0-非安全环境下Kafka管理工具Kafka Eagle安装使用
  8. 搜狗浏览器怎么新建隐私窗口 搜狗浏览器开启隐私窗口教程
  9. Chrome谷歌浏览器76地址栏隐藏的HTTPS和WWW标记如何恢复
  10. PP视频怎么设置文件的缓存路径