有奖捉虫:行业应用 & 管理与支持文档专题 HOT
PTS 兼容 JavaScript ES2015(ES6)+ 语法,并提供额外函数,帮助您在脚本模式下,快速编排压测场景。
您可在控制台的在线编辑器里,用 JavaScript 代码描述您的压测场景所需的请求编排、变量定义、结果断言、通用函数等逻辑。(详细的 API 文档请参见:PTS API
PTS 还提供了各种类型的脚本模板(如各种协议的常见用法、以及一些常用函数等),在控制台脚本编辑器右侧的脚本常用模板示例里,供您参考以编写自己的脚本。

脚本结构

一个 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 = { life: "global" };

export function setup() {
return { life: "setup" };
}

export default function (data) {
console.log(JSON.stringify(global)); // {"life":"global"}
console.log(JSON.stringify(data)); // {"life":"setup"}
}

export function teardown(data) {
console.log(JSON.stringify(global)); // {"life":"global"}
console.log(JSON.stringify(data)); // {"life":"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 的概念介绍,请参见 常见问题