Background:java
作API自动化的时候,每每须要针对每一个API编写不少方法,这个时候为了使代码有更高的可读性,维护性和扩展性,咱们须要把这不少方法编写成外部的Groovy Script,而后向引用java class同样的方式在TestStep中引用,这个时候就须要用到SoapUI的Script Library功能。测试
1.在SoapUI的File->Preferences->Ready!API 能够设置SoapUI的默认脚本路径和自定义脚本路径:ui
2.SoapUI default script libraryspa
My path is : C:\Program Files\SmartBear\ReadyAPI-1.6.0\bin\scripts.net
其中“C:\Program Files\SmartBear\ReadyAPI-1.6.0”是SoapUI的安装目录,由于我本地用的是SoapUI Professional Version, 因此名字是ReadyAPI。blog
如上图所示,我有两个文件夹,一个是用于产品自动化测试的代码,一个是用于我本身测试的代码,在Groovy Script中调用的时候用package语句区别,即:若是想调用direct文件里面存放的某些groovy脚本,就在“Groovy Script” type的test step第一句加入:package direct。ip
具体调用以下:部署
3.Custom script library产品
在第一步中,我将该目录设置成custom script library,如今我在该目录下新建了一个Callee.groovy:自动化
调用方法以下:
4.SoapUI在script library里查询调用的groovy文件的前后顺序:
由于在Setting中增长了两个Script library,若是这两个library中有一样名称的groovy文件,系统会优先调用哪个目录下的文件呢?
为了得出结果,我在custom script library中增长了一个文件:Callee2.groovy:
在default script library中一样有这个名字的一个groovy文件哦,如今我这样调用groovy文件:
根据输出结果能够看出:
a.系统将优先从custom script library中查询调用的类Callee2,若是找不到,才会去default script library中查找该类。
b.若是要调用default script library中的类,须要加入package语句。
(正如在Java Build Path folder下新建了一个package "com.vicky.test", 而后在这个package中添加了一个Test.groovy,那么打开这个groovy文件,文件头部自动回加入 “package com.vicky.test“ 同样的道理)
以上是更改本地整个SoapUI tool的script library,但有时候咱们并不须要修改该路径,只是想给这个Project一个特殊的脚本库,该脚本只适用于这一个单独的Project。
例如:咱们将一个Project部署到Jenkins上面,而后Server上的Script Library并不须要修改,咱们只须要将这个特殊的脚本库放到该Project代码中便可,这时候须要用到Project level的”Project Properties“-》"Script Library".
将Script Library的值设为该Project的当前工做目录”${projectDir}",而后在Groovy script中加入package语句便可。
若这些脚本库放在工做目录的"ScriptLibrary"文件夹,那么在调用该文件夹下面的groovy scripts的时候,只须要加入:
package ScriptLibrary
若调用了该ScriptLibrary中的groovy文件后,报错"Reference to one class is ambiguous", 请参考另外一篇文章:https://my.oschina.net/u/942203/blog/916833
如果这些Groovy Script须要引用java的一些jar包,须要把这些jar包先在网上下载下来,而后放到“SoapUI安装目录\lib”或者“SoapUI安装目录\bin\ext”文件夹下面。