2016-05-17 182 views
2

我在PHP中使用Ratchet作爲websockets。我能夠爲websockets編寫單元(phpspec)和驗收測試(behat),但是我找不到如何使用功能性phpunit測試來測試與websocket服務器的連接的方法。我想一個測試,它會檢查連接正在運行,將是非常重要的。我想到了類似如下:PHPUnit中Websocket測試[功能]

  1. 創建(棘輪)客戶端
  2. 連接到WS URL(如客戶機 - >連接(主機,端口,...)
  3. 平的WebSocket /發送/接收一些消息(客戶端的調用方法,例如client-> push(..)..)

問題是,我不知道哪個類負責建立連接(創建一個客戶端可以請求WebSocket)在棘輪和如何測試然後看起來像我如何創建棘輪客戶端爲了能夠在phpunit功能測試中連接並請求websocket? (類似例如一個標準的PHPUnit功能測試中的Web客戶端)

作爲一個例子,對於一個特徵的功能測試中,我可以執行以下操作:

$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?

+0

所以你downvote的問題,但正如我所看到的,當我谷歌的websocket功能測試,這是顯示在結果上的幾個頁面之一。我會稍微澄清一下我的問題。 – user3746259

回答

2

我希望這部分解決了你的棘輪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"; 
     }); 
    } 

如果您還有其他問題,請告訴我。

+0

謝謝!正是我在找什麼。所以這是服務器端到我用來建立連接的autobahnjs客戶端框架的「掛件」。 – user3746259

+0

我必須警告你,PHPUnit代碼可能不工作,因爲我以前在PHPUnit中編寫過單個UnitTest。 由於你看起來更有經驗,這應該讓你走上正軌。 – mitchken

+0

是的,好吧,我知道如何寫phpunit我只是不知道棘輪服務器端的一部分。那是失蹤的一塊。額外:當你寫連接到某個東西的測試時,它通常是一個功能測試。但是,我仍然可以用phpunit編寫它,並知道如何:) – user3746259