全部产品
云市场

参数化使用方法

更新时间:2019-10-15 17:56:40

在一些业务场景下,压测的请求中动态可变的部分是需要参数化的,比如以下常见场景:模拟不同用户登陆、当前接口依赖前置接口的部分返回信息、请求参数中需要带上当前的时间戳甚至还需要二次加签等。

本文将介绍参数类型、如何创建各类型参数和使用参数。

参数类型

压测请求配置时,能够为某个 API 的 URL、Header 或 Body 添加特定的参数,使 URL、Header 或 Body 动态变化。

PTS 支持配置以下参数来源及他们之间的组合。

适用范围 参数类型 说明
全局 文件参数 将存在关联的参数放在一个文件的不同列中,通过文件上传相应的参数值。文件参数的使用,需要在对应串联链路上设置“数据配置” 节点后,方可使用。具体用法参见 指令数据配置节点
全局 自定义参数 将字符串、系统函数组合成一个自定义的变量,便于在全局使用,适用于全局需要经常调整某部分设置(如某个 Header 设置)。
全局 系统函数 包括加密函数、随机函数、四则运算和其他常用函数类型。可以对字符串、全局自定义变量及串联链路变量做函数再处理。例如,对前置接口返回的 UUID 输出做 MD5 加签。
全局 全局 Header 为压测全场景的所有 API 设置同样的 Header。具体用法参见 Header 定义
串联链路 串联链路 Header 为串联链路下的所有 API 设置同样的 Header。具体用法参见 Header 定义
- 数据导出参数 导出串联链路中的参数后,供其他串联链路使用,具体参见数据导出
串联链路 数据指令-自定义参数 通过数据指令定义的自定义参数,具体参见数据指令
串联链路 数据配置-自定义参数 通过数据配置定义的自定义参数,具体参见数据配置节点
串联链路 出参 在创建串联链路时,将前置接口的部分返回信息作为参数(即出参)。

使用系统函数

下面以对 Body 进行参数化为例(URL 和 Header 类似)介绍如何使用系统函数。通过复制所需函数变量,粘贴至可编辑的文本区域。同时,可以按需进行组合、替换、嵌套或者追加需要的字符串等。

  1. PTS 控制台创建压测页面,填写压测 API 名称和 URL。

  2. 选择请求方法(如 POST)和请求参数类型

    说明:在本示例中,将对 Body 参数化进行举例,请求方法选择 POSTPUT。在实际压测中,请根据您的具体情况进行选择。

  3. 单击创建压测页面右上角的系统函数,查看系统支持的函数列表。

  4. 单击某个函数名称或 图标,系统将自动复制函数样例。

  5. (可选)函数生成器通过参数示例及说明,辅助您编写函数表达式。

    1. 单击系统函数列表底部的函数生成器,或某函数行的 图标,打开函数生成器

      para_generator

    2. 根据实际情况,编辑函数表达式,将示例值替换为实际压测请求使用的值。单击调试,可查看调试结果是否符合预期。

    3. 单击复制并添加,复制该函数表达式。

    4. (可选)勾选添加为全局自定义参数,并输入变量名。再单击复制并添加,复制函数的同时,此函数将添加到全局变量列表中,供整个压测场景调用。

  6. 在 API 的 Body 编辑框内,粘贴函数内容,并进行编辑,如组合字符串、参数或函数等。

关于四则运算函数的使用,参见四则运算的使用

使用已创建的参数

下面以对 Body 进行参数化为例(URL 和 Header 类似)介绍如何使用您已经创建的参数,包括文件参数、自定义参数、出参参数。通过复制所需参数变量,粘贴至可编辑的文本区域,同时,可以按需进行组合、替换、嵌套或者追加需要的字符串等。

具体参数创建方法,参见:

使用参数的操作步骤如下:

  1. PTS 控制台创建压测页面,填写压测 API 名称和 URL。

  2. 选择请求方法(如 POST)和请求参数类型

    说明:在本示例中,将对 Body 参数化进行举例,请求方法选择 POSTPUT。在实际压测中,请根据您的具体情况进行选择。

  3. 单击创建压测页面右上角的参数列表,查看所有已创建的参数。

  4. 单击某参数名称或 图标,系统将自动复制参数内容。

  5. 在 API 的 Body 编辑框内,粘贴参数内容,同时对 Body 内容进行编辑,如组合字符串、参数或函数等。

    参数使用

  6. 可选)当使用参数文件来组装压测请求参数时,可在数据配置节点中,对仅想使用一次的参数勾选数据轮询一次(该设置在整个串联链路生效),保证每条请求信息不重复。

    date polling

说明:被设置为轮询一次的参数即为基准参数。例如在上图中,username 设置为仅轮询一次,该参数一共 16 行,故另一个参数 bigfile_1 也只会被读取前 16 行数据。了解多参数组合的配置及读取方式请参见并发模式和RPS模式是如何去读取文件参数的

创建文件参数

创建文件参数有通过文件上传和通过配置 OSS 文件两种方式。

注意:为提升文件数据的灵活使用程度做了系统升级,新添加配置的文件参数,在使用前需在对应的串联链路中添加数据配置节点后,方可调用该文件参数。具体操作方法参考添加数据配置节点

