使用REST discovery(pro)生成SoapUI测试

千金一刻莫空度,老大无成空自伤。这篇文章主要讲述使用REST discovery(pro)生成SoapUI测试相关的知识,希望能为你提供帮助。
本部分将告诉你在RESTful web服务已经存在的情况下怎么生成测试?SoapUI的专业版本有REST discovery 功能,该功能允许与RESTful API进行交互时被录制且被用于生成测试。
4.1 准备阶段为了提供一个RESTful web服务的例子,需要扩展上一章中invoice服务有全部的CRUD功能。接口样子如下:
                Resource: ??http://localhost:9000/invoiceservice/v1/invoice??
                Supported Methods:
                  POST invoice - Create Invoice.
      GET invoice/id – Get (Read) Invoice.
      PUT invoice/id – Update Invoice.
      DELETE invoice/id – Delete Invoice
                Invoice文档如下:


"Invoice":

"id": 12345,

"companyName": "Test Company",

"amount": 100


        这个服务实现是非常基础的。创建(POST)方法不是幂等的,它将在每个成功的请求上创建新的invoice对象,其ID为invN形式,其中N是从0开始的序列号,例如inv0,inv1等等。GET、UPDATE、DELETE方法将返回HTTP的状态码,如果一个带有执行ID的invoice在之前没有被创建,将返回一个404的状态码。Invoice被存储在一个java的HashMap中,因此不是被持久保存的,当服务重启时,在启动后HashMap是空的!
                之前创建的服务例子存放在:< chapter1samples> /rest/invoice_crud,启动服务的服务和上一章中描述的一样,截图如下:

        如果看到异常“Port already in use”,这时你要确保没有其他服务占用端口9000,例如上一章的服务。本章将使用火狐浏览器来进行说明。如果没有安装,请下载火狐浏览器。如果这时不可能的,其他选项在后面描述中被提及。
4.2 操作步骤                SoapUI为发现RESTful web服务提供两种选择。第一选择是使用内部浏览器(Internal Browser),第二选择是用代理模式(proxy mode)。内部浏览器选项是唯一有用的,如果满足以下要求:
  l  只测试GET请求,因为没有其他方法是可能的
  l  你正在通过网页发现服务,就像SoapUI在线帮助Swagger中的例子一样
  l  需要使用HTTPS进行测试,在编写本文时,代理不能支持。               
否则一旦成立,代理模式对于包括这部分在内的许多API场景中的测试来说是一个更加通用的选择。
1.   打开SoapUI创建一个新的项目,然后选择“Discover REST APIs using ”选择“Internal browser”。点击OK,你将看到SoapUI代理默认信息:

 
  这个例子,我们只考虑内部客服端的详细信息。使用外部客户端涉及几乎相同的步骤,除了需要的网络设置超出了本书的范围。服务(localhost)和端口(8081)是键值对。这些将被我们选择用于实际服务交互的任何REST客户端使用。
  TIPS:REST Clients:在这里有很多好而且免费的选择。例如Eclipse和IntelliJ类似这样的IDE有一个好的REST客户端插件。基于浏览器的REST客服端也有很好的,例如:Chrome的Postman插件、Firefox的RESTClient插件。当选择其中一个进行使用,需要考虑代理的设置,至少暂时,是为了通过SoapUI的代理路由请求。你也可以使用命令行选项,使用一些类似于curl(https://curl.haxx.se/docs/manpage.html)的命令。选择最适合自己的,这章将使用Firefox的RESTClient插件。
2. 下载Firefox插件的RESTClient,可以在火狐浏览器的“Tools Menu|Add-ons”搜索RESTClient,点击“Add to Firefox”。重启火狐浏览器,在“Tools Menu”中会看到RESTClient的ico在客户端点开RESTClent:

3.   我们需要将Firefox代理设置配置为指向SoapUI代理:
  1)打开Preferences(选项)|Advanced(高级)|Network(网络)
  2) 在“Connection”下,在“Configure how Firefox connects to the Internet”点击“Settings”
  3) 选择“Mannual proxy configuration”,输入SoapUI代理的详细信息,截图如下:
  4) 点击OK

4. 准备通过SoapUI代理使用RESTClient。作为首次测试,向之前那样请求WADL,通过选择一个GET方法,添加一个URL: ??http://localhost:9000/invoiceservice/v1?_wadl??,点击“Send”。你将看到在RESTClient响应body中的WADL,SoapUI代理“RecordedResquest”增加到1。
TIPS:确保服务在运行,否则将会出现“拒绝连接”信息。服务持续运行时长是10分钟,可以在Server.java中调整!其他请求也会通过火狐浏览器,也会增加录制请求的数量。任何不需要的请你去,在后期会进行过滤。
 
5.   在尝试提交或放置任何invoice数据之前,需要把请求内容的类型(Content-type)为application/json;否则,状态码415将会出现,该状态表明”不支持媒体类型”。操作步骤如下:
  1)   点击“RESTClient Headers”,选择“Custom Header”
  2) 在“Resquest Header”弹出框中,输入Name为“Content-Type”,Value为“application/json”,这时点击OK
  3)这时在Headers部分的Content-Type:application/json
 
6.   做一下事实请求,首先创建一个invoice。设置如下值:
  Method:POST
  URL:??http://localhost:9000/invoiceservice/v1/invoice??
  Body: 
"Invoice":

"id": 12345,

"companyName": "Test Company",

"amount": 100


  点击”Send”,将会看到“Response Header”状态码为200 OK,,而且“Response Body”:
 
7. 更新invoice:
  Method:POST
  URL:??http://localhost:9000/invoiceservice/v1/invoice??
  Body: 
"Invoice":

"id": 12345,

"companyName": "Real Company",

"amount": 100


  点击”Send”将看到“Response Header”状态码为200而且“Response Body”:
 
8. 获取invoice,方法为GET,而且URL: ?? http://localhost:9000/invoiceservice/v1/invoice/inv0??。点击”Send”,将看到一个状态码为200:

9.   删除invoice,方法是DELETE,而且URL: ?? http://localhost:9000/invoiceservice/v1/invoice/inv0。将看到一个响应码为200?? OK,响应信息不带有任何信息。

10.        最后,再次尝试获取invoice,你将看到一个状态响应码为404。

11. 现在生成SoapUI测试,执行以下操作:
  1) 在SoapUI页面点击“Done”。将进入如下界面:
 
  2)   点击“生成服务(Genrate service)”,选择“Service+TestSuite”。点击“OK”在弹出的窗口这时输入TestSuite的名字,例如:“TestSuite Rest Discovery”:
 
  输入TestSuite名后,点击OK在弹出的窗口输入:TestCase。
  3)一个成功的弹出窗口将显示;点击OK关闭发现,这时将在项目名为Project 1下看到所有生成的request、TestSuite、TestCase、以及每个请求的TestSteps。
4.3 工作原理                SoapUI设置自己的代理来监听通过它发送的所有HTTP流量。当通过REST客户端创建的一个请求,SoapUI能够提取细节并构建一个样例请求列表。这时,当您完成录制时,SoapUI使用请求列表生成测试工件,方法与请求来自其他源(例如WADL)的方式相同。
      在检查生成的REST项目时,我们可以看到REST发现为从现成的服务中收集样本请求提供了有用的手段。你将需要创建Assertions且/或组织生成TestSteps。当涉及重构测试时,REST发现功能是非常有用的,也许围绕着一个代码优先的服务,就像上面的例子。它也是特别有用的对于服务不提供一个WADL或者相似定义,因此不能使用其他SoapUI方法生成测试请求。
【使用REST discovery(pro)生成SoapUI测试】


    推荐阅读