Scala 使用Play、Akka和Websockets进行集成测试
我正在尝试在我的应用程序(play、akka、scalatest…)中使用WebSocket进行一些验收/集成测试,这些测试将被移动应用程序使用。我已经为每个参与者做了一些单元测试(将来,我希望这个“单元”指的是不止一个参与者)。现在我想测试整个系统 对于非websocket端点,如: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 {
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做了一些负载测试,用这个我也测试了控制器的交互。我知道这不是最优雅的解决方案,但它现在对我很有效。