十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。
【转】对游戏服务端程序进行自动化测试
上一篇 /
下一篇 2010-07-03 11:48:15
/ 个人分类:其它
dDVQg,|s~)tr0 最近一年都在做SNSGame,服务端当然还是用的PHP,而客户端则使用了Flash。51Testing软件测试网X-CQ A4\7i}
A/@IQQ
m*R9q3b0 由于使用Flash做为客户端,服务端就不再需要处理一大堆与HTML相关的问题了。客户端和服务端之间就是单纯的数据交换,这大大减低了进行自动化测试的难度。虽然许多开发者选择AMF作为Flash和PHP之间的RPC解决方案,不过我比较一番,还是选择了JSON格式。比较而言,JSON相对AMF最大的优势就是更灵活,其次则是可以少写不少代码 :)51Testing软件测试网7E?QP:h5P;R#U
cS;F;Z,g0 既然使用JSON,那么对应用程序稍微修改一下。让应用程序在测试模式下返回array,而不是JSON字符串。就可以很方便的对返回数据进行测试了。
V%wr~-_0U%OCslP0 测试使用了PHPUnit的BDD支持,然后增加了一些必要的扩展。一个测试看上去如下:51Testing软件测试网,G9}@C_yJPyCB
51Testing软件测试网`x#{X${eiwx01.class GameActionsTest extends GameActionTestCase51Testing软件测试网*j ],d2j7]7WZQw&N 02.{ T-_n!ZQ
z003. /**51Testing软件测试网~A:l"|9lBE 04. * 游戏初始化 cgO}s"{005. *51Testing软件测试网+J6xhE5G4j8M 06. * 初始化时,要传递下列数据到客户端: #{#]hb?007. * :eArv;l+nr+F008. * ...... Zu@ V/}Hu^)m009. */51Testing软件测试网|P;Lbk i2e 10. function testGameInitAction() _/\9S:Y4|`(u011. { | I_~
S012. $resultSchema = new SchemaValidator(array( rh5z OW\:V
j013. 'player' => array(51Testing软件测试网1f1G@d!MLV6[| 14. 'uid' => IModel::TYPE_INT, +g$e-D;Pa,}0t015. 'name' => IModel::TYPE_STRING,51Testing软件测试网 S2|j2V W8B4qE 16.51Testing软件测试网If\A`|2?$N_6N#H 17. ....51Testing软件测试网&RhiB0HBm 18.51Testing软件测试网A#N0G!Tg1hS"a 19. 'items' => new RepeatSchemaValidator(array(51Testing软件测试网w'`.Ew7p/m*nt 20. 'item_id' => IModel::TYPE_INT, ?Xt ?2h5CZ021. 'type' => IModel::TYPE_INT, kO+]p/e NVQ:C022. 'used' => IModel::TYPE_BOOL, _L!oQ/p~,k T8c023. )),51Testing软件测试网8{UV_8Su 24. ), 4Wvs6ei)|2Wz)Y025. 'ok' => IModel::TYPE_BOOL, $U ]A(JB@6S026. 'current' => IModel::TYPE_INT,51Testing软件测试网tQ"p,bt kQ+e 27. ));51Testing软件测试网eg-s:h2g 28.51Testing软件测试网4uP{{e d 29. $this->given('login');51Testing软件测试网R
s~)I(E,p0Tp 30. $this->when('run game.init'); ,i[jK'aW3[V'i031. $this->then('result is array')51Testing软件测试网%X9wd4CYe6^-`:mL 32. ->and('result schema validate', $resultSchema);51Testing软件测试网7J{][@9X#RQ` 33. }51Testing软件测试网d kW6qG!i N(Z 34.} |
kt)}@U6M0*x&c0~/E-i6I0 测试中,SchemaValidator用于检查服务端返回的数据是否符合指定的格式,以及每一个数据项的类型是否正确。而最后的几行代码则是测试逻辑,对应的中文伪代码如下:51Testing软件测试网f"B*o%sZ4w
51Testing软件测试网+s
}W?{/U])h-H'J01.$this->given('login');51Testing软件测试网@9tp7w.H8y6Z7R,} 02.$this->when('run game.init');51Testing软件测试网.bpo fy$?6kdT 03.$this->then('result is array')51Testing软件测试网,Q&Q
un_q,ALL 04. ->and('result schema validate', $resultSchema); 0}:VI?E\'k o#J%c005.51Testing软件测试网b$P_*H9X:e3T#km 06.伪代码: t:q Cs%Y-ZsK007.51Testing软件测试网ttEL"C I` 08.在 login(登录)后51Testing软件测试网c!g/_*|"n
ec 09.当 run game.init(执行 game.init 动作)时 g(k*ajw010.result is array(执行结果应该是一个数组)51Testing软件测试网u
ee6juw0g l
A(x^ 11.result schema validate(结果的格式应该通过验证) |
51Testing软件测试网5VD;d6Kr!|Q&Qz51Testing软件测试网Hp
}&S_kw p BDD测试相对于单元测试,测试代码本身更具有语义。51Testing软件测试网\:_x2P;v8v_$L n
51Testing软件测试网:K!E ?+j4Tp\OW p 测试结果如下:
5DK4Q*nZ4T0
ybeyb{;v0l,kBFD9oE7H6v0 由于客户端和服务端交换数据时,遵循严格的格式和数据类型要求。因此我们定义了一系列的 schema,用于验证客户端和服务端的数据交换。而这些 schema 可以通过脚本自动转换为相应的测试代码、客户端和服务端的数据验证代码,从而构建出了一个高效的开发和测试环境。
8D.c8K4Qoz0
相关阅读:
- 一种自动化测试脚本运行控制方法 (fishy, 2010-6-23)
- 软件测试管理之工作流程及技能 (fishy, 2010-6-25)
- 如何构建大量的测试数据? (fishy, 2010-6-25)
- 自动化测试实例:用QTP实现WEB页面链接扫描功能 (fishy, 2010-6-28)
- IronRuby - 编写自动化测试脚本 (fishy, 2010-6-28)
- 自动化测试之我见 (fishy, 2010-6-29)
- 自动化测试成功要素 (fishy, 2010-7-01)
- GUI自动化测试框架的研究与实现 (fishy, 2010-7-01)
- 手工测试的局限性 (fishy, 2010-7-02)
- 游戏测试和软件测试的差异 (msnshow, 2010-7-03)
收藏
举报
TAG:
游戏测试
自动化测试