【问题标题】:Websocket Testing [Functional]Websocket 测试 [功能]
【发布时间】:2016-05-17 19:42:51
【问题描述】:

我在 PHP 中将 Ratchet 用于 websockets。我能够为 websockets 编写单元(phpspec)和验收测试(behat),但是我找不到如何使用功能性 phpunit 测试来测试与 websocket 服务器的连接的方法。我认为是一个测试,它检查是否连接已启动并正在运行,这将非常重要。我想到了类似以下的内容:

  1. 在 phpunit 中创建一个(棘轮)客户端
  2. 连接到ws url(例如client->connect(host, port, ...)
  3. ping websocket / 发送/接收一些消息(调用客户端的方法,例如client->push(..)..)

问题是,我不知道哪个类负责在 Ratchet 中建立连接(创建可以请求 websocket 的客户端)以及测试的样子。如何创建 Ratchet 客户端以便能够在 phpunit 功能测试中连接和请求 websocket? (类似于例如标准 phpunit 功能测试中的 webclient)

例如,在功能测试中,我可以执行以下操作:

$client = static::createClient();
$client->request('GET', '/book/3', array(), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest'));
$response = $client->getResponse();
$this->assertEquals(
    440,
    $response->getStatusCode()
);

或者例如创建经过身份验证的客户端而不是匿名客户端。怎么可能,将这个功能测试“翻译”成棘轮 websocket 测试?

【问题讨论】:

  • 所以你对这个问题投了反对票,但正如我所见,当我用谷歌搜索 websocket 功能测试时,这是显示在结果中的极少数页面之一。我会澄清一下我的问题。

标签: php testing websocket phpunit ratchet


【解决方案1】:

我希望这能部分解决您关于 Ratchet Websocket 的哪个部分负责建立连接的问题。

测试本身可能无法正常工作,我对 PHP 测试没有那么丰富的经验,尽管它应该能让你走上正确的道路。

public function testCanConnect()
    {
        \Ratchet\Client\connect('ws://127.0.0.1:8080')->then(function($conn) {
            $conn->on('message', function($msg) use ($conn) {
                print $msg."\n";
                $this->assertEquals('true',true);
                $this->assertEquals("Hello World",$msg);
                $conn->close();
            });
            $conn->send('Hello World!');
        }, function ($e) {
            echo "Could not connect: {$e->getMessage()}\n";
        });
    }

如果您还有其他问题,请告诉我。

【讨论】:

  • 谢谢!正是我想要的。所以这是我用来建立连接的高速公路客户端框架的服务器端“挂件”。
  • 我必须警告您 PHPUnit 代码可能无法正常工作,因为我之前曾在 PHPUnit 中编写过单个 UnitTest。由于您似乎更有经验,这应该会让您走上正轨。
  • 是的,没关系,我知道怎么写 phpunit 我只是不知道棘轮服务器端的部分。那是缺失的部分。额外:在编写连接到某物的测试时,通常是功能测试。但是,我仍然可以用 phpunit 编写它并且知道如何:)
  • 如果您完成了测试并使其正常工作,您能否将其结束,以便我可以为遇到相同问题的其他人更改答案?
  • 然后我可能会更新问题,但我认为您的回答对于遇到相同问题的每个人来说已经足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多