我的账户
啄木鸟学院

专注软件测试菁英教育

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

java__ 张国荣___ 20210329

[复制链接]
淰7331学员认证 发表于 2021-3-29 20:43:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题


使用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



回复

使用道具 举报

关注0

粉丝0

帖子23

发布主题
大家都在学
课堂讨论
一周热帖排行最近7x24小时热帖
关注我们
专注软件测试菁英教育

客服电话:17792550360

客服时间:9:00-21:00

卓目鸟学苑 - 专注软件测试菁英教育!( 陕ICP备20001493号-1 )

版权所有 © 西安菁英教育科技有限公司 2023-2026