参数说明

本文介绍微服务压测中的参数文件URL和动态参数调用规则。

参数文件URL:提供一个公网可下载的文件地址

平台会把该参数文件分发到每一个施压机,应用每一次调用参数就在该文件中按顺序读取一行。文件中也支持动态函数参数。

参数文件填写格式:

  • 方法参数类型:填写的内容是一个字符串类型的JSON数组,数组的每一位代表对应位置的参数类型。除了Java基本类型,其余类型需要填写完整的类路径。

  • 方法参数:填写的内容是一个字符串类型的JSON数组,数组的每一位代表对应位置的参数。

如下所示:

方法

参数类型填写方式

文件参数格式

String sayHello(String name)

["java.lang.String"]

["hello, dubbo"]
["hello, dubbo"]
["hello, dubbo"]

String helloBean(HelloBean helloBean)

["com.alibaba.pts.dubbo.api.DemoService"]

[{"booleanValue": true, "helloSubValue": {"booleanValue": false, "intValue": 2, "stringValue": "subbean"}, "intValue": 1, "stringValue": "bean"}]
[{"booleanValue": true, "helloSubValue": {"booleanValue": false, "intValue": 2, "stringValue": "subbean"}, "intValue": 1, "stringValue": "bean"}]
[{"booleanValue": true, "helloSubValue": {"booleanValue": false, "intValue": 2, "stringValue": "subbean"}, "intValue": 1, "stringValue": "bean"}]

String helloList(List helloList1, List helloList2)

["java.util.List","java.util.List"]

[[1], [1,2]]
[[1], [1,2]]
[[1], [1,2]]

String sayHello(String name)

["java.lang.String"]

["${__RandomString(5, abcd)}"]
["${__RandomString(5, efg)}"]
["${__RandomString(5, xyz)}"]

动态参数

PTS微服务压测内置了若干函数,可实现简单的随机参数。

平台每一次调用接口时,通过动态参数模板,先生成实际参数,然后再调用此参数。动态参数以标识符${__开头,并以标识符}结束。运行时,平台会将标识符及其中间所有的字符串,替换成动态生成的字符串。其余字符串保持不变。

  1. 生成随机数

    用户填写示例

    转换结果

    说明

    ${__Random(1,1000)}

    • 第一次:3454

    • 第二次:67

    • 第三次:53

    随机1~1000中的一个数字。

    ["Tom",463${__Random(5,10)}]

    • 第一次:["Tom",4635]

    • 第二次:["Tom",4637]

    • 第三次:["Tom",4638]

    随机5~10中的一个数字。动态参数之外的字符串,["Tom",和463]会保持原样。

  2. 生成不同格式的当前时间

    用户填写示例

    转换结果

    说明

    ${__time(,)}

    1450056496991

    获取1970年1月1日到当前的毫秒数。

    ${__time(yyyyMMdd,)}

    20151214

    当前时间格式化成年月日。

    ${__time(HHmmss,)}

    092816

    当前时间格式化成时分秒。

    ${__time(yyyyMMdd-HHmmss,)}

    20151214-092816

    当前时间格式化成年月日-时分秒。

    ["time":"${__time(HHmmss,)}.log"]

    ["time":"053816.log"]

    动态参数之外的字符串,["time","和.log"]会保持原样。

  3. 随机字符串

    用户填写示例

    转换结果

    说明

    ${__RandomString(5)}

    faAfg

    随机5个英文字母,包含大小写。

    ${__RandomString(5,abcd)}

    aabdc

    随机5个英文字母,随机范围是abcd四个英文字母。

    ["name":"${__RandomString(5)}"]

    ["name":"abddc"]

    动态参数之外的字符串,["name","和"]会保持原样。

  4. 随机指定字符串或者数字

    用户填写示例

    转换结果

    说明

    ${__RandomSpecifiedString(aaa;;;bbb;;;ccc)}

    bbb

    随机从aaa、bbb或ccc中取一个字符串。

    ${__RandomSpecifiedString(111;;;222;;;333)}

    333

    随机从111、222或333中取一个字符串。

    ["name":"${__RandomSpecifiedString(aaa;;;bbb;;;ccc)}"]

    ["name":"ccc"]

    动态参数之外的字符串,["name","和"]会保持原样。

  5. MVEL表达式

    用户填写示例

    转换结果

    说明

    ${__Expression(3+5)}

    8

    获取表达式3+5的值。

    ${__Expression(${__RandomSpecifiedString(100;;;200;;;300)}+5)}

    105

    表达式嵌套,随机取100、200或者300中的一个数字加上5,实际结果可能是105、205或者305中的一个。

    ["time":"${__Expression(3*5)}"]

    ["time":"15"]

    动态参数之外的字符串,["time","和"]会保持原样。

一个复杂参数填写示例:

  • 调用接口函数:String sayHello(String name)

  • 动态参数填写格式:["${__RandomString(4,abcdefg)}-${__RandomSpecifiedString(aaa;;;bbb;;;ccc)}-${__Expression(3+5)}]

  • 实际参数:["adag-ccc-8"]