首先大致介绍一下要做的性能测试的场景:单个用户(设备)做的操作是一个涉及 http 请求、mqtt 通信的多步骤的过程,不是单接口的测试,mqtt 通信报文使用的是 protobuffer 格式编码,模拟设备实现 1、设备登陆 2、设备更新配置 3、平台更新配置 得出性能指标:当前服务器的最大负载数。
因为我的性能测试经验可以说是 0,前期对于编码语言和性能工具的选择有些不知所措。
我所知道的性能测试工具有 Jmeter、locust,其他的 wrk,ab 只是有所耳闻,不太熟悉。
因为 locust 是基于 python,而 protobuffer 格式编码的报文和 go 较兼容,所以对于编码语言我考虑的是 go 和 python。(不只用性能测试工具,而需要代码的原因是需要 mock mqtt 客户端 与服务端进行通信,包含连接 mqtt,接收报文来心跳保活和获取信息)
我所知道的是 python 可以结合 locust 进行性能测试和检测,但是因为之前做过类似的多线程的接口测试代码编写(还没到性能测试的地步),有了解过 python 的 Global Interpreter Lock(全局解释器锁)机制,使得在同一时刻只能有一个线程在一个 CPU 上执行,无法将多个线程映射到多个 CPU 上,使得 Python 并不能实现真正的多线程并发。所以可能 python 的并发测试有点不好做,但是也有在 一个话题 (https://testerhome.com/topics/17068 ) 里面看到有这样的评论:
locust 因为是基于 python 的压测框架,而 python 的 GIL 限制,无法直接利用多核处理器,需要你手动打开多个 locust 进程来利用 CPU 多核,才能充分使用压测客户机
还有就是 python 需要对 protobuffer 格式编码的报文进行解码编码操作。python 语言我个人是熟悉的。
也有初步了解一下 go 语言,其性能和并发编程是优于 python 的,“其中 goroutine 是一种非常优雅的线程 (轻量级) 实现”,但是因为之前没有接触过,不知道有没有与之匹配度高的性能测试工具或者库(网上信息很少,鱼龙混杂),想问一下大家这种情况下对于性能测试工具和编码语言我应该做什么样的选择?