本文概述
- 易于设置
- 文献资料
- 自动化REST测试创建和维护
- REST测试类型
- 测试执行
- 报告类型
- 与詹金斯整合
- 社区活动
- 本文总结
任何经过正确测试的REST API服务都将涉及以下领域:
- 测试API服务是否符合REST标准
- 测试API服务响应代码
- 断言API服务响应内容
- API服务的性能基准测试
文章图片
为此, 你需要正确的工具。 Apache JMeter和REST Assured是用于测试REST API服务的两种流行的REST测试工具。你可以从此处和此处了解有关如何在实践中使用它们的更多信息。
在本文中, 你将学习这两种工具的优缺点, 以及它们在现有REST API项目中最适合的位置。
易于设置 有一个先决条件:JMeter和REST安全的都需要Java, 因此你需要在计算机上安装Java才能运行JMeter或REST安全的。
安装Apache JMeter非常简单:转到下载页面, 选择ZIP或TAR, 下载档案, 将其解压缩, 即可开始使用。
转到解压缩档案的文件夹, 转到bin子文件夹, 然后运行jmeter.bat(如果不是Windows, 则与操作系统类似)。有关如何设置Apache JMeter的更多详细信息, 请参阅此页面。
安装REST Assured会有一些不同的体验。 REST Assured不是独立的工具。它是一个Java库。为了使用它, 你必须设置一个新的Java项目并将其作为项目的库包含在内。当然, 它支持许多构建工具, 因此你只需将依赖解析器指向某个公共(Maven)存储库即可。你可以在此处找到有关如何设置REST Assured的更多详细信息。
文献资料 可以在JMeter官方网站上找到Apache JMeter文档。它提供了一些非常详尽的文档, 从入门到复杂的功能(例如侦听器)。另外, 在JMeter官方网站上, 你可以找到一些非常丰富的资源的链接, 例如视频教程。如果你对阅读的兴趣减少, 而对观看的兴趣更多, 那么这绝对是你的加分项。
REST确保文档(作为工具/库本身)可在Github存储库中找到。它具有大量在线文档中列出的功能, 并详细说明了如何实现某些功能。但是, 整个文档是一个庞大的网页, 而不是探索工具的最人性化方式。
自动化REST测试创建和维护 Apache JMeter作为具有图形用户界面(GUI)的独立应用程序, 允许你从GUI创建测试。特别方便, 因为JMeter引入了实体层次结构, 因此你在测试中创建的所有内容都将在JMeter GUI中以树状表示形式显示。
为了创建测试, 不必具有任何编码技能。但是, GUI并不限制有关测试计划的任何可能性。如果你仍想添加一些自定义编程/流程, 则BeanShell组件将允许你执行此操作。
文章图片
保存JMeter项目时, 创建的所有内容都将保存到一个巨大的XML文件(扩展名为.jmx)中。通常, 即使其中一项测试稍有更改, 你(很有可能)也必须在GUI中重新打开项目才能进行更改。
如果你需要在同一JMeter项目文件上与其他人协作, 那么使用任何源代码管理管理(SCM)系统(例如Git, SVN, Perforce等)都很难维护这个庞大的XML文件。
另一方面, 确保REST需要Java编码技能才能创建测试。没有用于创建测试的用户友好的GUI。但是, REST Assured允许你使用Gherkin语言(Given-When-Then语法)编写测试, 因此即使你需要一些Java编码技能, 测试也是相当容易阅读的。
given(http://via.placeholder.com/2000x200?text=image+placeholder).
config(RestAssured.config(http://via.placeholder.com/2000x200?text=image+placeholder).jsonConfig(jsonConfig(http://via.placeholder.com/2000x200?text=image+placeholder).numberReturnType(BIG_DECIMAL))).
when(http://via.placeholder.com/2000x200?text=image+placeholder).
get("/price").
then(http://via.placeholder.com/2000x200?text=image+placeholder).
body("price", is(new BigDecimal(12.12)));
由于REST Assured是一个库, 并且测试实际上是用Java编写的, 因此你可以将测试组织在单独的Java文件中, 因此当你需要更改一个测试时, 只需要打开一个文件即可。你不需要GUI, 因此即使通过SSH终端也可以轻松编辑测试。与他人的协作非常简单, 因为使用任何SCM维护Java文件都很容易。
REST测试类型 JMeter作为测试Web应用程序和服务的性能测试工具而闻名。开箱即用, 它具有漂亮的报告选项以及不同的图表类型, 可用于显示性能测试指标。
文章图片
【REST保证与JMeter(REST测试工具的比较)】另一方面, 它也不是JMeter的主要使用场景。你可以使用JMeter为REST API创建功能测试, 包括响应断言。
REST Assured的主要使用场景是对REST API服务进行功能测试。它甚至带有自己的响应断言机制(Gherkin语法)。由于REST Assured是Java库, 因此可以轻松地与单元测试集成。
在性能测试方面, REST Assured不支持即用型性能测试。但是, 如果你想将其用于性能测试, 则必须开发自己的自定义框架以围绕REST Assured进行性能测试。
测试执行 JMeter测试可以通过两种方式调用。
在用户界面上, 单击” 运行” 按钮:
文章图片
在命令行中:
jmeter -n -t your_script.jmx
JMeter的官方建议是不要使用GUI运行性能测试, 因为与从命令行运行测试相比, 这些测试运行速度会更慢(以每秒请求数计)。
另一方面, “ 确保REST” 需要单独的测试运行程序, 例如jUnit或TestNG(或执行Java代码的任何其他方式)。
从Eclipse使用TestNG:
文章图片
从命令行使用例如Ant构建工具:
ant run-tests
报告类型 由于其主要目的, Apache JMeter具有大量可以从测试结果中创建的报告类型。由于可以从JMeter运行性能测试, 因此通常使用以下图表显示性能指标:
文章图片
你可以从此处了解有关JMeter报告以及可以创建的报告类型的更多信息。
REST Assured本身不会创建任何报告, 因此取决于你和你选择的测试框架。但是, 当与某些单元测试框架集成时, 你可以获得HTML, 文本或XML格式的非常有用的报告。
文章图片
与詹金斯整合 对于持续集成被测产品, 将测试自动化框架与CI工具集成在一起对于运行测试和报告结果非常重要。
使用Performance插件, 可以轻松地将JMeter自动化测试与Jenkins集成, 该插件可让你设置构建后的操作, 并从Jenkins的工作页面中获得美观的仪表板页面。
文章图片
REST Assured也可以轻松地与Jenkins集成, 因为Jenkins拥有几乎所有测试框架的插件。例如, TestNG插件可以再次为测试结果创建可靠的趋势图。
文章图片
社区活动 这是一个不易衡量的类别。社区活动取决于多种因素, 例如工具的成熟度或贡献者的数量。
如今, Apache JMeter具有更大的社区。这主要是因为JMeter早就出现在市场上, 并且在进行Web应用程序和服务的性能测试时被视为行业标准。 JMeter每5-6个月发布一次官方发布。它的GitHub存储库非常活跃, 每天都有新提交。 JMeter使用Bugzilla作为问题跟踪程序, 并列出了经常更改的未解决问题。在StackOverflow搜索中, 有23000+个JMeter结果。在社交网站上, JMeter有一个官方的Twitter帐户。在Facebook和LinkedIn上, 没有JMeter的官方帐户, 但是有几个组, 其中较大的是这个Facebook组和这个LinkedIn组。
当涉及到自动化REST API服务功能测试时, REST Assured正在逐步进入主流阶段, 并且已成为首选, 这是来自多个来源的推荐。过去两年, REST Assured一直每6个月发布一次官方发行版。 GitHub存储库有很多贡献者, 并且不如JMeter活跃, 但它也非常活跃。 REST Assured正在跟踪GitHub存储库中的问题, 因此一切都集中在一个地方。在StackOverflow中, 有2, 000个以上的REST Assured搜索结果, 因此可以说, 它比JMeter搜索结果要低得多。至于社交网络组, 与JMeter相比, 只有LinkedIn组的成员数量明显减少。 REST保证社区可能不像JMeter社区那么大, 但是它非常活跃。
本文总结 JMeter和REST Assured两者都有各自的优势。但是根据你正在处理的项目, REST API测试自动化将比另一种更适合。两者都非常强大, 具有有用的测试选项, 拥有出色的报告功能, 并且可以轻松地与自定义测试框架集成。
这是本文针对这两种流行的REST测试工具探讨的所有比较标准的摘要:
Apache JMeter | 放心 | |
---|---|---|
需要编码技巧 | No | Yes (Java) |
详尽的文档 | 是 | 是 |
功能测试 | Yes (but overkill) | 是 |
性能测试 | 是 | No (out of the box) |
Suitable for SCM (Git, P4… ) | No | 是 |
测试报告 | 是 | No |
与CI工具集成 | 是 | 是 |
与单元测试集成 | No | 是 |
测试并行化 | 是 | 是 |
社区活动 | 是 | 是 |
推荐阅读
- 现场级Rails缓存失效(DSL解决方案)
- 2018 10-708 (CMU) Probabilistic Graphical Models {Lecture 15} [Mean field Approximation]
- Android Studio 无 Generate signed apk 菜单选项问题
- 区块链学习--以太坊Dapp开发
- 在android中进行单元测试的步骤
- Android-Genymotion Unable to load VirtualBox engine
- 如何在IE11运行Java小程序(Applet)
- Ubuntu18.04中安装virtualenv和virtualenvwrapper
- Android Gradle 依赖配置(implementation & api)