在同一场景中,若您需要配置多个脚本,并且基于不同权重,按比例分配各脚本的 VU 数,则您可使用多脚本压测模式,实现更灵活的脚本定制及施压配置。多脚本压测常用于在一次任务中同时覆盖多个业务接口或多条用户路径,按真实业务流量的占比还原线上请求分布,提升压测结果的参考价值。
基本用法
1. 登录 腾讯云可观测平台,在左侧导航栏选择云压测 > 测试场景。
2. 单击脚本模式中的开始,在场景编排中,配置脚本。您可如下图所示,点开多脚本导航栏,添加新的脚本。
同一个场景下的所有脚本共享该场景的基础配置(如施压模式、压力曲线、施压地域、环境变量、数据集、协议依赖等),每个脚本只需关注自身的业务逻辑与权重设置。每个脚本在运行时互相独立,拥有各自的 VU、迭代计数与执行上下文,脚本之间不会共享内存变量;若需要在脚本之间复用公共逻辑,请将公共代码抽取为独立的 js 文件,再在各入口脚本中通过
import 引入。
3. 在新建压测脚本的页面,您需填写新脚本的名称以及权重,然后单击确认。
说明:
权重是一个非负整数,取值范围建议为 1 - 100,用于描述该脚本在整个场景中的施压占比,权重数值本身没有绝对含义,只有与其他脚本的权重相对比较时才生效。
若某个脚本的权重被设置为0,该脚本将被视为已禁用,在当前任务中不会参与施压,也不会产生独立的 VU 或 RPS,可用于临时屏蔽某个脚本而无需删除。此外,权重为0的脚本也常被用作公共脚本,即仅作为被其他脚本通过 `import` 引用的模块文件存在,本身不参与施压,详见 引用公共脚本 的说明。

4. 若您需要修改原有脚本,可在多场景脚本导航栏右侧对该脚本进行编辑。编辑操作支持修改脚本内容、脚本名称以及权重值,修改后在下一次启动任务时生效,不会影响正在运行中的任务。
说明:
建议在同一场景下至少保留一个权重大于0的脚本,否则任务将因总权重为0而无法启动;仅包含公共脚本(所有脚本权重均为 0)的场景同样无法启动。

压力分配规则
当压测任务执行时,PTS 将计算各个脚本的权重占所有脚本总权重的百分比,来分配施压力度:
假设场景中共有 N 个脚本,第 i 个脚本的权重为 Wi,则该脚本实际分得的施压比例为 Wi / (W1 + W2 + … + WN)。例如场景中配置了三个脚本 A、B、C,权重分别为70、20、10,则 A 占 70%、B 占 20%、C 占 10%。权重为0的脚本不计入总权重,也不参与分配。
在并发模式下,各脚本的 VU 将按该脚本权重占总权重的比例分配。例如场景总 VU 数为1000,三脚本权重为70/20/10,则 A、B、C 分别启动700、200、100个 VU,各自在自身 VU 内按脚本逻辑循环执行。由于 VU 必须为整数,当按比例分配出现小数时将自动向下取整并补齐差额,个别脚本的实际 VU 数可能与理论值相差 1 个。
在 RPS 模式下,各脚本的 RPS 将按该脚本权重占总权重的比例分配。例如场景总 RPS 为1000,三脚本权重为70/20/10,则引擎会按700 / 200 / 100 的目标 RPS 分别对三个脚本进行节流控制,单脚本内部再按自身业务逻辑组织请求。与 VU 类似,RPS 在分配时也按整数下发到每个脚本,当按比例计算出现小数时将自动向下取整并补齐差额,个别脚本的实际目标 RPS 可能与理论值相差1。若某个脚本的执行耗时较长,导致实际 RPS 达不到分配值,引擎不会将剩余 RPS 额度转移给其他脚本,以保证各脚本之间的施压比例稳定、可预期。

使用建议如下:
当多个脚本压测同一组下游服务时,请合理评估总施压量是否超过下游承载能力,避免因权重分配失衡导致某一接口被过度施压。
建议在正式压测前,先将各脚本以较小的 VU 或 RPS 试跑一次,确认脚本本身无逻辑错误、采样与断言配置正确,再按真实比例放大施压。
引用公共脚本
注意事项
在引用公共脚本时,请注意以下几点:
路径支持相对路径(如 './util.js'),解析规则以当前脚本所在目录为基准查找,不支持 Node.js 的 `node_modules` 目录解析,建议显式写出 `.js` 后缀以避免歧义。
公共脚本中的顶层变量不会在不同 VU 之间共享,每个 VU 都会获得独立的模块实例,因此请勿将顶层变量作为跨 VU 的全局状态使用,确需共享的状态应通过场景级别的数据集、环境变量或远端存储承载。
若公共脚本内部依赖初始化开销较大的对象(例如加载大文件、预构造复杂数据),建议将构造过程放在导出的函数内部按需调用,或通过 `setup` 阶段统一生成后再分发,避免每个 VU 重复执行。
以 `pts` 或 `pts/` 开头的模块名是引擎内置的能力模块(如 `pts/http`、`pts/grpc` 等),属于专用关键字,不能用作公共脚本的文件路径。
使用建议
在多脚本压测场景中,不同脚本之间往往存在可以复用的逻辑,例如登录鉴权、签名计算、公共请求头构造、通用的参数生成与校验方法等。为避免在每个入口脚本中重复维护相同代码,您可以将公共逻辑抽取为独立的 js 文件,再在各入口脚本中通过 ES6 的 `import` 语法引入,从而实现"一处修改、多脚本同步生效"。
公共脚本同样需要添加到多脚本列表中,以便引擎在运行时能够加载文件内容,但其权重必须设置为0,仅作为被入口脚本通过 `import` 引用的模块文件存在,公共脚本则通过相对路径被入口脚本加载。
说明:
入口脚本是指拥有非零权重、会被引擎直接调度执行的脚本。
若漏将公共脚本添加到多脚本列表,入口脚本在 `import` 时会因找不到目标文件而启动失败;若错误地给公共脚本设置了非0权重,该文件会被当作入口脚本执行,通常因缺少 `default` 导出函数或执行逻辑不完整而导致任务异常。
公共脚本推荐使用命名导出或默认导出来对外暴露函数、常量和对象,例如:

在入口脚本中,按需引入公共脚本导出的内容即可使用:
