Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Websocket测试[功能]_Php_Testing_Websocket_Phpunit_Ratchet - Fatal编程技术网

Php Websocket测试[功能]

Php Websocket测试[功能],php,testing,websocket,phpunit,ratchet,Php,Testing,Websocket,Phpunit,Ratchet,我正在PHP中为WebSocket使用Ratchet。我能够为websocket编写单元测试(phpspec)和验收测试(behat),但是我找不到一种方法来通过功能性phpunit测试来测试与websocket服务器的连接。。我认为检查连接是否正常运行的测试非常重要。我想到了如下的事情: $client = static::createClient(); $client->request('GET', '/book/3', array(), array(), array('HTTP_X-

我正在PHP中为WebSocket使用Ratchet。我能够为websocket编写单元测试(phpspec)和验收测试(behat),但是我找不到一种方法来通过功能性phpunit测试来测试与websocket服务器的连接。。我认为检查连接是否正常运行的测试非常重要。我想到了如下的事情:

$client = static::createClient();
$client->request('GET', '/book/3', array(), array(), array('HTTP_X-Requested-With' => 'XMLHttpRequest'));
$response = $client->getResponse();
$this->assertEquals(
    440,
    $response->getStatusCode()
);
  • 在phpunit中创建(棘轮)客户端
  • 连接到ws-url(例如客户端->连接(主机、端口等)
  • ping websocket/发送/接收一些消息(客户端的调用方法,例如客户端->推送(…))
  • 问题是,我不知道哪个类负责在Ratchet中建立连接(创建一个可以请求websocket的客户端)以及测试会是什么样子。我如何创建一个Ratchet客户端,以便能够在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";
            });
        }
    

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

    所以您否决了这个问题,但正如我所看到的,当我搜索websocket功能测试时,这是结果上显示的极少数页面之一。我会澄清一下我的问题。谢谢!正是我要找的。这就是“挂件”在服务器端连接到我用来建立连接的autobahnjs客户端框架。我必须警告您,PHPUnit代码可能不起作用,因为我以前用PHPUnit编写过一个单元测试。因为您似乎对它更有经验,这应该会让您走上正确的道路。是的,没关系,我知道如何编写PHPUnit I just不知道ratchet服务器端部分。这是缺少的部分。额外:当编写连接到某个对象的测试时,通常是功能测试。但是,我仍然可以使用phpunit编写它,并且知道如何:)如果你完成了测试,这样它就可以工作了,你能把它交给我吗?这样我就可以为遇到相同问题的其他人更改答案了?然后我可能会更新这个问题,但我认为你的答案对每个有相同问题的人都足够了。