使用locust 做性能测试
pip install locust -i https://pypi.tuna.tsinghua.edu.cn/simple
from locust umport HttpUser, task, between
#创建一个类,从HTTPUser继承
class CarRental(HttpUser):
#思考时间,between是locust中的一个方法,在1~3s之间取随机数
wait_time = between(1,3)
# task 带参数,表示任务的权重,默认是1
# 访问车辆的页面,比访问Menu页面的人数多,或者访问的频率高
@task(3)
def loadAllCar(self):
ret = self.client.get("/carRental/car/loadAllCar.action?page=1&limit=10")
assert ret.status_code == 200
@task(1)
def loadAllMenu(self):
ret = self.client.get("/carRental/menu/loadAllMenu.action?page=1&limit=10")
assert ret.status_code == 200
# 命令行中执行
# locust回启动一个web服务,使用8089端口
# 如果端口被占用加上这个参数修改端口号 --web-port=8088
# locust -f xingneng\f01.py --web-host=127.0.0.1 --web-port=8079
import random
from time import sleep
from locust import HttpUser, between, task
class CarRental(HttpUser):
wait_time = between(1, 3)
@task
def test001(self):
carnumber = "陕A" + str(random.randint(10000, 99999))
car = {"carnumber": carnumber,
"cartype": "比亚迪",
"color": "black",
"carimg": "images/defaultcarimage.jpg",
"description": "一辆车",
"price": "100000",
"rentprice": "1000",
"deposit": "10000",
"isrenting": "0"}
headers = {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
}
r = self.client.post("carRental/car/addCar.action", data=car, headers=headers)
assert r.json()['msg'] == '添加成功'
r = self.client.get("carRental/car/loadAllCar.action?page=1&limit=1000")
assert carnumber in r.text
sleep(5)
car = {"carnumber": carnumber}
r = self.client.post("carRental/car/deleteCar.action", data=car, headers=headers)
assert r.json()['msg'] == '删除成功'
r = self.client.get("carRental/car/loadAllCar.action?page=1&limit=1000")
assert carnumber not in r.text
''
Jmeter中Perf插件可以配合ServerAgent来监控服务器。
Locust无法监控服务器。可以使用其他的监控工具来监控。
用python代码实现一段脚本,来监控服务器。
psutil中提供一些方法,获取服务器的数据
'''
from datetime import datetime, time
from time import sleep
import psutil
print(psutil.cpu_percent()) # cpu占用的百分比
# svmem(total=8241782784, available=2837688320, percent=65.6, used=5404094464, free=2837688320)
print(psutil.virtual_memory()) # 内存
print(psutil.virtual_memory().percent) # 内存的百分比
# sdiskusage(total=128034271232, used=40075087872, free=87959183360, percent=31.3)
print(psutil.disk_usage("c:/")) # 磁盘
print(psutil.disk_usage("c:/").percent) # 磁盘占用百分比
# snetio(bytes_sent=2991383096, bytes_recv=288711266, packets_sent=2764774, packets_recv=2455569, errin=0, errout=0, dropin=0, dropout=0)
print(psutil.net_io_counters()) # 网络IO
print(psutil.net_io_counters().bytes_sent) # 发送的字节数
print(psutil.net_io_counters().bytes_recv) # 接收的字节数
'''
监控服务器,每隔3s获取一下相关的数据,把结果写到csv文件中
通过excel的功能,生成折线图
'''
# 表头:时间戳,CPU使用率,内存使用率,磁盘使用率,发送字节数,接收字节数
with open("c:/监控数据.csv", mode="w", encoding='utf-8') as f:
f.write("时间戳,CPU使用率,内存使用率,磁盘使用率,发送字节数,接收字节数\n")
print("正在监控", end="")
while True:
print(".", end="")
now = datetime.now() # 当前时间
t = datetime.strftime(now, "%Y-%m-%d %H:%M:%S") # 格式化时间
cpu = psutil.cpu_percent()
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage("c:/").percent # 部署租车系统的盘
sent = psutil.net_io_counters().bytes_sent
recv = psutil.net_io_counters().bytes_recv
f.write(f"{t},{cpu},{mem},{disk},{sent},{recv}\n")
f.flush()
sleep(3)
import random
from time import sleep
from locust import HttpUser, between, task
class CarRental(HttpUser):
wait_time = between(1, 3)
@task
def test001(self):
carnumber = "陕A" + str(random.randint(10000, 99999))
car = {"carnumber": carnumber,
"cartype": "比亚迪",
"color": "black",
"carimg": "images/defaultcarimage.jpg",
"description": "一辆车",
"price": "100000",
"rentprice": "1000",
"deposit": "10000",
"isrenting": "0"}
headers = {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
}
r = self.client.post("carRental/car/addCar.action", data=car, headers=headers)
assert r.json()['msg'] == '添加成功'
r = self.client.get("carRental/car/loadAllCar.action?page=1&limit=1000")
assert carnumber in r.text
sleep(5)
car = {"carnumber": carnumber}
r = self.client.post("carRental/car/deleteCar.action", data=car, headers=headers)
assert r.json()['msg'] == '删除成功'
r = self.client.get("carRental/car/loadAllCar.action?page=1&limit=1000")
assert carnumber not in r.text
|