本文共 1876 字,大约阅读时间需要 6 分钟。
现在开源和商业的性能测试工具层出不穷,如何选取一款高性能的性能测试工具,成为性能测试最基本需要解决的问题之一
现在主要针对locust与jmeter能提供http接口并发性能pk
摒弃了进程和线程,采用协程的机制
采用多线程来模拟多用户时,线程数会随着并发数的增加而增加,而线程之间的切换需要占用大量的资源,IO的阻塞和线程的sleep会不可避免的导致并发效率下降 而协程和线程的区别在于,协程避免了系统级资源调度,由此大幅提高了性能运行在JVM虚拟机上的,jmeter以线程方式来运行
基本原理是建立一个线程池,多线程运行取样器产生大量负载,jmeter通过线程组来驱动多个线程运行测试脚本对被测服务器发起负载,每一个负载机上都可以运行多个线程组1. 服务配置
信息 | 详情 |
---|---|
实例数 | 5 |
配置 | 4c 4g |
并发tps | 3w |
因为对比的是jmeter和locust这两款软件,故服务可以提供的tps远大于工具压测的需求
2. 肉鸡配置
信息 | 配置 | 数量 |
---|---|---|
master | 4c 4g | 1 |
slave | 4c 4g | 1 |
备注:locust和jmeter模拟端和服务端均使用相同的环境
1. jmeter
2. locust
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Author: lluozh# @Date : 2020/4/16# @Desc :from locust import HttpLocust,TaskSet,task,betweenclass MyBlogs(TaskSet): @task(1) def get_blog(self): header = { } body = { "roomId": "158589982254376" } req = self.client.get("/api/v1/model", headers=header, params=body, verify=False) # print(req.text) # if req.status_code == 200: # print("success") # else: # print("fails")class websitUser(HttpLocust): task_set = MyBlogs # 设置用户执行任务之间等待的上下限,单位秒 wait_time = between(3, 6) # # 等同于上面wait_time,单位毫秒 # min_wait = 3000 # max_wait = 6000 host = "http://benchmark-server.xxx.com"if __name__ == "__main__": import os # master 启动 # os.system("locust -f locusttest.py --master") # slave 启动 os.system("locust -f locusttest.py --slave --master-host=10.200.0.219")
- 使用的压测接口为GET接口,返回数据简单
- 每个接口请求后sleep150ms
- 本次数据收集根据并发增加的维度,因为同时发现slave的cpu使用也是线性的增加,故没有根据slave不同cpu使用情况来进行数据对比
1. 模拟tps
2. 响应时间
500ms+
的响应时间偏差
- 响应时间有两种对比
- 相同tps时jmeter与locust的响应时间相互对比
- 与apm监控服务实际处理的时间
- 以上接口均针对所模拟压测的该get接口
转载地址:http://jptvf.baihongyu.com/