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 的概念介绍,请参见 常见问题。