python做性能测试首选库,内部使用requests库,可以基本将接口自动化的代码搬过来,稍微修改即可。 内部使用协程的模式,单机并发远超jmeter。
第一步,安装:
pip install locust
第二步,使用:
创建一个locustfile.py文件(可以使用其他名字,其他名字启动需要加-f 加文件名称运行)。
from locust import HttpUser,task
class TestLocust(HttpUser):
host = "https://blog.csdn.net"
wait_time = 10
#constant_throughput(10) 控制单用户的tps为10
weight = 1
@task
def login(self):
res = self.client.get("/nav/cloud-native?spm=1001.2100.3001.4477",verify=False)
如果不习惯使用命令行启动的话可以在main方法中写好调用:
if __name__ == "__main__":
import os
os.system("locust -f locustUtils.py --host=https://blog.csdn.net")#这样写可以直接运行文件,也可以命令调用文件
当存在多个task的时候,也可以这么写:
from locust import HttpUser,TaskSet,task,tag,constant
class TestLocust(TaskSet):
@tag("smoke")#用例筛选 ,使用命令行 --tag smoker
@task
def login(self):
data={
"username":"qwe",
"pswd":"123456",
}
res = self.client.post(url="/Login",data=data)
try:
print(res.json())
except Exception as e:
print(f"{e},{res}")
@task
def homepage(self):
print("home")
class LoginUser(HttpUser):
tasks = [TestLocust]
host = "https://xxxx"#替换成你想测试的url
wait_time = constant(2) #间隔两秒请求一次
self.clent相当于是requests模块的请求方式。
task注解,是表示运行是该方法运行权重,默认为1,数字越大执行次数占比越多。
host:项目的url
wait_time :等待时间,默认为0
weight:多个类同时运行时,设置类的运行权重,方便模拟真实场景
tag:筛选用例,使用 --tag smoke,此时仅会执行smoke标签对应的方法
运行的话:直接输入locust (模块命非locustfile的话,输入locust -f 文件名称即可),然后打开浏览器输入loacalhost:8089
在填写合适的用户总数和每秒的启动的虚拟用户数,start即可
运行后的页面,会显示各项数据,有点类似jmeter的聚合报告。
补充:在做压测的时候,可以使用mimesis或者faker等做数据模拟