我计划为我的 web 项目和一些移动 api 添加测试套件。我最终确定了 Midje和clojure.test以测试每一行代码(单元测试),
但我无法找出测试库来测试端到端 api。
clj-webdriver或任何其他更好的选择怎么样..?
感谢和感谢任何帮助。
我计划为我的 web 项目和一些移动 api 添加测试套件。我最终确定了 Midje和clojure.test以测试每一行代码(单元测试),
但我无法找出测试库来测试端到端 api。
clj-webdriver或任何其他更好的选择怎么样..?
感谢和感谢任何帮助。
我结合使用 clj-webdriver 和基于 Kerodon 的测试:
我使用clj-webdriver来测试需要执行 JavaScript 的场景。因为这些测试使用的是真实的浏览器,所以速度很慢,所以任何不需要使用 clj-webdriver 的场景都不应该使用。这是一个关于为基于 Compojure 的新应用程序设置 clj-webdriver 的教程。
我将Kerodon用于所有不需要执行 JavaScript 的测试。Kerodon 不会启动真正的应用程序服务器和浏览器,因此速度要快得多。它的灵感来自 Ruby 的 Capybara。这是一个关于为 Compojure 应用程序设置 Kerodon 的教程,其中还包括 Kerodon API 概述。
这种方法的一个问题是 clj-webdriver 和 Kerodon 有不同的 API。假设您有一个最初使用 Kerodon 编写的测试,因为它不需要 JavaScript。如果您需要在测试中执行 JavaScript,则需要使用 clj-webdriver API 重新编写它。不过,这不是一个大问题,但如果有一个项目可以同时包含这两者并支持更改驱动程序选项,那就太好了。或者,如果此功能将成为 Kerodon 的一部分。
除了 2 个 API 之外,这种方法对我来说效果很好。
一种选择是使用ring.mock通过暴露的端点测试您的服务。如果您只是测试对各种请求的 API 响应,这就是我要走的方向。
在我当前的项目中,我们确实使用 clj-webdriver 通过 Web 浏览器进行一些测试,这有助于测试我们的 UI。尽管我们仍在努力使输出易于解释,但我们编写的测试有助于捕获回归。我们尽量不要在这些测试中做太多,因为当测试失败时,脆弱性和难以缩小被破坏的范围。
我专门为 HTTP API 的端到端测试编写了一个 Clojure 库,它被称为Restpect。
这是一个简单的测试的样子:
(deftest create-and-delete-user
(created (PUT "http://example.com/api/v1/users/john" {:email "john@example.com"}))
(ok (GET "http://example.com/api/v1/users/john"))
(ok (DELETE "http://example.com/api/v1/users/john"))
(not-found (GET "http://example.com/api/v1/users/john")))
它还具有对响应的主体和其他属性进行复杂断言的工具,以及在测试失败时获取请求和响应上下文的自定义报告器。