1. Property Expansion in soapUI

SoapUI provides a common syntax to dynamically insert ("expand") property values during processing. The syntax is as follows:

${[scope]propertyName[#xpath-expression]}

where scope can be one of the following literal values:

  • #Project# - references a Project property(Reference properties across a particular SoapUI project)
  • #TestSuite# - references a TestSuite property in the containing TestSuite
  • #TestCase# - references a TestCase property in the containing TestCase
  • #MockService# - references a MockService property in the containing MockService
  • #Global# - references a global property. Found in File>Preferences>Global Properties tab. Reference properties across all projects
  • #System# - references a system property. Found in Help>System properties.
  • #Env# - references an environment variable
  • [TestStep name]# - references a TestStep property

Many of the scopes will of course only work if they are available, i.e. you can not use the #MockService# scope within a TestCase script since there is no containing MockService to access.

If no scope is specified, the property is resolved as follows:

  1. Check the current context (for example the TestRunContext) for a property with the matching name
  2. Check for a matching global property
  3. Check for a matching system property

If the property expansion further includes an XPath expression, this will be used to select the corresponding value from the referenced property value (which must contain XML), for example the following example could "extract" the author value from a preceding response with:

${Search Request#Response#//ns1:Item[1]/n1:Author[1]/text()}

Which would first get the "Response" property of the "Search Request" step and then select the value of the first Items' first Author element. Note that the namespace prefix must match those used in the response message, otherwise the expansion will fail.

As you can see, there is no way to access properties "outside" scope, i.e. you can not access a property in another TestCase from within a TestStep. This is a deliberate restriction aiming to reduce dependencies between items. If you need to transfer values between (for example) two TestCases you should use the containing common TestSuite or Project as an intermediary; the first TestCase transfers to the common parent using a Property-Transfer or Groovy script, the second reads from the same parent. In this way, there is no direct dependency between the two TestCases and the value supplied by the first TestCase can be supplied by any other source (TestCase, Script, etc...) or statically.

Property Transfers are a more tedious way of accomplishing the same functionality as with property-expansion. On the other hand, property transfers provide the possibility to transfer complex content between request, response messages. Also, the result of a Property Transfer is visible directly in the corresponding request, response editors.

Property-Expansion is supported wherever a value is to be specified, if you find a place where it doesn't seem to work like you want please let us know!

2. Dynamic Properties

SoapUI 2.5 introduced the possibility to write groovy scripts directly inside a PropertyExpansion; prefix the content with a '=' and the remaining content up to the closing brace will be evaluated as a script and its result will be inserted. For example

${=(int)(Math.random()*1000)}

will be replaced with a random number between 0 and 999 every time it is evaluated.

Of course this applies to all places where property-expansions can be used; requests, property values, file names, endpoints, etc.. etc..

Depending on the context of the expansion, relevant variables will be available for accessing the soapUI object model. For example in a request message or parameter, the containing Request object will be available through the "request" variable, allowing you to (for example) insert its name in your request

...
${=request.name}
...

or if you want the name of the project just navigate up the soapUI ModelItem tree:

...
${=request.operation.interface.project.name}
...

If you want to provide a current formatted timestamp:

...
${=import java.text.SimpleDateFormat ; new SimpleDateFormat("YYYY-MM-DDT00:00:00").format(new Date())}
...

The following variables are (almost) always available in these scripts:

  • log : a log4j Logger logging to the groovy log window
  • modelItem : the current modelItem (for example a Request, MockResponse, etc..).
  • context : the current run-context (for example when running a TestCase or MockService)

For soapUI Pro users, the global script library is available just as in any other script, allowing you to call into objects/methods defined there for reuse. One current limitation is that although scripts can be multiple lines, they can not contain nested braces (yet).. as always there is room for improvement!

3. Nested Properties

SoapUI supports both nested and recursive property-expansion (be careful!), for example:

test = "value"
testexp = "${test}" -> "${testexp}" evaluates to "value" testexp = "value"
exp = "${exp}" -> "${test${exp}}" evaluates to "value" testxml = "hello"
testxpath = "//value[@id=${id}]/text()"
id = "123" -> "${#testxml#${testxpath}}" evaluates to "hello"

  

[SoapUI] Property Expansion in soapUI的更多相关文章

  1. SoapUI Property

    1. Test Suite(Case) Property 选择Test Suite(Case),switch to Custom properties 在request中的引用方式: ${[scope ...

  2. [SoapUI] 通过Groovy获取SoapUI当前Project所在的目录

    import com.eviware.soapui.support.GroovyUtils def groovyUtils = new GroovyUtils( context ) def proje ...

  3. [SoapUI] SOAP UI-Groovy Useful Commands

    Hi All, I have posted the SOAPUI and Groovy useful commands that may help you in your testing. Below ...

  4. SoapUI Properties的使用

    Link:http://testautomationnoob.blogspot.com/2012/10/soapui-properties-and-property-related.html soap ...

  5. soapUI学习文档(转载)

    soapUI 学习文档不是前言的前言记得一个搞开发的同事突然跑来叫能不能做个WebService 性能测试,当时我就凌乱了,不淡定啊,因为我是做测试的,以前连WebService 是什么不知道,毕竟咱 ...

  6. SoapUI调用webservice实现的两种方式

    SoapUI用来做测试,已经是很多人做过的事情了,而且网上教程也很多.不过还是写下来,对比webservice协议与http协议脚本编写的不同. 首先测接口得有一个服务,刚好笔者所在项目做ESB集成. ...

  7. IGS_学习笔记08_IREP通过soapUI测试客户化Web Service调用(案例)

    20150819 Created By BaoXinjian

  8. soapUI通过groovy脚本设置超时时间

    import com.eviware.soapui.SoapUI import com.eviware.soapui.settings.HttpSettings import com.eviware. ...

  9. 根据wsdl文件用soapUi快速创建webService服务(有图有真相)

    最近公司业务上使用webservice 频繁.由于之前都是自己搭建webservice 自己定义提供给别人服务,现在则相反需求都是根据人家提供的wsdl 文件来生成 我们平台需要提供的接口.刚开始不知 ...

随机推荐

  1. 前端三大框架之一React入门教程

    相信大家对框架这个词都很熟悉吧,我一直喜欢js原生来开发,但是目前都要求工作效率,所有使用框架或者是库会使我们开发更加方便和快速,甚至一个人干十个人的活.. 框架优点: 1.方便开发.快速写功能 2. ...

  2. 动态代理 JDK动态代理 CGLIB代理

    代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法.实际执行的是被代理类的方法. 而AOP,是通过动态代理实现的. 一.简单来说: JD ...

  3. Linux 学习总结(三)

    一. yum 命令 .列出所有可更新的软件清单命令:yum check-update .更新所有软件命令:yum update .仅安装指定的软件命令:yum install <package_ ...

  4. The number of method references in a .dex file cannot exceed 64K.(转)

    前言 我一直都知道app里面的方法数是有限制的差不多64000,具体的就未曾考证了在遇到这个问题之前,一直以为这个一个多么遥远的距离其实并不是的,稍有不慎这个异常出来了当前并不是你真的有编写了64k的 ...

  5. serv-U使用

    该软件是设置ftp服务器的 可以百度查询ftp服务器安装攻略,如 https://jingyan.baidu.com/article/cb5d6105c00bba005c2fe0ca.html 问题: ...

  6. 激活 pycharm

    step1: 在本地 hosts 文件增加一行,windows 路径一般为:C:\Windows\System32\drivers\etc step2: 输入激活码 7SPIY8PDT7-eyJsaW ...

  7. UVM1

    1.UVM: p_sequencer 的使用 http://blog.csdn.net/tingtang13/article/details/46546395

  8. Python+Selenium学习--操作测试对象

    场景 前面已经讲解了如果定位对象,定位之后需要对这个对象进行操作.是鼠标点击还是键盘输入,取决于我们定位的对象缩支持的操作. webdriver中比较常用的操作元素的方法有下面几个: clear    ...

  9. 今天清理C盘空间,发现Unity的一个问题

    C:\Users\Acer\AppData\LocalLow\Unity\Caches\GiCache AppData目录下,Unity占用了大量C盘空间,大概有5,6个G

  10. SAP中的slashX

    SlashX /n This terminates the transaction. 关闭当前事务. /nxxxx This terminates the current transaction, a ...