帮你快速理解、总结文档立即下载

脚本概述

最近更新时间:2026-09-07 18:42:03
本文档已由 AI 辅助审校
我的收藏
PTS 兼容 JavaScript ES2015(ES6)+ 语法,并提供额外函数,帮助您在脚本模式下,快速编排压测场景。
您可在控制台的在线编辑器里,用 JavaScript 代码描述您的压测场景所需的请求编排、变量定义、结果断言、通用函数等逻辑。(详细的 API 文档请参见:PTS API
PTS 还提供了各种类型的脚本模板(如各种协议的常见用法、以及一些常用函数等),在控制台脚本编辑器右侧的脚本常用模板示例里,供您参考以编写自己的脚本。

进入脚本编辑器

1. 登录 腾讯云可观测平台,在左侧导航栏中选择云压测 > 测试场景
2. 单击新建场景
3. 在创建测试场景页面选择脚本模式,单击开始
4. 场景编排区域即为在线脚本编辑器,可直接编写压测脚本;编辑器右侧的脚本常用模板示例提供各协议与常用函数的模板,可单击引用。
5. 编写完成后,可单击右上角保存调试保存并运行
施压模式、压测时长、施压地域等配置请参见 施压配置
场景模式(简单模式 / 脚本模式 / JMeter 模式)的差异说明请参见 场景概述
正式压测前建议先用调试校验脚本,详情请参见 调试场景


脚本结构

一个 PTS 场景脚本可由导入依赖模块、定义全局变量、定义全局选项 Options、定义函数、定义检查点组成,详细脚本内容请参考下文。

导入依赖模块

将所需模块导入后,才能使用模块中的 API。




定义全局变量

如果需要全局变量,可定义在函数外部。例如:
const globalVar = "var"
const globalObj = {
"k": "v",
}

export default function () {
console.log(globalVar); // var
console.log(globalObj.k); // v
};

定义全局选项 Options

通过全局选项您可以控制引擎的默认行为。
export const option = {
http: {
http2: true,
maxIdleConns: 50,
basicAuth: {
username: 'user',
password: 'passwd',
}
},
tlsConfig: {
'localhost': {
insecureSkipVerify: false,
//需要用户在场景中上传请求文件ca.crt
rootCAs: [open('ca.crt')],
//需要用户在场景中上传请求文件client.crt, client.key
certificates: [{cert: open('client.crt'), key: open('client.key')}]
}
}
}

定义函数

每个并发用户(VU)每次迭代执行的逻辑,定义在主函数(default 函数)里。 除了主函数,您还可以定义预处理(setup)和后处理(teardown)函数,示例如下:
预处理函数在每次压测开始后运行一次。
后处理函数在每次压测结束前运行一次。
// 全局变量,定义在函数外
const global = { stage: "global" };

// 用 setup 函数做预处理,可返回自定义的键值对
export function setup() {
return { stage: "setup" };
}

// 主函数(入参可接收 setup 函数返回的键值对)
export default function(data) {
console.log(JSON.stringify(global)); // {"stage":"global"}
console.log(JSON.stringify(data)); // {"stage":"setup"}
}

// 用 teardown 函数做后处理
export function teardown(data) {
console.log(JSON.stringify(global)); // {"stage":"global"}
console.log(JSON.stringify(data)); // {"stage":"setup"}
}

定义检查点

配置检查点可以从业务角度判断请求是否成功。
import http from 'pts/http';
import { check } from 'pts';

export default function () {
// get request with headers and parameters
const resp1 = http.get('http://httpbin.org/get', {
headers: {
Connection: 'keep-alive',
'User-Agent': 'pts-engine',
},
query: {
name1: 'value1',
name2: 'value2',
},
});
console.log(resp1.json().args.name1); // 'value1'
check('status is 200', () => resp1.statusCode === 200);
check('body.args.name1 equals value1', () => resp1.json().args.name1 === 'value1');
}

生命周期

预处理(setup)和后处理(teardown)函数:每台压测机运行一次。
定义全局变量(global)的代码:每个 VU 运行一次。一些静态的文件读取等操作建议放到 global 中定义,这样一个并发仅需读取一次文件。避免场景迭代重复打开文件。
主函数(default)代码:每个 VU 的每次迭代运行一次,且每个 VU 在达到本次压测配置的时长上限或迭代上限之前,会持续不断地迭代执行。
例如:在一台压测机上,当有两个 VU 时的流程图如下:



说明:
关于 VU 的概念介绍,请参见 常见问题