但是我无法找出测试库来测试端到端api。
clj-webdriver或其他更好的选择怎么样??
感谢和感谢任何帮助。
答案 0 :(得分:2)
我使用clj-webdriver和基于Kerodon的测试的组合:
我使用clj-webdriver来测试需要执行JavaScript的场景。因为这些测试使用真正的浏览器,所以它们很慢,因此任何不需要使用clj-webdriver的场景都不应该使用它。对于基于Compojure的新应用程序,这是a tutorial about setting up clj-webdriver。
我使用Kerodon进行所有不需要执行JavaScript的测试。 Kerodon无法启动真正的应用程序服务器和浏览器,因此速度更快。它的灵感来自Ruby的Capybara。对于包含Kerodon API概述的Compojure应用程序,这是a tutorial about setting up Kerodon。
这种方法的一个问题是clj-webdriver和Kerodon有不同的API。假设您有一个最初使用Kerodon编写的测试,因为它不需要JavaScript。如果您需要在测试中执行JavaScript,则需要使用clj-webdriver API重新编写它。但这不是一个大问题,但如果有一个项目包含这两个并且支持更改驱动程序选项,那将会很好。或者,如果此功能是Kerodon的一部分。
除了2个API,这种方法对我来说效果很好。
答案 1 :(得分:1)
一种选择是使用ring.mock通过其公开的端点测试您的服务。如果您只是测试对各种请求的API响应,那么这就是我要走的路。
在我目前的项目中,我们使用clj-webdriver通过Web浏览器进行一些测试,这有助于测试我们的UI。虽然我们仍在努力让输出易于解释,但我们编写的测试有助于捕捉回归。我们尽量不要在这些测试中做太多,因为它们很脆弱,并且在测试失败时难以缩小破坏的范围。
答案 2 :(得分:0)
我专门为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")))
它还具有在主体和响应的其他属性上进行复杂断言的功能,以及在测试失败时获取请求和响应上下文的自定义报告器。