zoukankan      html  css  js  c++  java
  • locust 项目结构

    一、项目搭建:
    在这里插入图片描述
    二、locust_demo.py

    import json
    import time
    from locust import HttpUser, task, between, events, SequentialTaskSet
    from locust.runners import MasterRunner
    
    
    # 场景1:任务执行 > login执行1次,addtitle执行10次
    class FlashTask(SequentialTaskSet):  # 该类定义了用户执行的任务的顺序。
        token = None # 设置全局变量,login执行完成后,返回值给这里,供addtitle使用
        @task(1) # 先执行登录,执行1次
        def login(self):
            data = {"username": "developer", "password": "developer"}
            # 打开文件、写入数据、关闭文件,一般用语法with as >>> 节约资源,处理完请求后悔自动关闭。
            with self.client.request(method='post', url='/prod-api/account/login', data=data) as response:
                res = self.login()
                d = json.loads(res.text)  # 将返回值转换为字典
                token = d.get("data").get("token")
                self.token = token # 实例化login的token,为上面的token,调用self.token就是token值
    
        @task(50) # 然后执行addtitle,执行50次
        def addtitle(self):
            data = {'xx': 'xxx'}
            headers = {'x-token': self.token,
                       'content-type': 'application/json;charset=UTF-8'}  # 一般需要加表单类型,不然会报错
            with self.client.request(method='post', url='/prod-api/arctile', json=data, headers=headers) as response:
                print(response.text)
    
    
    class FlashUser(HttpUser):
        host = "http://flash-admin.enilv.cn" # 设置要测的ip地址
        wait_time = between(1, 3) # 设置等待时间,1到3秒之内
    
        @events.init.add_listener
        def on_locust_init(environment, **kwargs):
            if isinstance(environment.runner, MasterRunner):
                print("I'm on master node")
            else:
                print("I'm on a worker or standalone node")
    
        @events.test_start.add_listener
        def on_test_start(environment, **kwargs):
            print("A new test is starting")
    
        @events.test_stop.add_listener
        def on_test_stop(environment, **kwargs):
            print("A new test is ending")
    
        # 用户开始请求前,调用一次测试前置:on_start
        def on_start(self):
            self.client.post("/login", json={"username":"foo", "password":"bar"})
    
        @task
        def hello_world(self):
            self.client.get("/hello")
    
        @task(3)
        def view_items(self):
            for item_id in range(10):
                self.client.get(f"/item?id={item_id}", name="/item")
                time.sleep(1)
    
        tasks = [FlashTask]  # 要执行的任务是任务的类FlashTask,会有序执行该类下面的任务。

     

    三、执行文件看指标:
    locust -f locust_demo.py
    在这里插入图片描述

     
  • 相关阅读:
    Kotlin中Range与异常体系剖析
    @RequestParam与@PathVariable的区别
    thymeleaf:局部变量 th:with
    关于thymeleaf th:replace th:include th:insert 的区别
    MockHttpServletRequestBuilder中content和param的区别
    使用spring的JavaMailSender发送邮件
    Spring的注解@Qualifier小结
    MySql 中 case when then else end 的用法
    @Transient 理解
    Vue生命周期-手动挂载理解
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/14858890.html
Copyright © 2011-2022 走看看