前言:
公司规定,本文只介绍集成服务,插件开发经验,不直接分享代码
其他示例插件代码 github 地址:https://github.com/metersphere/metersphere-platform-plugin
开发插件需要一定的开发基础
MeterSphere 持续测试平台 是一款非常好用且易用的持续测试平台软件,公司用它提升公司的软件质量,编写了非常多的用例,围绕着公司项目创建了多种测试功能后,发现了一个非常好用的功能 “服务集成 “,但是由于我们公司使用的是 “飞书项目 “,而 MeterSphere 持续测试平台 现阶段只支持 “禅道 “、“TAPD“、“Azure DevOps“、“Jira“,没有办法直接集成 “飞书项目 “,但是 MeterSphere2.4.0 版本以后支持自己开发服务插件,而且 2.6.0 后这个功能支持的比较好,所以打算开发一套。
先从 MeterSphere 持续测试平台 页面服务集成功能讲起。
一、集成信息
如上图所示在在集成服务,集成信息中,分为三个部分:
1 飞书图片
2 身份对接数据
3 提示
所对应代码位置
首先找到 frontend.json 文件位置,找到 serviceIntegration 属性,
serviceIntegration 属性详解
1 label 是描述插件种类,飞书名为 Lark,
2 image 是图 1 中的插件图片,把图片保存到 static 下,图片格式为 png 格式,推荐像素为 300px * 120px
3 tips 是图 1 下方的使用指引
4 formItems 是身份对接数据
formItems 属性详解
1 name 是后面插件调用时,属性的名称,如定义了一个 name 是 pluginId ,那么在使用这个插件时,就会传给插件一个类中带有 pluginId 的参数
2 type 是 ui 类别,一般为 input 也就是普通的输入框
3 defaultValue 是默认值
4 required 是是否为必填参数
5 i18n 是标注是否使用国际化,这里一般填 false ,后期可能会做插件单独的国际化支持,支持后再详细说明
6 label 前端显示的条目名称
7 message 是提示信息
8 instructionsIcon 提示图片,一般为第三方平台的对接信息位置截图
1 项目信息集成,用于项目维度的对接,这里我们用的是需求维度,我们的一个项目,在飞书项目中,就是一个需求,根据需要,一个项目,也可以是一个飞书空间。
所对应代码位置
projectConfig 属性下的 formItems,withProjectCheck 是是否开启校验,其他属性描述如上文 serviceIntegration 一致,不再赘述。
个人信息中的,第三方平台账号,所在维度是 meterspere 个人用户,比如我在 metersphere 中用户是张三,在飞书项目中,我用的是 zs ,那么我需要这个第三方平台账号,在操作缺陷时,让飞书项目知道是 zs 操作的。
所对应代码位置
accountConfig 属性使用与上文一致不再赘述。
二、接口实现
插件依赖 metersphere-plugin-sdk,metersphere-platform-plugin-sdk ,提前使用 maven ,install 好
MeterSphere 像传统插件调用一样,通过反射去调用插件中抽象出来的方法,定义一个功能类去实现 AbstractPlatform 类。
定义一个构造方法,接收一个 PlatformRequest 类型参数,PlatformRequest 类里面的属性,包含了上图中 formItems 类里面我们之前设置好的自定义对接信息,我们可以通过这个请求参数,把我们需要调用集成平台的信息保存到这个类中,作为使用这个类里面的方法参数。
validateUserConfig 方法接收一个 String 类型参数,主要作用是图 6 点击测试连接时,验证上面填写信息是否正确,如果不正确可以如图 7 一样,抛 MSPluginException 异常。
validateProjectConfig 方法接收一个 String 参数,点击校验时会传上文中项目对接信息的内容,如果不成功抛 MSPluginException 异常。
syncIssues 方法接收 SyncIssuesRequest 类型参数,SyncIssuesRequest 会带所有平台已有的缺陷,连接集成服务的信息等自定义信息,返回 SyncIssuesResult 类
SyncIssuesResult 类包含 updateIssues,addIssues,attachmentMap,deleteIssuesIds 四个属性,updateIssues 放需要更新的缺陷,addIssues 放需要添加的缺陷,attachmentMap 放集成服务附件信息,deleteIssuesIds 放需要删除的缺陷
getThirdPartCustomField 方法接收一个 String 类型的集成信息参数,返回 PlatformCustomFieldItemDTO 类型列表,getThirdPartCustomField 方法是获取平台缺陷模版,或者是一个属性是 boolean 类型还是 String 类型,默认值是什么是否必填等信息
该方法在添加缺陷,修改缺陷,获取缺陷列表都会调用,尽可能的使其性能良好。
PlatformCustomFieldItemDTO 详解
value 属性值,模版样式信息
key,属性名称
customData 属性与集成平台唯一对接标识
required 是否为必填
defaultValue 默认属性值
syncIssuesAttachment 是根据之前同步的附件信息,去集成服务平台获取附件
syncAllIssues 是企业版本方法,如果是使用开源版本这个方法不会调用
addIssue 方法给集成服务添加一个缺陷
该方法接收 PlatformIssuesUpdateRequest 类型,里面为所要添加的缺陷信息,需要转化为集成服务可识别的数据结构,和数据信息,信息里面含有个人设置的第三方平台账号信息,可以识别是哪个用户使用了添加缺陷功能。
该方法返回 IssuesWithBLOBs 类型数据,IssuesWithBLOBs 里面的部分属性直接插入 ms 数据库,也是缺陷在 metersphere 里面的数据信息,注意设置好 platformId 属性,后面修改删除作为标识使用。
getDemands 方法获取平台所有需求信息,getDemands 方法接收 String 类型的集成服务信息,返回 DemandDTO 类型列表
DemandDTO 类型详解
id 是需求唯一标识可直接使用集成服务的 id,也可以用 uuid
name 是需求名称,前端可见
platform 是平台名称,飞书这里设置的是,Lark
updateIssue 方法修改平台缺陷信息,updateIssue 接收一个 PlatformIssuesUpdateRequest 类型参数,返回一个 IssuesWithBLOBs 类型,属性基本与 addIssue 方法一致,这里不再赘述
deleteIssue 方法删除一个平台缺陷,接收一个 String 类型的缺陷 id,该 id 是 addIssue 方法中 IssuesWithBLOBs 的 platformId
到这里飞书对接,插件必要的开发已经讲完,还有一些没有提到的方法是因为飞书没有用到,且不是很重要,且很简单的方法,欢迎大家一起讨论,有问题可以评论或者私信我,让我们一起用好 MeterSphere 持续测试平台 。