【问题标题】:How to test remote (production) Scalatra web service with Specs2?如何使用 Specs2 测试远程(生产)Scalatra Web 服务?
【发布时间】:2013-10-07 15:41:11
【问题描述】:

我正在使用 Specs2 测试我的 Scalatra Web 服务。

class APISpec extends ScalatraSpec {
  def is = "Simple test" ^
     "invalid key should return status 401" ! root401^

  addServlet(new APIServlet(),"/*")

  def root401 = get("/payments") {
    status must_== 401
  }
}

这会在本地 (localhost) 测试 Web 服务。现在我想对生产 Jetty 服务器执行相同的测试。理想情况下,我只需更改一些 URL 就可以做到这一点。这可能吗?还是我必须为生产服务器编写自己的(可能重复的)测试代码?

【问题讨论】:

    标签: specs2 scalatra


    【解决方案1】:

    我不知道 Scalatra 如何管理其 URL,但您可以在 specs2 中做的一件事是 control parameters from the command-line:

    class APISpec extends ScalatraSpec with CommandLineArguments { def is = s2"""
      Simple test
      invalid key should return status 401  $root401
        ${addServlet(new APIServlet(),s"$baseUrl/*")}
      """
    
      def baseUrl = {
        // assuming that you passed 'url www.production.com' on the command line
        val args = arguments.commandLine.split(" ")
        args.zip(args.drop(1)).find { case (name, value) if name == "url" => value }.
          getOrElse("localhost:8080")
      }
    
      def root401 = get(s"$baseUrl/payments") {
        status must_== 401
      }
    }
    

    【讨论】:

    • 感谢您的回答。也许我没有正确解释,但我想测试 remote 生产码头服务器,而不是本地主机。所有测试都在localhost:8080 上运行。现在我希望他们在myurl.com/api:8080 上运行。你知道这是否可能吗?我不想为了能够测试我的生产环境而将测试复制粘贴到主类。
    • 在我的回答中,我建议在命令行中注入 url:sbt>testOnly *APISpec* -- url myurl/api:8080。那不行吗?
    • 为什么我们需要命令行?如果我们只使用它来填充 $baseUrl 变量,我们可以说 baseUrl=myurl/api:8080,对吗?问题是 get 和 addServlet 中的 url 似乎与本地主机相关。我无法将它们指向远程 url。你对此有什么想法吗?谢谢
    • 这就是我们需要一个我不是 Scalatra 专家的地方:-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多