tencent cloud

云压测

产品概述
购买指南
计费概述
按量计费(后付费)
购买方式
欠费说明
退费说明
快速入门
操作指南
简单模式压测
脚本模式压测
JMeter 模式压测
管理项目
管理场景
流量录制
环境管理
定时压测
压测报告
访问控制
告警管理
标签管理
错误代码手册
实践教程
使用 Prometheus 观测性能压测指标
使用云压测回放 GoReplay 录制的请求
API 文档
History
Introduction
API Category
Making API Requests
PTS-related APIs
Data Types
Error Codes
JavaScript API 列表
JavaScript API 列表概述
pts/global
pts/http
pts
pts/dataset
pts/grpc
pts/jsonpath
pts/protobuf
pts/redis
pts/sql
pts/url
pts/util
pts/ws
pts/socketio
pts/socket
常见问题
相关协议
服务等级协议
使用限制
隐私政策
数据处理和安全协议

脚本概述

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

脚本结构

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

导入依赖模块

将所需模块导入后,才能使用模块中的 API。
import http from 'pts/http';
import { check, sleep } from 'pts';

定义全局变量

如果需要全局变量,可定义在函数外部。例如:
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 的概念介绍,请参见 常见问题


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