性能测试接口测试CLI【免费下载链接】artilleryThe complete load testing platform. Everything you need for production-grade load tests. Serverless distributed. Load test with Playwright. Load test HTTP APIs, GraphQL, WebSocket, and more. Use any Node.js module.项目地址https://gitcode.com/gh_mirrors/ar/artillery点击查看免费下载导读artillery-plugin-fake-data是 Artillery 官方提供的实验性EXPERIMENTAL内置插件它的核心价值是让压测工程师不必编写任何自定义处理器processor代码直接在 YAML 测试脚本中调用 Faker 的随机数据生成函数从而轻松构造邮箱、姓名、UUID、密码、地址等多样化测试数据。本指南将围绕插件在 packages/artillery-plugin-fake-data/README.md 中说明的能力结合插件源码与测试用例完整讲解插件的安装启用方式、扁平化函数命名规则、函数选项配置方法、在beforeRequest/afterResponse钩子中的使用以及从旧版 falso 命名迁移的注意事项。读完本文你将能够在 Artillery 的 YAML 场景中直接注入随机数据并为字段配置 Faker 级的数据约束。一、插件定位把 Faker 数据生成能力搬进 YAML在负载测试脚本中请求体、查询参数、路径变量经常需要每次请求各不相同的数据。传统做法是在processor.js中手写生成逻辑再通过自定义函数引用。而 fake-data 插件把 Faker 的完整数据生成函数库直接映射为 Artillery 模板函数$开头的函数使你可以在 YAML 的 URL、请求头、请求体模板中直接使用$internetEmail()、$personFullName()等函数在beforeRequest/afterResponse等处理器钩子中复用同样的函数通过插件配置为每个函数传入 Faker 风格的选项对象如密码长度、数字范围控制生成结果的形态。从 packages/artillery/lib/builtin-packages.ts 可以看到artillery-plugin-fake-data与artillery-plugin-ensure、artillery-plugin-expect等一起被列为 Artillery 的内置包BUILTIN_PACKAGE_NAMES在 packages/artillery/lib/create-bom/built-in-plugins.ts 中也作为 BOM构建清单内置插件登记并在 packages/artillery/lib/cmds/run.ts 的官方插件识别列表中出现。也就是说使用官方发布的 Artillery 时该插件随包内置、开箱即用。二、启用插件与最小可用示例启用方式与其他 Artillery 插件一致在测试脚本的config.plugins中声明插件名无需额外配置即可获得全部能力。一个最小的 YAML 示例如下config: target: https://example.com plugins: fake-data: {} phases: - duration: 60 arrivalRate: 5 scenarios: - name: signup flow: - post: url: /users json: email: $internetEmail() name: $personFullName() password: $internetPassword()从插件源码 packages/artillery-plugin-fake-data/index.ts 可以看出插件配置同时支持两种读取位置script.config[fake-data]与script.config.plugins[fake-data]二者等价。对应测试 test/index.spec.js 验证了从config.fake-data读取配置时选项同样生效。插件在加载时会把一个名为fakeDataHandler的处理器注入到每个场景的beforeScenario钩子中index.ts并把该处理器挂到script.config.processor上index.ts处理器运行时遍历全部 Faker 函数将$函数名绑定进context.funcsindex.ts从而让 Artillery 模板引擎在请求构建阶段能够解析这些函数。测试 test/index.spec.js 断言了beforeScenario钩子的注入与处理器函数的挂载。三、扁平化命名规则从faker.internet.email()到$internetEmail()Faker 的函数按模块组织如faker.internet.email、faker.person.fullName。插件将函数名做**扁平化flatten**处理去掉模块分隔符并保留模块名前缀再统一以$前缀暴露faker.internet.email()→$internetEmail()faker.person.fullName()→$personFullName()faker.internet.password()→$internetPassword()命名规则在 index.ts 中实现${moduleName}${functionName[0].toUpperCase()}${functionName.slice(1)}即「模块名 首字母大写的函数名」。构建函数映射的buildFakerFunctionMapindex.ts有以下关键行为跳过辅助模块helpers、definitions、rawDefinitions这类不直接生成数据的模块不会暴露index.ts以下划线开头的私有成员同样被过滤沿原型链收集部分 Faker 模块的方法从父类继承例如dateBirthdate来自SimpleDateModule插件会沿原型链遍历以完整收集index.ts只支持单参数函数由于配置以单个对象参数传入函数签名参数个数大于 1 的函数会被跳过index.ts。测试 test/index.spec.js 断言暴露的函数数量超过 200 个且包含internetEmail、internetPassword、personFullName、stringUuid、numberInt、datatypeBoolean、locationCity、companyName、loremSentence、dateBirthdate、datePast等覆盖各模块的代表性函数。插件包依赖固定为faker-js/faker10.5.0见 package.json因此实际可用的函数集合以该版本为准。四、为函数配置 Faker 选项控制随机数据的形态插件配置对象中的每个键对应一个扁平化函数名值为 Faker 函数自身的选项对象。这样你可以对随机数据的范围、长度、格式做精细约束而不是拿到完全不可控的随机值。config: plugins: fake-data: internetPassword: length: 5 numberInt: min: 10 max: 10 personFullName: firstName: Ada lastName: Lovelace运行时插件若在配置中找到了对应函数的选项就把选项对象作为参数传给 Faker 函数index.tscontext.funcs[$${funcName}] () { if (pluginConfig[funcName]) { return fakerFunc(pluginConfig[funcName]); } return fakerFunc(); };对应测试 test/index.spec.js 验证了internetPassword: { length: 5 }生成的密码长度为 5、numberInt: { min: 10, max: 10 }恒等于 10。每个函数接受什么选项请查阅 Faker API 文档 中对应函数的定义——选项形状与 Faker 原生一致。此外配置校验由 packages/types/schema/plugins/fake-data.js 中的FakeDataPluginJoi 模式完成它会依据getFakerFunctions()与getDeprecatedAliases()index.ts动态构建每个函数与别名对应的Joi.object()校验项并对未知键报错.unknown(false)防止配置拼写错误被静默忽略。类型层面fake-data的配置类型FakeDataPluginConfig在 packages/artillery/types.d.ts 中被定义为函数名到选项的映射Recordstring, unknown并注册进PluginsConfigpackages/artillery/types.d.ts。五、在 beforeRequest / afterResponse 处理器中使用插件注入的$函数不仅限于 YAML 模板同样可以在beforeRequest、afterResponse等处理器钩子processor中调用。由于插件把全部函数挂在context.funcs上而处理器运行时上下文共享这一对象你可以在处理器中这样使用// processor.js module.exports { beforeRequest(requestParams, context, ee, next) { // 为每个请求生成不同的随机邮箱与用户名 requestParams.body { email: context.funcs.$internetEmail(), username: context.funcs.$internetUsername() }; next(); } };YAML 侧在场景中声明处理器与钩子config: processor: ./processor.js plugins: fake-data: {} scenarios: - name: dynamic-body beforeRequest: beforeRequest flow: - post: url: /login需要注意的是$函数本身是无参数调用如需带选项的生成结果请通过插件配置见上文第四节声明处理器中直接调用即可得到符合约束的值。六、从 falso 迁移旧别名、新选项形状与一次性警告早期版本的插件使用 falso 库命名风格为$rand*如$randEmail、$randFullName。当前版本做了如下迁移处理别名保留但已废弃最常用的 falso 风格名称如$randEmail、$randFullName、$randPassword仍可作为废弃别名deprecated aliases工作但将在未来版本中移除。废弃别名的完整映射定义在 index.ts例如randEmail → internetEmail、randPassword → internetPassword、randUuid → stringUuid、randPhoneNumber → phoneNumber、randCity → locationCity、randZipCode → locationZipCode、randNumber → numberInt、randBoolean → datatypeBoolean、randWord → loremWord、randProductName → commerceProductName等约 30 个。调用别名会触发一次性警告首次使用某个别名时插件会通过console.warn输出一条提示建议改用对应 Faker 函数名index.ts。测试 test/index.spec.js 验证了每个别名恰好警告一次重复调用不再警告。配置选项形状改为 Faker 风格函数配置选项现在使用 Faker 的选项形状例如internetPassword: { length: 5 }取代了旧的randPassword: { size: 5 }。并且选项必须写在Faker 函数名如internetPassword下而不是写在别名如randPassword下——DEPRECATED_ALIASES中明确注释“配置选项不会被翻译必须以 Faker 选项形状、写在 Faker 函数名下”index.ts。迁移建议将脚本中所有$rand*别名替换为对应的$ Faker 扁平名并把选项从 falso 形状改写为 Faker 形状。完整的逐项迁移对照表见官方插件文档。七、运行测试与验证插件自带基于node:test的单元测试覆盖了函数暴露、钩子注入、选项传递、别名警告与配置读取位置等核心行为。在 packages/artillery-plugin-fake-data 目录下执行npm test对应package.json中test脚本node --test --test-timeout120000 test/*.spec.js见 package.json。这些测试同时也是一份很好的行为契约文档test/index.spec.js断言暴露函数数量 200 且关键函数存在test/index.spec.js断言$internetEmail()生成合法邮箱、$stringUuid()生成合法 UUIDtest/index.spec.js断言配置选项生效test/index.spec.js断言别名废弃警告逻辑。在真实压测中使用时可以在任意 Artillery 测试脚本artillery run script.yml中启用本插件。由于插件处于EXPERIMENTAL阶段且持续活跃开发中若发现异常或想提出变更可在 Artillery 仓库提交 issue 或发起讨论。八、常见问题速查$函数在 YAML 中不生效确认config.plugins中已声明fake-data且插件配置项键名与扁平化函数名完全一致如internetPassword不要写成 Faker 的模块路径如internet.password。想让密码固定长度在插件配置中写internetPassword: { length: 5 }选项形状与 Faker API 一致。旧脚本还在用$randEmail可用但会打印一次性废弃警告请尽快迁移到$internetEmail()并将randPassword: { size: 5 }改写为internetPassword: { length: 5 }。未知的函数名或选项会被忽略吗不会。配置会经过 packages/types/schema/plugins/fake-data.js 的 Joi 校验未知键会被拒绝帮助你在运行前发现拼写错误。能在处理器钩子里用这些函数吗可以。全部$函数均挂在context.funcs上beforeRequest/afterResponse等钩子中可直接调用无需额外 import Faker。九、许可证与资源本插件采用 MPL 2.0 许可证见 LICENSE.txt。更多信息、迁移对照表与完整参考见官方插件文档发现问题请在 Artillery 仓库提交 issue特性建议可通过 Discussions 讨论。需要自研脚本时也可以直接阅读插件源码 index.ts 与测试 test/index.spec.js 作为实现参考。赞分享性能测试接口测试CLI【免费下载链接】artilleryThe complete load testing platform. Everything you need for production-grade load tests. Serverless distributed. Load test with Playwright. Load test HTTP APIs, GraphQL, WebSocket, and more. Use any Node.js module.项目地址https://gitcode.com/gh_mirrors/ar/artillery点击查看免费下载相关推荐Caddy服务器ECH功能架构深度解析加密客户端问候实现机制与隐私保护方案设计Caddy服务器ECH功能架构深度解析加密客户端问候实现机制与隐私保护方案设计 在当今网络监控日益严密的数字环境中TLS握手过程中的SNI明文泄露已成为We后端API网关网络使用 Artillery expect 插件在单一测试脚本中同时执行负载测试与功能测试使用 Artillery expect 插件在单一测试脚本中同时执行负载测试与功能测试 本文基于 Artillery 官方示例 functional testi性能测试接口测试CLIVUnit测试用例设计指南从简单断言到复杂场景验证VUnit测试用例设计指南从简单断言到复杂场景验证 VUnit是一个功能强大的VHDL/SystemVerilog单元测试框架它提供了完整的测试用例设计与执上一篇终极Enigma Virtual Box解包指南evbunpack工具完全掌握下一篇AutoRaise彻底改变macOS窗口管理的鼠标悬停自动聚焦神器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
