如何测试多个客户端的互动

3.4 版本
维护中的版本

如果你需要模拟不同客户端(clients)之间的互动(比如当它是聊天),创建若干clients:

1
2
3
4
5
6
7
8
9
10
// ...
 
$harry = static::createClient();
$sally = static::createClient();
 
$harry->request('POST', '/say/sally/Hello');
$sally->request('GET', '/messages');
 
$this->assertEquals(Response::HTTP_CREATED, $harry->getResponse()->getStatusCode());
$this->assertRegExp('/Hello/', $sally->getResponse()->getContent());

这在你的代码“保持着全局状态”或是“依赖于一个拥有某些全局状态的三方类库”时,可以按预期那样工作。这种情况下,你可以隔离你的客户端:

1
2
3
4
5
6
7
8
9
10
11
12
13
// ...
 
$harry = static::createClient();
$sally = static::createClient();
 
$harry->insulate();
$sally->insulate();
 
$harry->request('POST', '/say/sally/Hello');
$sally->request('GET', '/messages');
 
$this->assertEquals(Response::HTTP_CREATED, $harry->getResponse()->getStatusCode());
$this->assertRegExp('/Hello/', $sally->getResponse()->getContent());

在一个专有而干净的PHP进程中,被隔离的客户端透明地执行其请求,避免了所有副作用。

隔离的客户端运行很慢,你可以在主进程中保留一个,而隔绝其他的。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)