使用 Groovy 实现自动化的 SoapUI 已翻译 100%

oschina 投递于 2014/09/19 07:38 (共 11 段, 翻译完成于 09-22)
阅读 12192
收藏 48
5
加载中

介绍

我曾需要捕获来自至少100次对web服务调用的响应. 这是为了能让非IT职务成员对响应进行人工检查,它们需要Excel文件格式的响应记录.

使用一些groovy脚本,我得以利用 SoapUI 4.6.4 的免费版本完成了这项任务. 你可能也会想要下载 Fiddler2 来检查工作成果是否能够运作的.

脚本大部分剪贴了由 M. McDonald http://forum.loadui.org/viewtopic.php?f=5&t=16354#p38935 提供的代码.

如果你对 SoapUI Groovy 和 Java 熟悉,可能会感到疑惑,但请不要绝望!

LeoXu
翻译于 2014/09/19 08:31
2

SoapUI 的设置

下载并安装 SoapUI 的免费版本.

当你第一次运行时,看起来像下面这样:

我创建了一个工作空间存储我的项目,叫做 Automation. 为此,我们要去选择 ‘File’-> ‘New Soap Project’ ,填入项目名称和web服务的.wsdl 文件位置.

请确保你勾选了创建请求 'Create Requests' 和创建测试套件 'Create TestSuite', 然后点击 'OK'.

SoapUI 将会检查web服务,返回你可以在服务上调用的操作/方法. 在我的任务中,只有一个叫做SubmitRequestResponse的操作, 但我还是选择了 'Single TestCase with One Request for Each Operation'.

点击 'OK' 而你将会收到提醒,告知要为Test SuiteMultiple命名.

现在当SoapUI已经设置好了项目, 展开整个项目结构如下:

如果你在 Request 1 上单击, 你可以看到一个基础的请求格式.

LeoXu
翻译于 2014/09/19 08:40
2

我们需要在继续进行之前确保调用从web服务上获得了一个响应,所以我们添加一个soap请求。在我的情况里,web服务需要一个客户号跟着一个地点位置标签跟着一个或多个SalesOrders。所以我在 body 中用我的soap请求替换<part>?</part>标签。

19073755_jp0O.jpg (611&times;560)

点击绿色箭头(左上方)然后你将获得一个XML响应。

19073756_ywYN.jpg (636&times;370)

如果你有响应,那么你就在你需要在的地方。

Miss韩
翻译于 2014/09/19 11:31
2

设置 Test 文件,Test 步骤和 Test 脚本

在这一点,我们知道 SoapUI 可以发送请求到我们的web服务并返回一个响应。

现在我们需要设置我们的Test步骤和Test脚本。

Test 文件

在你的文件系统中创建一个目录并添加两个子目录。

19073756_8fBu.jpg (196&times;80)

在请求里,我们需要添加请求文件。

该文件必须和你在Request 1中添加的格式相同,如:

<ns0:CheckGuaranteeRequest xmlns:ns0="http://www.####.com/namespaces/portal/checkguarantee/in/2014.03">
<CustomerNumber>102277</CustomerNumber>
<SiteLocation>COAST</SiteLocation>
<SalesOrders>
<Id>1000495222</Id>
<Id>1000498217</Id>
</SalesOrders>
</ns0:CheckGuaranteeRequest>

它们也必须有一个  .xml 的文件扩展。

Miss韩
翻译于 2014/09/19 11:38
2

Test 步骤

检测项目的结构并确保添加了Test Steps (1)。双击 SubmitRequestResponse 显示一个基础的soap头。我们可以忽略这个。


右击 Test Steps 标题然后选择 'Add Step' 然后选择 'Groovy Script'。


重命名为Step1。

点击 'OK' 然后将出现Groovy 编辑器。

在这里我们添加我们的第一个脚本。

Miss韩
翻译于 2014/09/19 12:57
2

Test 脚本

测试脚本由M. McDonald提供(见上文)。

脚本 1

第一个脚本是:

def fileList = []
new File("C:\\requests").eachFile { f ->
if (f.isFile() && f.name.endsWith(&apos;.xml&apos;)) {
   def filename = f.name[0..-5]
     fileList.add(filename)
}
}
if (fileList.size() < 1) {
   testRunner.fail("No request files")
}
context.put(&apos;fileList&apos;, fileList)

第一步定义了一个数组。

然后从我们的测试文件目录创建一个文件并将其添加到 fileList 数组中。同时也截断一些字符,检查数组的大小以确保一些文件存在,然后添加数组到 'context object' ,这样我们将要创建的其他测试步骤也可以使用这个数组。

我们需要更改第二行使其映射我们的文件的路径,并添加一个快速检查。

在我的情况中,脚本变成:

def fileList = []

