个人的推荐是,做接口压力测试的时候使用jmeter,而在进行全链路测试的时候用locust。理由是jmeter虽然是可视化的工具,但是编写完整的交易流程时使用起来并不是很方便,众多控件学习成本也不小,比如参数传递要用采样器,比如从数据库中取一个游标,就要用到JDBC连接和JDBC request和For each三个组件。当交易流程非常复杂,包括很多步骤的时候,jmeter的可读性会比较糟糕。对于一些复杂的操作,比如加解密,jemeter也难以进行可视化的代码编写。
因此,当测试一个完整的交易流程时,用locust的好处还是明显的。由于locust是python语言,遇到难以处理的情况,可以直接修改代码解决。locust的学习成本略高,但编写成本不高。也不会像jemter遇到一些黑盒无法处理的情况。
1.安装
locust的安装没有太多的波折,要求python3.6及以上版本,直接pip就行。
2.调整本机的最大连接数。
各操作系统都有自己的tcp连接数限制,如果不调整,一旦测试的并发数大于本机的限制连接数,测试的时候会出现大量的失败请求。从而影响对压力测试结果的判断。**要有一个意识,当逐步升高压力遇到瓶颈时,先要看看是压力机到了瓶颈还是待测服务器遇到了瓶颈。
不要觉得搞笑,实际测试过程中经常遇到这类问题。**后面可以单独总结一篇。
windows下
TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 个Socket 连接。可以修改如下注册表来调整这个动态端口的范围。
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxUserPort = 5000 (Default = 5000, Max = 65534
unix下:
修改用户最大文件描述符和最大进程数
查看当前值
ulimit -n # 最大文件数,一般默认为1024个
ulimit -u # 最大进程数,一般为默认60000+
修改值
永久修改
vi /etc/security/limits.conf
修改文件数 * soft nofile 10240 * hard nofile 10240 #
修改进程数 * soft noproc 60000 * hard noproc 60000 #
临时修改 ulimit -n 10240 上面的永久修改方式重启还不会生效,
需要执行者 vi /etc/pam.d/login # 在末尾添加 session required /usr/lib64/security/pam_limits.so #
作用是告诉Linux在用户完成系统登录后,应该调用pam_limits.so来执行limit.conf这个文件 一般来说,只需要修改用户的限制就可以了。
3.创建locust的py文件以及使用命令行启动locust。
先创建一个locust的py文件,py文件的常见类和方法在后面写。先给一个网上的例子,这个例子随便百度都是他。。。。。
请注意目前网上的例子很多都是locust1.0的例子,所以部分类和方法需要按照提示进行修改。
比如下面的例子中,Locust2.0中,HttpLocust就改为了HttpUser:
from locust import HttpUser, TaskSet, between
def login(l):
l.client.post(“/login”, {“username”:“ellen_key”, “password”:“education”})
def logout(l):
l.client.post(“/logout”, {“username”:“ellen_key”, “password”:“education”})
def index(l):
l.client.get(“/”)
def profile(l):
l.client.get(“/profile”)
class UserBehavior(TaskSet):
tasks = {index: 2, profile: 1}
def on_start(self):
login(self)
def on_stop(self):
logout(self)
class WebsiteUser(HttpUser):
task_set = UserBehavior
wait_time = between(5.0, 9.0)
启动py脚本:
$locust -f D:\Users\dai__\PycharmProjects\pythonProject\dftesttools\venv\dftestlocust1.py --web-host=“127.0.0.1”
注意:****–web-host="127.0.0.1"不可省,否则默认指定的启动ip是0.0.0.0,则通过浏览器无法启动Locust 调度界面。
逐步负载模式:
性能测试过程中,从小到大逐渐增加压力,以寻求系统的性能拐点是个常用的办法,jmeter要手改并发数,而locust就提供了很好用的工具可以自动执行。通过参数即可实现逐步负载模式。
–step-load
启用“Step Load–逐步负载”模式, 以监视当用户负载增加时性能指标如何变化。
–step-clients
在“逐步负载”模式下,客户端数量逐步增加。与–step-load一起使用。
–step-time
在“逐步负载”模式下,每个Step的进持续时间,例如(300s,20m,3h,1h30m等)。与–step-load一起使用。
分布式运行Locust:
分布式的主机
$ locust -f locust_files/my_locust_file.py --master
分布式的奴隶机:
$ locust -f locust_files/my_locust_file.py --slave
如果要在多台机器上运行Locust,则在启动从属服务器时还必须指定主服务器主机(在单台计算机上运行Locust时不需要,因为主服务器主机默认为127.0.0.1):
$ locust -f locust_files/my_locust_file.py --slave --master-host=192.168.0.100
能看见Locust启动界面,环境部分也就算没啥问题了。