通过上传文件创建

  1. 创建压测页面,单击右上角的数据源管理

  2. 文件参数定义部分,点击+上传文件来上传参数文件。

    待上传的文件应满足 PTS 文件参数规范,参见文件规范

  3. 上传文件后,系统自动根据文件中的列生成多个变量。可自定义每个变量的变量名

    说明: 若参数文件第一行是非参数数据,请勾选首行作为参数名,PTS 读取参数文件时将跳过第一行的数据。

    file_parameter

  4. 单击确定,完成创建。

注意:通过在串联链路中添加数据配置节点才能使用文件参数,请参见添加数据配置节点

通过配置 OSS 文件创建(敬请期待)

  1. 创建压测页面,单击右上角的数据源管理

  2. 文件参数区域单击配置 OSS 文件

    待上传的文件应满足 PTS 文件参数规范,参见文件规范

  3. 导入 OSS 文件对话框中单击权限校验完成授权,然后填入 OSS 文件地址。获取 OSS 文件地址步骤如下:

    1. 登录 OSS 控制台

    2. 在控制台左侧导航栏中单击目标文件所在的 Bucket 名称,然后在顶部导航栏单击文件管理

    3. 在文件列表中单击目标文件,并在目标文件的详情页面进行以下配置:

      1. 单击设置读写权限,然后选择为公共读

      2. 单击解冻

        将文件设置为解冻状态需要耗时约 1 分钟。

      oss_file

    4. 重新进入目标文件的详情页面,单击复制文件 URL

  4. 上传文件后,系统自动根据文件中的列生成多个变量。可自定义每个变量的变量名

    若参数文件第一行是非参数数据,请勾选首行作为参数名,PTS 读取参数文件时将跳过第一行的数据。

注意:通过在串联链路中添加数据配置节点才能使用文件参数,请参见添加数据配置节点

文件规范

  • 文件格式支持 .csv 及 .zip 格式,.zip 压缩包内的文件需是以 .csv 结尾的单个文件。

    注意请不要直接修改 xlsx 文件的后缀。推荐使用 EXCEL、Numbers 等软件导出,或使用 Apache Commons-csv 程序生成。

  • 建议您在参数文件第一行不写列名,直接写参数数据即可。如果参数文件第一行是列名(不是参数数据),可以使用首行作为参数名功能,则导入的文件参数将不计算第一行。

  • 可上传多个文件,单个文件大小限制在 60 MB,超过 60 MB 可以尝试压缩为 .zip 文件。

  • 文件中单行不能超过 2 万个字符。

  • 若需要多个数据关联组合为一组参数,无需将关联组合强制放到一个文件中,可通过数据配置节点的文件参数设置功能,来进行跨文件数据的组合。

  • 如果引用多个文件中的参数,可以通过指定基准文件来设置组合基准。若不设置基准列数据轮询一次的参数,则默认将全部参数重复至 1000 行后再组合重复。详情请参见并发模式和 RPS 模式下,是如何读取多文件参数的

    注意:若参数有强制的一一对应关系,请务必将其放在一个文件中并做好对应关系。需保持每一行中多个列的数据是完整的,否则会出现空字段,可能影响压测数据。例如参数文件中两列分别表示 Username 和 Password 两个参数:

    1. john,123456
    2. mike,234567
    3. lilei,345678

创建自定义参数

自定义参数包括全局自定义参数和串联链路自定义参数,以下介绍全局自定义参数。串联链路自定义参数参考数据指令-自定义参数数据配置节点-自定义参数

  1. 创建压测页面,单击右上角的数据源管理

  2. 自定义参数列表中,填写参数名和参数逻辑,单击确定

    说明

    • 自定义参数只能是字符串与系统函数的结合,不可使用文件参数和出参(该支持后续会放开,敬请期待)。
    • 当自定义参数中使用了系统函数,且在串联链路中的两个 API 上使用,那么同一个虚拟用户的一次串联链路(事务)操作里的两个 API 里的值是相同的

    diy_parameter

创建出参参数(接口的返回截取,可供后续接口调用)

在一些业务中,多个请求参数之间需要有前后传参关系。比如理财业务中根据用户的消费能力,推荐适当产品,这时就需要把消费能力等级从前置接口的返回中截取出来,并传到当前的产品推荐接口中。

前置 API 的出参提取有多种方式,本文以 Body:JSON 为例。其他出参提取方式,参见出参与断言

API 的 Response 示例如下:

  1. {
  2. "info": "success",
  3. "message": "处理成功",
  4. "data": {
  5. "id":13509, "code":0,
  6. "items": [
  7. {"name": "name1", "value": "1234"},
  8. {"name": "name4", "value": "7648"}
  9. ]
  10. }
  11. }
期望获取出参的位置 解析表达式
获取 info 的值 info
获取 data 的 id 的值 data.id
获取 items 第一个对象的 value 的值 data.items[0].value

例如提取 items 第一个对象的 value 值,设置为出参变量为 “value_out”,则设置如下:

json_abstract

说明:

  • PTS 仅提供数据生成能力,不对依据您的指令(包括数据生成方式)进行测试后产生的目标服务器或者业务异常承担任何责任。 详情请见:阿里云产品服务协议(通用)