使用SoapUI测试REST应用程序的登录功能

时间:2014-04-25 15:08:20

标签: rest login soapui

我不会轻易地提出这个非常普遍的问题,但我已经完成了我自己能够弄明白的问题。

我在新公司启动了QA测试自动化(他们目前没有自动化任何东西),他们已选择使用SoapUI进行此过程。

他们正在开发的应用程序是一个REST应用程序(我真的不知道这意味着什么)所以我试图构建一个REST请求和Test Suite来实现我们的内部测试服务器(它获取我不允许在此发布的XML - 但它确实成功到达服务器!)然后尝试进行登录/注销测试。

我正在寻求方法方面的帮助,因为我不知道从哪里开始。我用Google搜索并控制了他们的支持论坛,并查看了YouTube的每个角落。每个人都在做一些不同的事情,我无法联系或使用它。

那里有人使用SoapUI并在REST应用程序中测试功能登录吗?我可以编写HTML / CSS,而且我非常精通Java,所以如果我知道要查找什么和学习什么,我就可以做技术。

感到不知所措。当我开始时,这不在我的工作描述中。

1 个答案:

答案 0 :(得分:2)

你应该从REST开始,然后用SoapUI开始。

很难理解 REST 的本质。

它就像 SOAP 混合和简单的HTML驱动的Web应用程序 。通过 SOAP ,您可以使用 WSDL 描述 Web服务。通过 Web应用程序发回超媒体 ,这样您就不必编写 WSDL 或任何描述符到您的应用程序这是 约定优于配置 ...

REST 使用相同的方法,因此它也会发回超媒体 ,但它会发送而不是 HTML < / em> ,因为它不是机器可处理的。 REST API 发送的超媒体通常是 XML JSON 衍生,例如{{3} },ATOM+XML等... 如果您的网络服务没有发回超链接,那么它就不是真正的 REST < / em> service 只是一个带有 REST 约束的 SOAP Web服务。有一个很大的不同。通过 SOAP ,如果要发送请求,则必须了解有关操作名称和参数的所有信息。如果发生了变化,那么 SOAP客户端会立即中断。 通过 REST 您的自动客户端会跟踪链接,检查 链接关系 ,或者绑定的 链接数据 ,并识别链接正在寻找的内容。因此链接 url 的修改在客户端中无关紧要,因为遵循词汇表 应用程序,例如:JSON-LD是一个试图以一般方式描述这些应用程序级语义的项目,并尝试将其绑定到打开链接数据

所以首先你必须检查你是否有一个真正的 REST API ,它遵循 hydra 原则,或者只是 REST ,如 SOAP Web服务。如果您想对其HATEOAS进行编写,这一点非常重要。 通过测试 REST ,您必须遵循 Web API 返回的测试中的链接。通过测试 SOAP 之类的 REST ,您必须在测试中自己构建链接 ... 如何构建这样的< EM>链路?我确信您已经获得了 REST API 的说明,但链接通常看起来像JSON格式:

{ rel: "link-relations", method: "METHOD", href: "domain/api-root/version/resource-path?map-reduce", data: {...}, title: "...", ... }

OFC。每个超媒体都有一些差异,所以你必须检查你的 XML 超媒体类型,它如何代表链接 ...... link-relations可能还有其他属性将您的数据绑定到 REST API 语义 METHOD始终是动词 ,通常是: GET,POST,PUT,PATCH,DELETE ,也许 OPTIONS < / em>,依此类推......只有少数end to end tests,每个都有特定含义网址 domain是您应用的域名,例如https://example.com api-rootREST API 的根,通常为/api version是当前使用的 API 的版本号,通常为/v1。只有非向后兼容的词汇表更改才会影响此版本号。 resource-path是您的资源 的路径,通常是/users/users/inf3rno等等。通过REST,您有资源。他们每个人都有唯一 resource-path,如您所见,该路径中的每个字都是名词 。因此,资源您可以使用动词 修改或显示的内容。例如,GET /users/inf3rno应该返回我的个人资料页面的表示,而PATCH /users/inf3rno {nick: "Leslie"}会将我的昵称:inf3rno转换为Leslie。通过 REST ,每个资源应该只有一个资源路径,因此这始终是唯一标识符,因此前面的示例包含如果你想让多个用户拥有相同的昵称,那么PATCH 并不是那么完美...... queryString 中的 map-reduce > url ,它包含 排序分页过滤 设置要修改或显示的资源。例如,您可以使用名字检索每个用户的一些数据:&#34; Leslie&#34;与GET /users?filters="firstName: 'Leslie'"&page=3&count=25。以下 url -s:/users?id="inf3rno"/users/inf3rno之间存在差异。第一个指向集合资源并通过其表示过滤结果,第二个指向单个项目资源。因此, GET 应该返回集合表示,其中第一个包含单个项目,第二个包含项目表示。通过资源修改方法,两个网址之间没有区别......所以建议只向{添加唯一标识符 {1}}如果要从集合中选择项目资源。通过以任何其他方式减少集合表示,您必须将过滤器添加到 queryString resource-path部分包含输入字段 中的参数 data链接的标题 ,依此类推......您可以使用REST verbs想要输入输入params url 以及... 通过 REST 客户端维护会话,并发送凭据(用户名,密码)每个请求。这是因为 REST服务就像John Snow一样,它对会话身份一无所知用户 必须对每个请求进行身份验证 为此,它使用 title缓存。这是一种很好的方法,因为如果服务不需要维护会话,它就是服务,它是应用程序状态的一部分 (客户端的状态)... REST服务仅维护资源状态,它不依赖于客户端 ...

响应 REST请求通常是超媒体,其中包含链接,您可以按照您要求的数据。通过 REST ,例如 SOAP Web服务,您只能获得 JSON XML 格式。每个响应都应包含正确的状态标题。最常见的状态代码为:

  • 200 - 确定(通过成功的 PUT,PATCH和GET
  • 201 - 创建(通过成功的 POST
  • 202 - 接受(通过最终一致性的异步请求)
  • 204 - 没有内容(通过成功的 DELETE
  • 206 - 部分内容(通过范围标题分页)
  • 301 - 永久移动(通过迁移)
  • 304 - 未修改(通过缓存)
  • 400 - 错误请求(通过无效输入)
  • 401 - 未经授权(如果没有密码,或用户名或密码错误)
  • 403 - 访问被拒绝(如果您的帐户没有执行任务的权限)
  • 404 - 未找到(未知资源)
  • 409 - 冲突(由并发问题或重复请求或数据库约束问题引起)
  • 410 - 已消失(如果之前存在资源,但已删除)
  • 415 - 不支持的媒体类型(如果客户端希望以未知媒体类型进行响应)
  • 500 - 内部服务器错误(如果请求没问题,但处理时出错了)

如果出现任何错误,您必须发送带有自定义错误代码的详细错误消息,这对用户而言不仅仅是开发人员可以理解......

REST API 的外观如何。

要使用 e2e测试对其进行测试,您必须设置 fixtures 发送 REST请求并检查其响应。所以它就像任何其他测试...... SoapUI 不一定是最好的工具,我读了很多关于它的抱怨......我个人从未使用它,但它编写自定义测试系统并不困难。您需要一个测试框架,可以比较预期值和实际值。您需要发送 HTTP请求,或者只需模拟 REST API HTTP框架。你需要一些 fixture 。通过集成测试,你也可以模拟 业务逻辑 HTTP框架,所以那些你只是注入模拟 依赖项并检查调用。通过 e2e tests ,您需要一个测试数据集,并将其与您案例中的结果 XML 进行比较...如果您想 e2e test 您的客户端,如果基于 HTML ,则可以使用 selenium ,可能使用url-templates。通过测试真正的 REST API ,您需要自动浏览器,例如 selenium ,用于 REST API >实现,可以选择并遵循正确的链接。如果您正在开发 REST API ,那么如果您想为第三方客户端开发人员提供示例 client ,您可以编写类似的浏览器。