new File("C:\\GroovyTest\\requests").eachFile
{ f ->
if (f.isFile()&& f.name.endsWith(&apos;.xml&apos;))
{
 def filename = f.name[0..-1]
 fileList.add(filename)
 log.info filename
}
}

if (fileList.size() <1)
{
testRunner.fail("No request files found")
}
context.put(&apos;fileList&apos;,fileList)

 'log.info filename ' 行使在请求目录中的文件名打印到脚本日志中。

Miss韩
翻译于 2014/09/21 16:28
2

在Step1 窗口底部点击脚本日志按钮,然后点击左上角的绿色箭头运行该脚本。你应该能看到文件打印输出列表。

好了。我们已经成功的在我们的需求目录中读取了文件名并展示了它们。最好在此时注释掉从数组中打印输出文件名的行。

19073758_QTLf.jpg (243&times;78)

脚本 2

我们已经有了第2步,它叫 SubmitRequestResponse。将它重命名为 'Step2'。

在Soap请求模块中删除 ' <part>?</part>'节点并添加下列:

${=new File("C:\\GroovyTest\\requests\\" + (context.get(&apos;fileList&apos;)).last()).text}

请注意我已经更改目录为请求的目录!!!

现在我们需要在项目结构中将 Step2 拖拽到 Step1 的下面,所以看起来是这样:

19073758_Xyhw.jpg (336&times;155)

现在我们可以测试两个脚本看看它们是否工作。

Miss韩
翻译于 2014/09/22 10:12
2

是时候来设置 Fiddler 了

就是要安装一下 Fiddler Web 调试器.

Fiddler 能让你模拟需要从web服务发送和接收的东西.

当你打开 Fiddler, 需要一点点设置,以便你查看到你的web服务的网络通路. 在任务条上,点击 'Tools' -> Fiddler 选项,打开连接选项卡. Fiddler 一般会在端口8888上监听,如下可以改成8080:

这就是在Fiddler上要做的事情.

回到 SoapUI ,选择 'File'-> 'Preferences'-> 'Proxy Settings'. 我的设置成了 自动'Automatic'. 一开始我使用SSL时,遇到了一些问题.

我的HTTP设置 'HTTP Settings' 被设置成了默认选项. 这里有一个告诉你用SoapUI设置Fiddler的一个不错的网站:

By Dinesh K Mandal, 8 Sep 2011.

为了测试所有的东西是否都正常,回到SoapUI并双击你的测试项。我的测试项被叫做 'BasicHttpBinding_ITwoWayAsync TestSuite'.

会显示出一个测试项窗口:

幸运的话你可能会看到一个会话出现在了Fiddler中:

真很棒. 如果你没有看到会话的显示,那就把SoapUI里面所有的东西都保存一下,然后重启,再重新尝试一下.

LeoXu
翻译于 2014/09/22 08:07
2

回到 SoapUI.

在测试项窗口,单击绿色的箭头,来运行测试的步骤:

看看Fiddler,你将会看到一个会话已经被捕获.

如果你在会话上点击,并以XML形式查看结果,你将会看到向web服务发送的请求显示在顶部的面板,而来自服务的回应显示在底部的面板.

我们已经成功的调用了我们的web服务,并收到了它的响应. 我们现在需要一个将响应保存到文件的步骤.

LeoXu
翻译于 2014/09/22 08:10
2

脚本 3

回到SoapUI并在 'Test Steps (2)‘上右击,选择 Groovy Script. 将其重命名为 'Step3'.

在Groovy窗口中添加如下的脚本 , 修改路径,以匹配你的路径结构.

def fileList = context.get(&apos;fileList&apos;)

def fileName = fileList.pop()
def newname = fileName[0..-5]

def response = context.expand( &apos;${Step2#Response}&apos; )
def f = new File("C:\\GroovyTest\\responses\\${fileName}_Response.xml")
f.write(response, "UTF-8")

if(fileList.size() >0)
{
testRunner.gotoStepByName("Step2")
}

这块代码从上下文(见第一步)处获取数组, 从数组获取到一个文件,获得它的名字,并从名字中移除.xml。然后它会获得从步骤二返回的响应,并将其作为响应”response“存储.

然后他会在响应路径中创建一个新的文件,并将其命名为老的文件名,后面加上  '_Response.xml'’ 。

然后它会将来自web服务的响应写到该文件中。

最有有一节会检查数组的大小,而如果它比0大,那就仍然会有一个测试要运行,如此 gotoStepByName 函数会表示要跳到步骤二 'Step2'。

LeoXu
翻译于 2014/09/22 08:17
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(3)

jbas
jbas
不需要这么麻烦自己写脚本,tsoapui自己有专门的测试工具 loadui,。
小鱼梦想
小鱼梦想
补货 = 捕获
sunday12345
sunday12345
SOAP的第一个字母居然是Simple。
返回顶部
顶部