如何在Citrus XML测试中从Bean属性值创建测试变量
解决Citrus XML测试中变量无法解析Spring EL表达式的问题
这其实是Citrus组件对表达式解析逻辑的差异导致的,别着急,我给你梳理清楚解决方案:
问题根源
Citrus的<variable>标签默认会把value属性的内容当作字面字符串处理,不会自动解析Spring EL表达式(#{...});但像<echo>这类组件的message属性,框架默认开启了EL解析器,所以同样的表达式能正常获取Bean属性值。
两种可行的解决办法
方案1:使用spel属性指定EL表达式
Citrus为<variable>专门提供了spel属性,用来接收Spring EL表达式,它会自动解析并赋值给变量:
<variable name="zzzz" spel="#{beanID.property}"/>
方案2:用<value>子标签包裹EL表达式
如果你更偏好子标签的写法,也可以把表达式放在<value>子标签内,Citrus会解析这个标签里的内容:
<variable name="zzzz"> <value>#{beanID.property}</value> </variable>
补充说明
你提到${...}格式的变量能正常工作,是因为${...}是Citrus自身的变量替换机制,框架默认会处理这类表达式;而#{...}属于Spring EL表达式,需要明确告诉Citrus要对它进行解析,上面的两种方法就是在做这件事。
调整配置后,变量zzzz就能正确获取到Bean属性的值,而不是被设置成字符串字面量了。
内容的提问来源于stack exchange,提问作者nixonit
相关产品推荐
相关产品推荐

