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

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

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

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

如下所示:

方法 参数类型填写方式 文件参数格式
String sayHello(String name) ["java.lang.String"] 示例1
String helloBean(HelloBean helloBean) ["com.alibaba.pts.dubbo.api.DemoService"] 示例2
String helloList(List helloList1, List helloList2) ["java.util.List","java.util.List"] 示例3
String sayHello(String name) ["java.lang.String"] 示例4

动态参数

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"]