问答 【提问帖】性能测试应该怎么做选择?

醋精测试媛 · 2023年08月04日 · 最后由 回复于 2023年08月25日 · 6040 次阅读

首先大致介绍一下要做的性能测试的场景:单个用户(设备)做的操作是一个涉及 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 是一种非常优雅的线程 (轻量级) 实现”,但是因为之前没有接触过,不知道有没有与之匹配度高的性能测试工具或者库(网上信息很少,鱼龙混杂),想问一下大家这种情况下对于性能测试工具和编码语言我应该做什么样的选择?

共收到 4 条回复 时间 点赞

如果公司有要求就用公司要求的工具测,如果没要求就看自己擅长哪个。jmeter 就是小巧,好操作;loadrunner 功能强大,但是界面比较复杂,而且收费;locust 的话比较灵活可以自己进行一些拓展,但是在报告和监控方面没有什么比较好的展现,需要自己去集成一些工具或平台实现,或者自己开发

醋精测试媛 关闭了讨论 08月07日 17:40
醋精测试媛 重新开启了讨论 08月07日 17:40
回复内容未通过审核,暂不显示

jmeter 没有什么是 jmeter 解决不了的,HTTP 的好说,mqtt 的使用第三方 mqtt 取样器,如果还是不行那就通过 java 代码自己封装调用

有意思,可惜我的工具目前不支持 mqtt 协议,我也一直想写 mqtt 的扩展,只是没有项目用来实践,技术栈用的 C++/lua,通信底层支持 tcp、udp、ssl、kcp,应用层支持 http、websocket、sproto、protobuf,想着继续完善下去
项目地址:https://gitee.com/lutianming/supersheeps_extend.git

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册