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/

相关文章:

php - 排序记录编号,然后按字母顺序排序

使用 Realm 进行 Swift XCTest UI 测试

nginx 配置、websocket 代理、位置、if

node.js - 如何在 Angular jest 测试中调用 Nodejs 的垃圾回收?使用 Node v20 进行测试很慢并且存在内存泄漏

node.js - webSocket "onsend"事件?

python - 在 python 中使用 websocket 客户端作为类

Phpseclib 错误执行不同的命令

php - IE 中 HTTPS Ajax 请求的问题(非跨域)

php - 在 CodeIgniter 中,加载不必要的库、帮助程序等是否会带来性能劣势?

c# - 在 C# selenium 测试运行时打开 Google Chrome 开发者工具控制台,或者以编程方式读取它