php - Websocket 测试 [功能]

标签 php testing websocket phpunit ratchet

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

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

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

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

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

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

最佳答案

我希望这能部分解决您的问题,即 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";
        });
    }

如果您还有任何问题,请告诉我。

关于php - Websocket 测试 [功能],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37284963/

相关文章:

node.js - 使用 websocket Node 将命令流式传输到 python shell

php - 删除另一个数据库中不存在的项目

php - 使用 Curl 在 Alfresco 中上传 PDF 时出现错误 400

testing - Flutter:如何测试滚动

javascript - 使用 NODE.JS 解析 JSON url 并使用 SOCKET.IO 保持最新状态

python - 使用 websockets 和 python/django(/扭曲?)

php - 系统自升级到 windows 10 后使用端口 80

javascript - AJAX 不会在出现奇怪情况时切换表

c# - 如何重构测试应用?

python - 我迷失了尝试为我的 Flask 应用程序编写测试