Jira Cloud Xray文档生成器:如何检测测试计划修复版本与关联缺陷影响版本的交集非空
Jira Cloud Xray文档生成器:如何检测测试计划修复版本与关联缺陷影响版本的交集非空
我太懂你这种头疼的情况了——之前用字符串contains判断版本匹配,单值的时候还能凑合用,一旦测试计划或缺陷的版本字段是多值,直接就失效了。毕竟我们要的是两个版本集合有没有重叠,不是单字符串里有没有包含另一个子串对吧?
好在Xray文档生成器的模板语法(基于Velocity)完全支持集合操作,给你两种靠谱的实现方案,按需选就行:
方案一:用Xray内置的集合方法(简洁首选)
Xray对多值字段(比如FixVersions、AffectedVersions)会自动封装成集合对象,这类对象自带了containsAny()方法——这个方法专门用来检查两个集合是否存在至少一个共同元素,完美命中我们的需求。
把你原来的模板代码修改成这样就行:
#{for testExecutions} #{for l=TestExecutions[n].LinksCount|filter=%{'${TestExecutions[n].Links[l].IssueTypeName}'.equals('Bug') && ${FixVersions}.containsAny(${TestExecutions[n].Links[l].AffectedVersions})} <!-- 这里写你要输出的缺陷内容,比如缺陷ID、标题、影响版本等 --> 缺陷ID: ${TestExecutions[n].Links[l].Key} 缺陷标题: ${TestExecutions[n].Links[l].Summary} #{end} #{end}
为什么这个好用?
- 代码简洁,不需要自己写嵌套循环
- 底层是集合级别的匹配,不会像字符串
contains那样出现误判(比如不会把v1.0和v1.0.1当成匹配) - 渲染效率高,Xray内部会优化集合操作的性能
方案二:手动嵌套循环(兼容性拉满)
如果你的Xray版本比较旧,或者担心内置方法有兼容性问题,也可以用手动遍历的方式,自己检查两个版本集合的交集:
#{for testExecutions} #{for l=TestExecutions[n].LinksCount|filter=%{'${TestExecutions[n].Links[l].IssueTypeName}'.equals('Bug')} #{set hasIntersection = false} <!-- 遍历测试计划的所有修复版本 --> #{for fixVersion in FixVersions} <!-- 遍历当前缺陷的所有影响版本 --> #{for affectedVersion in TestExecutions[n].Links[l].AffectedVersions} #{if fixVersion == affectedVersion} #{set hasIntersection = true} #{break} <!-- 找到匹配就跳出内层循环,不用继续遍历 --> #{/if} #{/for} #{if hasIntersection} #{break} <!-- 已经找到交集,直接跳出外层循环 --> #{/if} #{/for} <!-- 只有当交集存在时,才输出缺陷内容 --> #{if hasIntersection} 缺陷ID: ${TestExecutions[n].Links[l].Key} 缺陷标题: ${TestExecutions[n].Links[l].Summary} #{/if} #{end} #{end}
注意事项
- 绝对不要把多值版本字段转成字符串来判断!比如
'${FixVersions}'.contains(...)这种写法,会把集合转成类似[v1.0, v2.0]的字符串,很容易出现误判 - 用
#{break}指令可以提前终止不必要的循环,避免模板渲染变慢,尤其是当版本数量比较多的时候 - 确保变量引用的正确性:
FixVersions是当前测试计划的多值字段,TestExecutions[n].Links[l].AffectedVersions是关联缺陷的多值字段,Xray会自动处理它们的集合类型
内容来源于stack exchange
相关产品推荐
相关产品推荐

