【问题标题】:How to test WebService calls in Play 2.1?如何在 Play 2.1 中测试 WebService 调用?
【发布时间】:2013-06-16 20:02:18
【问题描述】:

我正在抓取一个需要 GET 参数和 cookie 的网站。我想知道是否正在发送正确的参数和 cookie。能够测试 HTTP 标头、POST 数据等在以后也会非常有用。

在我看来,最好的方法是启动一个网络服务器,让抓取代码调用一个指向网络服务器的 URL,并查看所有内容是否正确到达服务器。有一个简单的方法来设置一个模拟外部网络服务器也非常适合集成测试。

简单的代码如下:

  def getResource(a: String, b: String, c: String) =
    WS.url("http://www.example.com")
          .withQueryString("x" -> a, "y" -> b)
          .withHeaders("Cookie" -> c)
          .get()

我正在使用 ScalaTest 进行单元测试。

Play 是否提供任何东西来轻松测试这些事情?是否有其他易于使用的库可以满足我的需求?

【问题讨论】:

    标签: unit-testing scala playframework playframework-2.1 scala-2.10


    【解决方案1】:

    尝试在单元测试中嵌入jetty,您可以按照自己的方式伪造外部服务

    【讨论】:

    • 我真的很喜欢 Jetty 库的简单性,感谢您的回答。
    【解决方案2】:

    测试 Play 2 应用程序的默认方法是使用 specs2。在您的情况下,可以使用functional tests 来测试网络服务器,例如:

    "run in a server" in new WithServer {
      await(getResource(a,b,c)).status must equalTo(OK)
    }
    

    请参阅 documentation 以测试 Play 2 应用。

    【讨论】:

    • 这个技术是为了测试应用程序本身,它不允许你测试你是否正确地调用了外部服务。
    • 是的,你没看错,WithServer 启动内部服务器。并且可以省略一个。但是这种技术确实允许您测试任何功能,包括外部服务调用。为什么不呢?
    • 我想测试 HTTP 请求是否真正到达,并在外部服务上使用正确的标头/GET 参数/POST 数据。而且我想在不实际调用外部服务的情况下执行此操作,因为它可能响应速度不是很快,它可能已关闭,调用该服务可能会触发我不想在测试期间触发的事情(API 访问限制,POST 请求改变外部服务上的数据)等等。我基本上想模拟一个外部 HTTP 服务器,检查它是否收到请求并对请求数据进行一些检查。
    猜你喜欢
    • 2013-03-10
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多