我刚刚制作了我的第一个适当的小型桌面 GUI 应用程序,它基本上围绕 SimpleTest Web 测试用例包装了一个 GUI (php-gtk) 界面,以使其充当远程测试客户端。
每次本地 Web 测试用例运行时,它都会向我服务器上的另一个 SimpleTest 用例(具有 XHTML 接口)发送一个 HTTP 请求。
该应用程序允许我运行一个本地测试来整理来自多个远程测试的信息。它只有一个“开始测试”按钮、“停止测试”按钮和一个增加/减少在每个 HTTP 请求中进行的远程测试数量的设置。每次测试运行大约需要一个小时才能完成。
问题是,大多数时候应用程序都在发出 http 请求。此外,无论何时发出 HTTP 请求,应用程序的 GUI 都没有响应。
我已经让应用程序在请求之间等待几秒钟(通过 Gtk::main_iteration 迭代),以便让用户有时间重新调整窗口大小,按下停止按钮等。但是,这使得整个测试运行时间比必要的要长得多。
<?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 请求的同时保持响应?
我正在考虑将应用程序分成两部分,其中:
- 测试控制器应用程序 - 充当设置编写器/报告读取器,它写入设置文件并读取报告文件。
- 测试运行应用程序 - 充当设置读取器/报告编写器,每次迭代读取设置文件,运行测试,然后编写报告。
所以告诉它关闭 - 我会:
- 按下“测试控制器应用程序”上的停止按钮,
- 写入设置文件,
- 由“Test Runner Application”读取
- 停止,然后
- 写入报告文件以表示它已停止
- “测试控制器应用程序”读取报告并更新状态
- 等等...
但是,在我继续将应用程序一分为二之前 - 我想知道是否还有其他明显的方法可以处理这个问题。我怀疑这可能很常见,而且是一条人迹罕至的道路。
还有一种更简单的方法可以在同一台机器上的两个应用程序之间发送消息吗?