python_locust 集合点并发

集合点:用以同步一定数量的虚拟用户,以便能够在同一时刻来执行任务。例如,设置1000个虚拟用户集合点,当虚拟用户运行到提交数据的集合点时,检查当前同时有多少用户运行到集合点,如果不到1000 人,已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,1000 人同时去提交数据,从而达到测试计划中的需求。

import os
from gevent._semaphore import Semaphore
from locust import HttpUser, task, between, SequentialTaskSet, tag, events
import random

all_locust_spawned = Semaphore()
all_locust_spawned.acquire()  # 阻塞线程


def on_hatch_complete(**kwargs):
    # 创建钩子方法
    all_locust_spawned.release()


# 挂在到locust钩子函数
events.spawning_complete.add_listener(on_hatch_complete)


class JgTaskCase(SequentialTaskSet):
    # 初始化方法,相当于 setup
    def on_start(self):
        all_locust_spawned.wait()  # 同步锁等待
        print("***开始压测***")

    @tag('login')
    @task(1)  # 装饰器
    # 登录接口
    def userLogin(self):
        all_locust_spawned.wait()
        url = '/userManage/userLogin'
        data = {
            "username": "admin",
            "password": "123456"
        }
        with self.client.post(url,
                              data=data,
                              catch_response=True) as rsp:
            if rsp.status_code == 200 and rsp.json()['resCode'] == '00000':
                rsp.success()
            else:
                rsp.failure('login_failure')

    @tag('pluginLog')
    @task(1)  # 装饰器
    # 日志上传接口
    def pluginLog(self):
        all_locust_spawned.wait()
        url = '/pluginInfo/pluginLog'
        data = '/P2024022200001_FrsjbjP5F2otG='
        with self.client.post(url,
                              data=data,
                              catch_response=True) as rsp:
            if rsp.status_code == 200 and rsp.json()['resCode'] == '00000':
                rsp.success()
            else:
                rsp.failure('pluginLog_failure')

    # 结束方法, 相当于teardown
    def on_stop(self):
        print("***压测结束***")


# 定义一个运行类 继承HttpUser类, 所以要从locust中引入 HttpUser类
class UserRun(HttpUser):
    tasks = [JgTaskCase]
    host = 'http://www.baidu.com'
    # 设置运行过程中间隔时间 需要从locust中 引入 between
    # wait_time = between(0.1, 3)
    # min_wait = 1000
    # max_wait = 3000


if __name__ == '__main__':
    file_path = os.path.abspath(__file__)
    os.system(f"locust -f {file_path} --tags login -t 5m")

--tags login:执行标记为login的任务;

-t 5m:执行5分钟压测。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种高级编程语言,被广泛用于各种领域的软件开发、数据分析、人工智能和科学计算等。它有许多不同的知识点,下面是一些常见的Python知识点整理: 1. 基本语法:包括变量、数据类型、运算符、条件语句、循环语句等。 2. 函数:定义函数、参数传递、返回值、作用域等。 3. 模块与包:导入模块、使用第三方库、创建和使用自定义包等。 4. 文件操作:读取和写入文件、文件路径操作、异常处理等。 5. 数据结构:列表、元组、字典、集合等。 6. 面向对象编程:类、对象、继承、多态等。 7. 异常处理:捕获和处理异常、使用try-except语句等。 8. 正则表达式:匹配模式、替换字符串等。 9. 迭代器与生成器:迭代对象、生成器函数、yield关键字等。 10. 装饰器:函数装饰器、类装饰器等。 11. 并发编程:多线程、多进程、协程等。 12. 文件操作:读写文件、文件路径操作、文件压缩和解压缩等。 13. 数据库操作:连接数据库、执行SQL语句、操作数据库表等。 14. 网络编程:创建TCP/UDP服务器和客户端、Socket编程等。 15. Web开发:使用框架如Django和Flask进行Web应用开发、处理HTTP请求和响应等。 16. 数据分析与可视化:使用NumPy、Pandas和Matplotlib进行数据处理和可视化。 17. 机器学习:使用Scikit-learn库进行机器学习模型的建立和训练。 18. 数据爬取:使用BeautifulSoup和Scrapy进行网页爬取和数据提取。 19. 测试与调试:编写单元测试、调试程序等。 20. 性能优化:代码优化、内存管理、并行计算等。 这只是Python知识点的一小部分,Python是一门非常丰富的语言,还有很多其他的知识点值得深入学习和探索。 相关问题: 1. Python为什么在数据分析和科学计算领域中广泛使用? 2. Python中的模块和包有什么区别?如何导入和使用它们? 3. Python中的异常处理是怎样工作的?为什么它在编程中很重要? 4. Python中的迭代器和生成器有什么区别?如何使用它们来提高代码效率? 5. Python中的装饰器是什么?如何使用它们来增强函数或类的功能? 6. Python的多线程和多进程有什么区别?如何在程序中使用它们? 7. 在Python中如何进行文件的读写操作?如何处理文件路径和异常? 8. 如何使用Python进行数据库操作?如何连接数据库和执行SQL语句? 9. Python中如何进行网络编程?如何创建和使用TCP/UDP服务器和客户端? 10. 如何使用Python进行Web开发?如何使用框架来创建Web应用? 11. Python中如何进行数据爬取和数据处理?如何使用相关的库? 12. Python中如何进行测试和调试?如何编写单元测试和调试程序? 13. 如何使用Python进行性能优化?如何优化代码和内存管理? 14. Python在人工智能领域中有哪些常用的库和框架?如何使用它们来构建机器学习模型?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值