Scala 使用Play、Akka和Websockets进行集成测试

Scala 使用Play、Akka和Websockets进行集成测试,scala,testing,playframework,playframework-2.0,akka,Scala,Testing,Playframework,Playframework 2.0,Akka,我正在尝试在我的应用程序(play、akka、scalatest…)中使用WebSocket进行一些验收/集成测试,这些测试将被移动应用程序使用。我已经为每个参与者做了一些单元测试(将来,我希望这个“单元”指的是不止一个参与者)。现在我想测试整个系统 对于非websocket端点,如: package controllers import play.api.mvc.{Action, Controller} class StatusController extends Controller {

我正在尝试在我的应用程序(play、akka、scalatest…)中使用WebSocket进行一些验收/集成测试,这些测试将被移动应用程序使用。我已经为每个参与者做了一些单元测试(将来,我希望这个“单元”指的是不止一个参与者)。现在我想测试整个系统

对于非websocket端点,如:

package controllers

import play.api.mvc.{Action, Controller}

class StatusController extends Controller {
  def get() = Action { implicit request =>
    Ok
  }
}
我有考试:

package acceptance

import org.scalatestplus.play.{OneServerPerSuite, PlaySpec}
import play.api.libs.ws.WS
import play.api.test.Helpers._


class StatusSpec extends PlaySpec with OneServerPerSuite {
    "Server Status" should {
      "work" in {
        val response = await(WS.url(s"http://localhost:$port/status").get())

        response.status mustBe OK
      }
    }
}
在这种情况下,一切看起来都很好并正常工作:)问题来自处理WebSocket的控制器:

@Singleton
class ChatController @Inject()(system: ActorSystem) extends Controller {

  def socket() = WebSocket.tryAcceptWithActor[JsValue, JsValue] { implicit request =>
    Future.successful(request.session.get("user") match {
      case None => Left(Forbidden)
      case Some(userId) => Right(TalkerSocket.props(userId))
    })
  }
}
我找了一些手册或教程来测试这些东西。我已经看到可以用浏览器和Selenium来测试这一点

我想打开两个客户端,打开两个WebSocket,从其中一个客户端发送一些消息,并侦听另一个客户端的响应。你认为这种方法正确吗?没有浏览器可以吗


谢谢

您找到您的案例的解决方案了吗?我认为这是一种进一步研究的方法。嗨,是和否:P我现在正在做集成测试,但在不测试控制器的情况下向我的第一个参与者发送消息(代码中是TalkerSocket)。然后我用Gatling做了一些负载测试,用这个我也测试了控制器的交互。我知道这不是最优雅的解决方案,但它现在对我很有效。