python locust api_干货 | 基于Locust的接口压测

作者介绍:吴锋雷。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怎么实现一个简单的性能测试。

代码示例:

1527832440258171.png

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

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

1527832442765385.png

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

1527832446475752.png

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

1527832448411152.png

1527832453620894.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(贪心)背包问题

1.最优装载问题。 给出n个物体,第i个物体重量为wi。选择尽量多的物体,使得总重量不 超过C。 由于只关心物体的数量,所以装重的没有装轻的划算。只需把所有物体按重量从小到大 排序,依次选择每个物体,直到装不下为止。…

(贪心)区间问题大致思路

1.选择不相交区间。 a.描述: 数轴上有n个开区间(ai, bi)。选择尽量多个区间,使得这些区间两两 没有公共点。 b.思路总结: 1.区间x完全包含y,选y 2.按照bi从小到大排序,从第一个区间开始选 3.把所有和上一个区间相…

python queue windows_python Queue模块

创建一个“队列”对象import Queuemyqueue Queue.Queue(maxsize 10)Queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。将一个值放入队列中myqueue.put(10)调用队…

STM32的DHT11

DHT11基础 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传 感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高 的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测 温元件,并与一个高性能…

(priority_queue)自定义优先级

思考与总结: 1.优先队列,先出队列元素不是先进队列的元素,而是队列中优先级最高的元素 2.遇到这种题一般把每一个数据封装到一个struct里 3.然后根据优先级判断依据,我们通过重定向定义优先队列的优先级 如果我们写bool opera…

python 如何匹配列表中某个单词_Python中部分指定单词的最佳匹配项

如果要重复执行此操作,应创建一个索引:wordlist [word.strip() for word in "run, ran, rat, rob, fish, tree".split(,)]from collections import defaultdictclass Index(object):def __init__(self, wordlist()):self.trie defaultdict(s…

sigkill mysql_Ubuntu不能停止mysqld

我尝试运行服务mysql stop,killall -s SIGKILL mysqld,/etc/init.d/mysql停止,并停止mysql,但仍然看到这个输出从ps aux | grep mysql:root 32302 0.0 0.3 59040 2120 pts/8 S 06:03 0:00 sudo mysqld_saferoot 32305 0.0 0.1 4440 772 pts/8 S 06:03 0:00 /bin/sh …

java中函数_java中的函数

函数的概述1.函数定义: 能完成特定功能的代码段就是函数,每一个函数都是一个独立的小功能2.为什么要有: 如果没有函数,在实现一个功能时候,就要写一遍这个逻辑, 如果功能多次使用,就会产生大量重复的代码.有了函数之后,把这个功能封装到函数中,当你在使用这个功能时候不需要再写…

(dag模型+最长路+字典序)嵌套矩形

题目: 有 n 个矩形,每个矩形可以用两个整数 a, b 描述,表示它的长和宽。矩形 X(a, b) 可以嵌套在矩形 Y(c, d) 中当且仅当 a<c, b<d,或者 b<c, a<d(相当于把矩形 X 旋转…

Java智能卡 技术_java智能卡APDU学习笔记

因项目需要,利用APDU通信协议在ME手机端和卡端进行通讯。在实践的过程中遇到一些问题,先记录如下。APDU协议,即是智能卡与读写器间的应用层协议,在ISO7816-4[7]中定义了该协议的结构格式。APDU数据有两种结构,读写器使…

(二叉树存储+递归遍历)Binary Tree Traversals

题目: A binary tree is a finite set of vertices that is either empty or consists of a root r and two disjoint binary trees called the left and right subtrees. There are three most important ways in which the vertices of a binary tree can be sys…

java mutator_Java-使用Accessor和Mutator方法

小编典典让我们看一下基础知识:“ Accessor”和“ Mutator”只是获取器和设置器的奇特名称。一个获取器“Accessor”返回一个类的变量或其值。设置器“ Mutator”设置类变量指针或其值。因此,首先您需要设置一个带有一些要获取/设置的变量的类&#xff1…

(二叉树创建+查找)精灵邮差

题目 精灵是非常奇特的生物。众所周知,他们可以活很长时间,他们神奇的能力不是一件容易接受的事情。此外,他们住在树上。但是,你可能不知道有些事情。虽然通过魔法传送提供东西非常方便(很像电子邮件)。他…

java反序列化异常接不到_由Java对象反序列化异常想到的

今天写代码时候遇到一个异常,异常信息如下:Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.spri…

(找规律)Magic of David Copperfield

题目: 每一个参与的观众被要求将手指放在左上方的图片上(即编号为1的图片),魔术师开始了:魔术师告诉观众在图片上移动k次(移动是把手指放到上下左右相邻的图片上,如果那儿有图片的话&#xff0…

java 日期只计算年月日大小_Java 计算两个日期相差多少年月日

JDK7及以前的版本,计算两个日期相差的年月日比较麻烦。JDK8新出的日期类,提供了比较简单的实现方法。/*** 计算2个日期之间相差的 相差多少年月日* 比如:2011-02-02 到 2017-03-02 相差 6年,1个月,0天*paramfromDate Y…

(DAG+固定终点的最长路和最短路)硬币问题

##题目: 有n种硬币,面值分别为v1, v2, …, vn,每种都有无限多。给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值。 Input 第一行两个整数,n,S…

java虚拟机堆栈工作原理_java虚拟机工作原理?

展开全部从宏观上介绍一下Java虚拟机的e5a48de588b662616964757a686964616f31333363373731工作原理。从最初编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件&#…

(二分)Trailing Zeroes (III)

题目&#xff1a; n的阶乘尾部有q个连续的0&#xff0c;现在给你q&#xff0c;请你算出满足条件的n&#xff0c;如果有多个n满足条件&#xff0c;输出最小的那个即可。 Input 输入一个T(T < 10000),表示样例数量。 每个样例输入一个q。(1 < q < 100,000,000) Outp…

ais文件还原到mysql_SQLSERVER 数据库可疑的解决步骤

异常关机后&#xff0c;金蝶帐套突然无法访问&#xff0c;发现数据库置疑&#xff0c;使用此方案解决&#xff1a;注意&#xff1a;在做任何修复操作之前&#xff0c;请务必备份.mdf/.ndf以及.ldf文件。一般情况下这样可以解决&#xff1a;1、将数据库设置为应急状态ALTER DATA…