我正在使用Maven Flexmojos插件在Jetty / Java / Spring Security / BlazeDS后端的命令行上运行一些FlexUnit4集成测试。这些集成测试在独立版本的Flash播放器中运行。其中一个测试尝试了几种不同的登录方案,如下所示:
[Test(async)]
public function userLogin_badCredentials_FailedLogin():void {
var username:String = "guest";
var password:String = "not_the_right_password";
var token:AsyncToken = authenticationService.userLogin(username, password);
token.addResponder(Async.asyncResponder(this, new TestResponder(handleRemoteObjectNoExpectedResult, handleRemoteObjectExpectedFaultBadCredentials), TIMEOUT, username, handleTestTimeout));
}
[Test(async)]
public function userLoginLogout_UserLoggedIn_SuccessfulLoginLogout():void {
var username:String = "admin";
var password:String = "admin";
var token:AsyncToken = authenticationService.userLogin(username, password);;
token.addResponder(Async.asyncResponder(this, new TestResponder(userLoginLogout2_UserLoggedIn_SuccessfulLoginLogout, handleUnexpectedFault), TIMEOUT, username, handleTestTimeout));
}
public function userLoginLogout2_UserLoggedIn_SuccessfulLoginLogout(event:ResultEvent, passThroughData:Object):void {
// Must have logged in correctly
assertTrue(serviceManager.channelSet.authenticated);
// Now lets test logout
var token:AsyncToken = authenticationService.userLogout();
token.addResponder(Async.asyncResponder(this, new TestResponder(handleExpectedResult, handleUnexpectedFault), TIMEOUT, null, handleTestTimeout));
}
这些测试中的任何一个单独通过100%,但是它们一个接一个地运行它我间歇性地(大约75%的时间)得到错误:
Channel.Ping.Failed error Detected duplicate HTTP-based FlexSessions, generally
due to the remote host disabling session cookies. Session cookies must be enabled
to manage the client connection correctly.
如果我尝试登录/退出两次,也会发生这种情况。所有登录和注销方法都基于使用AMFChannelSet的ChannelSet.login和ChannelSet.logout。
更新:我相信我找到了问题的根源。独立播放器不使用cookie,因此混淆了BlazeDS后端。见这里:http://www.webappsolution.com/wordpress/2009/11/25/flexunit-4-testing-services-in-flash-player-issue/
答案 0 :(得分:1)
问题的间歇性导致我猜测竞争状况正在发生。使用Charles代理协议调试实用程序,我能够看到AMF请求/响应消息。我不是(现在仍然不确定),但我最好的猜测是,在服务器有机会完全禁用之前的FlexSession之前,第二次登录尝试正在进行。
因此,在登录尝试之间“购买时间”我将测试方法分成不同的测试类和中提琴......这一切都刚刚工作。
也许测试后的睡眠/延迟也可以完成,但我找不到ActionScript睡眠功能。