私は、基本的に GUI (php-gtk) インターフェイスを SimpleTest Web テスト ケースの周りにラップして、リモート テスト クライアントとして機能させる、最初の適切な小さなデスクトップ GUI アプリケーションを作成しました。
ローカルの Web テスト ケースが実行されるたびに、サーバー上にある別の SimpleTest ケース (XHTML インターフェースを持つ) に HTTP 要求が送信されます。
このアプリケーションにより、複数のリモート テストからの情報を照合する 1 つのローカル テストを実行できます。「テストの開始」ボタン、「テストの停止」ボタン、および各 HTTP リクエストで実行されるリモート テストの数を増減する設定があります。各テスト実行が完了するまでに約 1 時間かかります。
問題は、ほとんどの場合、アプリケーションが http 要求を行っていることです。さらに、HTTP 要求が行われるたびに、アプリケーションの GUI が応答しなくなります。
ユーザーがウィンドウのサイズを変更したり、[停止] ボタンを押したりする時間を与えるために、リクエスト間でアプリケーションを数秒 ( Gtk::main_iteration を反復して) 待機させることにしましたが、これによりテスト全体が行われます。 run は必要以上に時間がかかります。
<?php
require_once('simpletest/web_tester.php');
class TestRemoteTestingClient extends WebTestCase
{
function testRunIterations()
{
...
$this->assertTrue($this->get($nextUrl), 'getting from pointer:'. $this->_remoteMementoPointer);
$this->assertResponse(200, "checking response for " . $nextUrl );
$this->assertText('RemoteNodeGreen');
$this->doGtkIterationsForMinNSeconds($secs);
...
}
public function doGtkIterationsForMinNSeconds($secs)
{
$this->appendStatusMessage("Waiting " . $secs);
$start = time();
$end = $start + $secs;
while( (time() < $end) )
{
$this->appendStatusMessage("Waiting " . ($end - time()));
while(gtk::events_pending()) Gtk::main_iteration();
}
}
}
HTTP リクエストを行うと同時に、アプリケーションの応答性を維持する方法はありますか?
アプリケーションを 2 つに分割することを検討しています。
- テスト コントローラー アプリケーション - 設定ライター / レポート リーダーとして機能し、設定ファイルに書き込み、レポート ファイルを読み取ります。
- テスト ランナー アプリケーション - 設定リーダー/レポート ライターとして機能し、反復ごとに設定ファイルを読み取り、テストを実行し、レポートを書き込みます。
閉じるように指示するには、次のようにします。
- 「Test Controller Application」の停止ボタンを押して、
- 設定ファイルに書き込み、
- 「テストランナーアプリケーション」によって読み取られます
- 停止すると、
- 停止したことを報告ファイルに書き込みます
- 「テスト コントローラー アプリケーション」がレポートを読み取り、ステータスを更新します。
- 等々...
ただし、先に進んでアプリケーションを 2 つに分割する前に、この問題に対処する明白な方法が他にないかどうか疑問に思っています。おそらく非常に一般的で、よく踏まれた道だと思います。
また、同じマシン上にある 2 つのアプリケーション間でメッセージを送信する簡単な方法はありますか?