You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Artillery负载测试脚本中生成随机数据并发起压测请求?

嘿,这个问题我太熟了!Artillery本身就自带不少生成随机内容的工具,要是内置的满足不了需求,还能自己写点小函数扩展。咱们一步步来搞定你的需求:

一、用Artillery内置变量快速实现

Artillery提供了开箱即用的内置变量,能轻松生成随机字符串和数字,完全能覆盖你的需求:

1. 生成随机字符串(对应order1字段)

用$randomString(length)就能指定长度生成随机字符串,它会自动包含字母和数字。比如你想要8位的随机串,直接写{{ $randomString(8) }}就行。

2. 生成指定范围的随机数(对应size字段)

$randomNumber(min, max)可以生成min到max之间的整数,你需要1到10000的范围,那就用{{ $randomNumber(1, 10000) }}。

修改后的完整脚本示例

把这两个变量放到你的message块里,完整的HTTP测试脚本大概是这样:

config:
  target: "https://你的服务器地址.com"
  phases:
    - duration: 60  # 测试持续60秒
      arrivalRate: 10  # 每秒发起10个请求
scenarios:
  - flow:
      - post:
          url: "/你的接口路径"
          json:
            message:
              order1: "{{ $randomString(8) }}"
              size: "{{ $randomNumber(1, 10000) }}"
二、自定义更灵活的随机内容(可选)

如果需要特定格式的随机字符串(比如只大写字母、包含特殊字符,或者固定前缀+随机后缀),可以用Artillery的自定义JS函数来实现:

示例:生成带固定前缀的订单ID

比如你想让order1是ORD-开头加8位随机数字,就可以在脚本里加一个自定义函数:

config:
  target: "https://你的服务器地址.com"
  phases:
    - duration: 60
      arrivalRate: 10
  functions:
    generateOrderId: () => {
      // 生成8位随机数字
      const randomNum = Math.floor(Math.random() * 100000000).toString().padStart(8, '0');
      return `ORD-${randomNum}`;
    }
scenarios:
  - flow:
      - post:
          url: "/你的接口路径"
          json:
            message:
              order1: "{{ generateOrderId() }}"
              size: "{{ $randomNumber(1, 10000) }}"
小提示
  • 确保你的Artillery版本在1.5以上,这些内置变量才会生效。如果版本太低,建议升级到最新版(用npm install -g artillery就行)。
  • 测试时可以先加个log步骤验证随机内容,比如在flow里加- log: "生成的order1: {{ $randomString(8) }}",这样能看到生成的内容是否符合预期。

内容的提问来源于stack exchange,提问作者Chintamani Manjare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:08:50