PTS 兼容 JavaScript ES2015(ES6)+ 语法,并提供额外函数,帮助您在脚本模式下,快速编排压测场景。
PTS 还提供了各种类型的脚本模板(如各种协议的常见用法、以及一些常用函数等),在控制台脚本编辑器右侧的脚本常用模板示例里,供您参考以编写自己的脚本。
脚本结构
一个 PTS 场景脚本可由导入依赖模块、定义全局变量、定义全局选项 Options、定义函数、定义检查点组成,详细脚本内容请参考下文。
导入依赖模块
将所需模块导入后,才能使用模块中的 API。
定义全局变量
如果需要全局变量,可定义在函数外部。例如:
const globalVar = "var"const globalObj = {"k": "v",}export default function () {console.log(globalVar); // varconsole.log(globalObj.k); // v};
定义全局选项 Options
通过全局选项您可以控制引擎的默认行为。
export const option = {http: {http2: true,maxIdleConns: 50,basicAuth: {username: 'user',password: 'passwd',}},tlsConfig: {'localhost': {insecureSkipVerify: false,//需要用户在场景中上传请求文件ca.crtrootCAs: [open('ca.crt')],//需要用户在场景中上传请求文件client.crt, client.keycertificates: [{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 parametersconst 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 时的流程图如下:
说明: