spring - 自动化 API 黑盒测试

标签 spring postgresql rest soap automated-tests

我有一个(稍微复杂的)spring web 服务,它通过 RESTful API (JSON) 与多个前端通信,此外还通过 SOAP 或 REST 与其他设备通信。我想设置一个能够执行以下操作的自动化测试环境:

  1. 通过固定装置(POSTGRES DB)创建先决条件
  2. 针对 API 发送 REST 或 SOAP 消息
  3. 能够在特定时间运行特定任务(针对 API 的请求) 时间/日期
  4. 声明并验证生成的结果(API 调用的返回或 检查数据库)
  5. 独立于任何前端/UI 运行所有测试
  6. 将测试环境集成到我的基础架构中(即创建一个 运行 Jenkins 部署的所有测试的 docker 容器)

最好我想构建可重用的组件(即用于创建多个不同测试中需要的用户等等......)。我知道有很多工具和框架(SoapUI、JMETER 等)。但在尝试所有方法并迷路之前,我想从具有类似设置的人那里获得经验报告。

最佳答案

我们使用 JMeter 进行 API 测试。我们尝试了 SOAPui,但它有一些内存问题。所以我们正在推进 JMeter,到目前为止一切顺利。
对于您的问题:

  1. 我们正在使用 MySQL,但这篇文章似乎展示了如何在 JMeter 中设置 postgres 连接:https://hiromia.blogspot.com/2015/03/how-to-perform-load-testing-on.html
  2. JMeter 可以发送 REST API 请求
  3. 我不确定这是否可行,但您可以安排 Jenkins 作业在您需要 API 在特定时间运行特定任务时运行。
  4. JMeter 中有很多断言。我经常使用响应和 BeanShell 断言。
  5. JMeter 独立于任何有助于查明错误的前端 UI。
  6. 我没有运行 docker,但我正在通过 Jenkins 运行。这个 Jenkins 插件很有帮助:https://wiki.jenkins.io/display/JENKINS/Log+Parser+Plugin

更多提示:

  • 使用 HTTP 请求默认元素。这将使您不必更新所有 HTTP 请求。
  • 使用用户定义变量来定义您需要的变量。
  • 您可以组合用户定义的变量,例如:${namePrefix}${myTime} 但它必须在第二个用户定义的变量元素中(您不能将它们组合在同一个元素中)
  • 如果您有多个测试环境,请使用如下值设置用户定义的变量:${__P(testenv,staging)} 这样,您可以从 CLI 中更改它:-Jtestenv=HOTFIX<
  • 我们使用 ExtentReports 通过自定义 JSR223 Listener 生成漂亮的 html 结果报告(可以在本网站上找到我的旧帖子)。
  • 如果您的网站使用 cookie,请使用 HTTP Cookie 管理器。
  • 如果您需要事情按顺序发生,请在“测试计划”元素上选中此选项:连续运行威胁组。如果您不这样做,JMeter 会以随机顺序运行它们。

希望对您有所帮助。测试愉快!

关于spring - 自动化 API 黑盒测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47274350/

相关文章:

java - Jersey rest 服务器 - 将列表的不同结构返回为 json

java - 服务器上生成的带有 MediaType.TEXT_EVENT_STREAM 的事件何时会传递给客户端上的订阅者

database - 我使用 spring data jpa 的 native 查询有问题

ruby-on-rails - 如何通过检查 Rails 来防止并发请求偷偷摸摸?

sql - 使用单个查询聚合两个不同的事件表

sql - 添加新列到现有表中

java - Spring PDF 生成 + i18n

java - IntelliJ IDEA 无法运行 Grails 2.3.0 项目

java - Spring 启动 : Error in API access : Failed to connect to <domainName>

c# - WCF REST 服务控制台主机