如何使用 Elixir 测试 Web 服务?

How to test Web Services with Elixir?

我们有几个 REST API 需要测试。 API 归其他团队所有。目前,我们使用 Node.jsAva 来测试我们的 APIs.

我们最近开始探索 Elixir 作为我们的脚本语言。我们想尝试使用 Elixir 来测试 REST API。这里的问题是 - 如何使用 Elixir 测试外部网络 services/REST API?

围绕 Elixir 测试的每个 Google 搜索都指回 ExUnit,它基本上用于 Elixir 应用程序的单元测试。我们没有任何用 Elixir 或 Phoenix 编写的应用程序。

我们要做的就是端到端测试 API。如何使用 Elixir 做到这一点?使用哪些库?我知道我可以从我用 ExUnit 编写的测试中进行网络调用并验证 API 行为,但不确定它是否是正确的方法。

注意:我们已经将 JMeter 用于 API 的负载测试,但由于 API 涉及复杂的工作流,我们希望将功能测试与负载测试分开。

我认为你在答案中描述的是正确的方法。

您可以使用 ExUnit 作为测试 运行 和报告框架。在 ExUnit 中,你可以做任何你想做的事,进行网络调用,甚至解析 DOM。要测试 REST API,您可以使用 HTTPoision 并断言状态代码和响应主体。

新建一个混音项目

mix new api_test

将 HTTPoison 依赖项添加到 mix.exs

...
  defp deps do
    [
      {:httpoison, "~> 1.6"}
    ]
  end
...

运行 mix deps.get 安装 HTTPoison

test/api_test_test.exs

中添加测试
defmodule ApiTestTest do
  use ExUnit.Case
  doctest ApiTest

  test "API alive" do
      resp = HTTPoison.get!("https://api.github.com")
      assert resp.status_code == 200
  end
end

运行 项目根目录中 mix test 的测试。