十五年测试老手,长期负责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~-_0

U%OCslP0  测试使用了PHPUnit的BDD支持,然后增加了一些必要的扩展。一个测试看上去如下:51Testing软件测试网,G9}@C_yJPyCB

51Testing软件测试网` x#{X${eiwx

01.class GameActionsTest extends GameActionTestCase51Testing软件测试网*j],d2j7]7WZQw&N
02.{
T-_n!ZQ z003.    /**51Testing软件测试网~A:l"|9lBE
04.     * 游戏初始化
cg O}s"{005.     *51Testing软件测试网+J6xhE5G4j8M
06.     * 初始化时,要传递下列数据到客户端:
#{#]hb?007.     *
:eArv;l+nr+F008.     * ......
Zu@ V/}H u^)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;P a,}0t015.                'name'      => IModel::TYPE_STRING,51Testing软件测试网S2|j2VW8B4q E
16.51Testing软件测试网If\A`|2?$N_6N#H
17.                ....51Testing软件测试网&RhiB0HBm
18.51Testing软件测试网A#N0G!Tg1hS"a
19.                'items' => new RepeatSchemaValidator(array(51Testing软件测试网w'`.E w7p/m*nt
20.                    'item_id'   => IModel::TYPE_INT,
?Xt?2h5CZ021.                    'type'      => IModel::TYPE_INT,
kO+]p/eNVQ: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,b tkQ+e
27.        ));51Testing软件测试网eg-s:h2g
28.51Testing软件测试网4uP{{ed
29.        $this->given('login');51Testing软件测试网R s~)I(E,p0Tp
30.        $this->when('run game.init');
,i[j K'aW3[V'i031.        $this->then('result is array')51Testing软件测试网%X9wd4CYe6^-`:mL
32.             ->and('result schema validate', $resultSchema);51Testing软件测试网7J{][@9X#RQ`
33.    }51Testing软件测试网dkW6qG!iN(Z
34.}

kt)}@U6M0

*x&c0~/E-i6I0  测试中,SchemaValidator用于检查服务端返回的数据是否符合指定的格式,以及每一个数据项的类型是否正确。而最后的几行代码则是测试逻辑,对应的中文伪代码如下:51Testing软件测试网 f"B*o%sZ4w

51Testing软件测试网+s }W?{/U])h-H'J

01.$this->given('login');51Testing软件测试网@9tp7w.H8y6Z7R,}
02.$this->when('run game.init');51Testing软件测试网.bpo fy$?6kd T
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#k m
06.伪代码:
t:q C s%Y-Zs K007.51Testing软件测试网t tEL"CI`
08.在 login(登录)后51Testing软件测试网c!g/_*|"n ec
09.当 run game.init(执行 game.init 动作)时
g(k*a jw010.result is array(执行结果应该是一个数组)51Testing软件测试网u ee6ju w0gl A(x ^
11.result schema validate(结果的格式应该通过验证)
51Testing软件测试网5VD;d6Kr!|Q&Qz

51Testing软件测试网Hp }&S_kw p

  BDD测试相对于单元测试,测试代码本身更具有语义。51Testing软件测试网\:_x2P;v8v_$Ln

51Testing软件测试网:K!E ?+j4Tp\OW p

  测试结果如下:

5DK4Q*nZ4T0

ybeyb{;v0

l,kBFD9oE7H6v0  由于客户端和服务端交换数据时,遵循严格的格式和数据类型要求。因此我们定义了一系列的 schema,用于验证客户端和服务端的数据交换。而这些 schema 可以通过脚本自动转换为相应的测试代码、客户端和服务端的数据验证代码,从而构建出了一个高效的开发和测试环境。

8D.c8K4Qoz0

TAG: 游戏测试 自动化测试

 

评分:0

我来说两句

Open Toolbar