接口自动化插件开发

1 概述

v3 插件进行全面升级改造,包括对基础JMeter组件的最低版本兼容性、平台 SDK 的升级以及 UI 渲染的全面改进。

2 开发流程

2.1 JMeter 插件准备

要求插件能够兼容 JMeter 5.6.3 及以上版本,并确保插件在安全性和合规性方面达到标准,同时保持性能的稳定性。插件下载及开发标准

2.2 基础环境准备

  • 最低要求 JDK 21 及以上版本。
  • 添加 SDK 依赖到 pom.xml

在项目的 pom.xml 文件中添加 SDK(dependencies)的依赖项。SDK源码

  1. <dependency>
  2. <groupId>io.metersphere</groupId>
  3. <artifactId>metersphere-plugin-api-sdk</artifactId>
  4. <version>3.x</version>
  5. <scope>provided</scope>
  6. </dependency>
  7. <!-- 打包时将这些参数写入 MANIFEST.MF 供 ‘pf4j’ 识别,关键属性设置 -->
  8. <properties>
  9. <plugin.id>sampler-name </plugin.id> // 自身组件名称
  10. <plugin.class>io.metersphere.plugin.xxx</plugin.class> // AbstractApiPlugin 子类名称
  11. </properties>

2.3 插件代码编写

继承抽象类 AbstractProtocolPlugin,重写相关方法。

!重写

编写数据转换类,继承基类 AbstractMsProtocolTestElement ,添加注解 “@PluginSubType” 并添加自身相关属性,添加用于 pf4j 识别的注解 “@Extension”。

!重写

编写核心解析器,添加用于 pf4j 识别的注解 “@Extension” 继承基础解析器 AbstractJmeterElementConverter,并重写 toHashTree() 方法。

!重写

注意:

一定要设置

  • ElementProperty.MS_RESOURCE_ID // 资源id
  • ElementProperty.MS_STEP_ID // 步骤唯一标识id
  • ElementProperty.MS_REPORT_ID // 报告id
  • ElementProperty.PROJECT_ID // 项目id

支持通过在线编辑器 在线编辑器 进行UI界面设计,具体属性标准1具体属性标准2

!重写

API 脚本 Props

在完成页面绘制后,将脚本内容复制到 resources/script 目录下,并创建一个 JSON 文件。在该文件中,按照示例中的脚本格式写入脚本内容。脚本示例

!重写

参数名描述类型可选值
id脚本资源唯一标识符,api | environment 分别代表接口各类协议脚本和环境扩展脚本字符常量api |environment
script整体页面脚本,可以参考 FormCreate生成方式对象数组
name插件协议名称(这个名称会在协议下拉列表出现)字符常量
apiDebugFields接口调试页面需要渲染的属性名称集字符数组
apiDefinitionFields接口定义页面需要渲染的属性名称集字符数组
options定义表单渲染样式文档参照对象
scriptType使用什么插件来做动态页面渲染,分别是三方组件FormCreate 和 内建渲染字符常量FormCreate | Embedded

环境脚本 Props,可参考 脚本示例

!重写

参数名描述类型可选值
id脚本资源唯一标识符,api | environment 分别代表接口各类协议脚本和环境扩展脚本字符常量environment | environment
name插件脚本名称字符常量
scriptType使用什么插件来做动态页面渲染,分别是三方组件FormCreate 和 内建渲染字符常量FormCreate | Embedded
options定义表单渲染样式文档参照对象
fields环境页面需要渲染的属性名称集字符数组
tabName环境页面Tab反显的名称字符
script整体页面脚本FormCreate的生成方式对象数组

2.4 打包

注意

SDK JAR 文件已经作为主应用的依赖项存在,因此在打包过程中无需再将其包含在当前包中,以避免导致 JAR 文件过大。

以下提到的内置 JAR 包同样适用相同的逻辑。如果已经在当前项目中使用,那在打包阶段无需再次将其包含在当前项目中。这样可以避免导致项目打包文件过大。

!重写

上传插件到平台使用。

!重写