我有一个(稍微复杂的)spring web 服务,它通过 RESTful API (JSON) 与多个前端通信,此外还通过 SOAP 或 REST 与其他设备通信。我想设置一个能够执行以下操作的自动化测试环境:
- 通过固定装置(POSTGRES DB)创建先决条件
- 针对 API 发送 REST 或 SOAP 消息
- 能够在特定时间运行特定任务(针对 API 的请求) 时间/日期
- 声明并验证生成的结果(API 调用的返回或 检查数据库)
- 独立于任何前端/UI 运行所有测试
- 将测试环境集成到我的基础架构中(即创建一个 运行 Jenkins 部署的所有测试的 docker 容器)
最好我想构建可重用的组件(即用于创建多个不同测试中需要的用户等等......)。我知道有很多工具和框架(SoapUI、JMETER 等)。但在尝试所有方法并迷路之前,我想从具有类似设置的人那里获得经验报告。
最佳答案
我们使用 JMeter 进行 API 测试。我们尝试了 SOAPui,但它有一些内存问题。所以我们正在推进 JMeter,到目前为止一切顺利。
对于您的问题:
- 我们正在使用 MySQL,但这篇文章似乎展示了如何在 JMeter 中设置 postgres 连接:https://hiromia.blogspot.com/2015/03/how-to-perform-load-testing-on.html
- JMeter 可以发送 REST API 请求
- 我不确定这是否可行,但您可以安排 Jenkins 作业在您需要 API 在特定时间运行特定任务时运行。
- JMeter 中有很多断言。我经常使用响应和 BeanShell 断言。
- JMeter 独立于任何有助于查明错误的前端 UI。
- 我没有运行 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/