作者简介: 柯开,腾讯云高级工程师,腾讯压测领域 OTeam PMC,负责腾讯云可观测-云压测产品设计研发。
前言
在当今数字化的时代,越来越多的应用程序和服务都被迁移到云上运行。性能测试,正是变更前验证的关键一环,是对系统进行全方位的性能“体检”。它一般通过模拟用户操作,使系统处在高强度压力之下,检验系统是否稳定、哪里会出问题。
随着分布式、微服务、云原生等架构的发展,性能测试面临了新的挑战。
为此我们打造了腾讯云可观测-云压测(Performance Testing Service, PTS),一款分布式性能测试服务,可模拟海量用户的真实业务场景,全方位验证系统可用性和稳定性。支持按需发起压测任务,提供百万并发多地域流量发起能力。
提供流量录制、场景编排、流量定制、高级脚本定制等功能,可快速根据业务模型定义压测场景,真实还原应用大规模业务访问场景,帮助用户提前识别应用性能问题。
云压测目前已经支持原生 JMeter 压测,白屏录入以及高级脚本模式,支持十几种协议,还具备常态化压测、持续测试、集成腾讯云可观测产品生态等能力,提供最佳实践方案,保障业务性能质量。
压测常见痛点
常见痛点如下:
云压测优势
优势如下:
云压测功能特点
云压测可以分为两个部分来看:一个压测服务的 PAAS 平台以及可插拔的压测引擎。
PAAS 平台主要提供压测通用功能:
可插拔三方引擎集成:
开放数据体系:
快速上手云压测
云压测支持多种压测模式,适用于不同阶段的用户,总有一款适合您。无论是要压测不同的协议:http, websocket、grpc 等,还是同时压测数十种不同服务, 您都可以进行快速压测。
在新建场景页面时选择简单模式。
无需填写任何代码,直接构建 http 请求,以一个 HTTP Get 请求为例,您可以配置其 URL、请求参数(URL query string)、认证方式、请求头、请求体、检查点等。
如下图所示,我们可以快速地建立"GET"、 "POST"、 "PUT"、 "PATCH"、 "OPTIONS"、 "DELETE"、 "HEAD"的HTTP请求。在图中我们定义全局变量name, age。我们可以在定义请求的任何地方,比如url, 请求参数,header等通过${}
来引用变量。
设置全局变量值时,除了直接输入数据,还可以用 {{xx}}
的形式,由函数计算得来。云压测支持原生ES5 语法,任何原生的js函数都可以通过{{}}
引用。常见函数可参考Javascript标准内置对象链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects。
您还可以通过 UI 方式设置断言,判断返回的响应是否符合您的期望。以下配置检查 response code 是否等于 200, 以及响应体中 json 字段 args.name 值是否为 lucy。
2. 脚本模式,十多种协议支持,模拟复杂用户场景
有时候,我们需要更加灵活地编写用例,例如需要使用 if、for、sleep 等方法来控制压测流程,那么脚本模式的编排功能可以很容易地满足您的需求。
脚本模式当前已经支持 http、https、http2、websocket、grpc、protobuf、trpc、socketio、tcp/udp、sql、redis 等协议。您可以在脚本自由组合各种协议来模拟压测场景,还可以在同一个脚本中既包含 http 请求,也包含 grpc 请求,或者其他任何类型请求。云压测会根据不同类型的请求生成统一报表。
PTS 兼容 JavaScript ES2015(ES6)+ 语法,并提供额外函数,帮助您在脚本模式下,快速编排压测场景。您可在控制台的在线编辑器里,用 JavaScript 代码描述您的压测场景所需的请求编排、变量定义、结果断言、通用函数等逻辑。
在创建用例中,通过以下入口可以进入脚本编写模式。
以下是一个简单的 http demo, 您可以在脚本中编写任意请求,打印数据,以及校验返回结果是否符合您的期望。
您也可以用 PTS 模拟 websocket 请求。
WebSocket 是一种应用层通信协议,可在单个 TCP 连接上进行全双工通信。
不同于 HTTP 请求的客户端发起、服务端响应的一问一答模式,WebSocket 连接一旦建立,直到连接关闭之前,客户端、服务器之间都可源源不断地、双向地交换数据。因此,在压测场景中,基于 WebSocket 请求的脚本与基于 HTTP 请求的脚本,其结构和作用机制有所不同:
执行 HTTP 脚本的每个 VU 会持续不断地迭代主函数( export default function() { ... }
),直到压测结束。
执行 WebSocket 脚本的每个 VU 不会持续迭代主函数,因为主函数会被建立连接的 ws.connect
方法阻塞,直到连接关闭。而在连接建立后的回调函数里( function (socket) {...}
),会持续不断地监听和处理异步事件,直到压测结束。
3. JMeter 压测,秒级拉起集群,支持百万并发
您是否还在为如何搭建 JMeter 集群而发愁?
使用腾讯云云压测,您不需要去准备机器,不需要搭建 JMeter 分布式集群,也不需要花时间去给机器初始化。
只需要上传的 jmx 文件,以及依赖的其他数据文件,即可一键开启 JMeter 百万并发压测。在场景中配置的压力模型,会重写 jmx 文件中主线程组的配置,不会影响 setUp 和 tearDown 线程组。云压测会基于用户并发压力,将 jmx 线程组按比例拆分到不同机器上,以集群模式调度整个压测服务运行。
通过以下入口进入 JMeter 压测 :
设置施压模型,填写您期望的 100W 并发数,云压测会自动为您拉起 JMeter 压测集群,分布式在多个地域,多个机器上为您执行压测。
上传 jmx 文件以及任何您想自定义的 JMeter 参数或者其他依赖 jar包,csv文件等。点击保存并运行,即可一键开启压测。
总结
只有进行充分的性能测试,才能发现应用程序在各种网络连接、流量负载以及安全防御方面存在的潜在问题,确保应用程序的稳定性和可靠性。通过云压测,您将能够更好地评估和调整您的云服务以及应用程序,以满足不断变化的业务需求和用户需求,获得最佳的用户体验。
云压测支持百万并发压测,100% 兼容 JMeter,可轻松应对流量高峰,无惧高负载,保障系统稳定性。新老用户可享受不同程度优惠。
新用户:免费领取尝鲜包,不限地域,2万 VUM 可免费使用一个月!
VUM:VUM 是压测资源消耗的计量单位,VUM = VU(最大并发数) * Min(分钟),即并发运行时长。如1000VUM = 1000并发运行1分钟,也等于500并发运行2分钟。
老用户:可在2023年4月15日-4月24日,参与云压测新品特惠活动,套餐包限时限量优惠。全场6折,快来探测您业务系统的“极限并发”吧~
各套餐包规格对照表:
扫码下方查看云压测特惠活动详情:
近期文章推荐:
联系我们
如有任何疑问,欢迎扫码进入官方交流群~
欢迎关注腾讯云可观测,了解最新动态
👇点击阅读原文立即进入云压测上线大促活动