新手区 想问问 Python 多线程可以实现同一时间并发吗?(如何实现一个 jmeter 同时远程执行压力机脚本)

· 2021年02月03日 · 最后由 回复于 2021年02月04日 · 919 次阅读

背景

  1. 公司要做性能测试,在配置 jmeter 分布式执行 (远程执行) 压力机出现各种问题,然后就用 python 连接 ssh 进行执行 jmx 脚本
  2. 最近的项目应该不止一台压力机,所有要分布式执行 (我理解的就是几乎同时执行脚本施加压力),想用多线程或者多进程来实现 (属实是菜鸟,的确不理解),就有了下面的脚本 其中jmeter_start就是封装的进行 ssh 连接然后执行 jmx 脚本 # 结果 通过日志文件查看得到两个先后在压力机执行启动 jmx 脚本命令不超过 1 秒 (大概)

疑问

个人觉得这种做法总有不妥,也说不上来哪里有问题,需要加类似 jmeter 那种同步定时器吗,还请各位指点

共收到 10 条回复 时间 点赞
· #11 · 2021年02月03日 Author
仅楼主可见

jmeter 本身就提供的 slave 模式不满足?

#9 · 2021年02月03日 Author
陈恒捷 回复

在配置上到处碰壁 ,所以想着绕个圈子。😔

首先分布式可以满足这个要求,然后我猜楼主的分布式怎么都无法关联😏

多线程没必要多脚本啊,一个脚本然后非 gui 直接执行不行吗,还是楼主的多线程指的是多场景?

#7 · 2021年02月03日 Author

之前用 jmeter 分布式配置远程单机出了问题 ,然后就用的 脚本帮我去压力机上非 gui 执行,这个多线程想法是帮我去多台压力机执行 (试图实现 jmeter 远程执行多台压力机) jmx 脚本

回复

楼主这个方向确实比较绕,而且在实际使用中还会遇到别的问题需要处理:
1、采集的数据得另外想办法再收集、汇聚和分析
2、因为实际没有统一指挥(只是启动时机尽可能接近,不算指挥),很难准确设定发起压力的策略,只能是简单的 xN。集合点、共享变量之类的特性也没法直接用,得另外想办法继续绕。

jmeter 自带的 slave,其实就是纯粹的压力发生器,由 master 下发命令什么时候、发出多大请求量、请求内容是什么,slave 不用完整执行脚本,负荷比较低,而且数据也会自动汇聚到 master,用起来会方便不少。

既然可以用 ssh 连上,说明网络是通的。或者楼主可以发下具体是什么问题导致 slave 模式没能正常启动起来?

你重庆的? 我也是 不过没在重庆工作

#4 · 2021年02月04日 Author
是先生啊 回复

只是在重庆工作

可以使用 threading 中的 Timer

from threading import Thread, Timer
class MyTimer(object):

    def __init__(self, callback_proc, args=None, kwargs=None ):

        self.__timer = None
        self.__callback_pro = callback_proc
        self.__args = args if args is not None else []
        self.__kwargs = kwargs if kwargs is not None else {}
        self.__interval = 0.5

    def exec_callback(self, args=None, kwargs=None):
        self.__callback_pro(*self.__args, **self.__kwargs)
        self.__timer = Timer(self.__interval, self.exec_callback)
        self.__timer.start()

    def start(self):
        self.__timer = Timer(self.__interval, self.exec_callback)
        self.__timer.start()


    def cancel(self):
        print('cancel')
        self.__timer.cancel()
        self.__timer = None

我这里就是定义了带有定时器的线程,所有线程每隔 0.5s 执行

#2 · 2021年02月04日 Author
陈恒捷 回复

等压力机到了再尝试了,目前用的是自己的虚拟机,https://my.oschina.net/u/4411233/blog/3523962,感谢回复

关闭了讨论 02月04日 11:12
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册