一、参数定义
·默认 csv 首行作为参数名。在该模式下,PTS 读取数据时,会跳过第一行。
·若不用 csv 文件首行做参数名,则可如下所示,取消勾选首行作为参数名,然后勾选该参数文件所在的行,页面会展开一个参数名编辑框,供你自行编辑参数名。
二、参数使用
·在代码中,你可以用参数名作为变量名,获取变量值。
·每个 VU 每次迭代会按照顺序取 csv 的一行数据。
·当 csv 文件被读取完最后一行数据后,下次会回到首行,继续循环读取。
三、参数切分的逻辑
·同施压机多 VU:所有 VU 共同逐行读取施压机上的 csv 文件,每个 VU 每次迭代会依次取一行数据。例如:施压机有一个参数文件 user.csv,在压测启动后,VU-1的第1次迭代读取到了第1行,VU-2的第1次迭代则读取到第2行,以此类推。
·多施压机:若参数文件很大,用户可勾选切分文件。PTS 会将大文件逐行切分,按照流量占比分配给多个施压机使用。例如:user.csv 有4行数据,用户勾选了切分文件,且在广州地域有2个压测资源(施压机),则在压测启动前,施压机-1获取到包含第1、3行数据的 csv,施压机-2获取到包含第2、4行数据的 csv。
四、参数组合的逻辑
一个场景可上传多个 csv 参数文件,进行跨文件参数组合。
·不同 csv 文件的列名(参数名)需保持全局唯一。
·每个 VU 每次迭代会跨文件取到多个文件的同一行的数据。
·若不同 csv 文件的行数不同,默认采用行数大的作为基准,行数少的 csv 文件会自行复制到跟基准文件相同行数,保证每个 VU 每次迭代都能取到多个文件的同一行的数据。
五、简单模式场景
在简单模式的场景中,你可以用 ${} 的形式,使用参数文件里的参数。以下面的 dataset.csv 为例:
name,agexiaohong,18xiaoming,19
上传以上参数文件后,你即可在请求的任何部分通过${name}, ${age}引用参数。如下:
·在 GET 请求的 url 通过 `${age}` 引用参数文件中定义的 age 参数,在请求参数中通过 `${name}` 引用参数文件中定义的 name 参数。
·在 POST 请求的 body中通过 `${name}`, `${age}` 引用参数文件中定义的参数:
六、脚本模式场景
代码示例如下,用 dataset.get("MyKey"),可从 csv 文件获取参数名/列名为 MyKey 的参数值,作为请求体里的 value 值。
如果期望参数文件的数据轮询一遍后,自动结束压测,可以设置全局参数:stopAfterDataConsumption: true。
import dataset from 'pts/dataset';// Global load configuration example export const option = { load: { // Stop the test when the dataset is fully consumed. Default: false. stopAfterDataConsumption: true, // Total iterations to run. Uncomment to enable. Default: unlimited. // targetIterations: 100 } };export default function () { const value = dataset.get("MyKey") //@ts-ignore const postResponse = http.post("http://httpbin.org/post", {data: value}); console.log(postResponse)};