Webgame自动化测试之旅

最近两个项目中游荡,首次接触facebook游戏的测试,感触还是很多的。与之前的web2.0的互联网应用相比,webgame的测试更多样,也更加的复杂。留下点Memory,对Webgame进行自动化测试是挑战新的开始。 根据游戏整体架构的不同,在协议测试方面还是可以有很大的发展余地的。比较流行的facebook游戏进行自动化测试的还是比较多的,不过由于游戏UI方面的修改比较的多,所以在一开始选取好的测试方法是很重要的。

  在游戏测试中用的比较多的是类似于按键精灵的这样的方式hook,利用windows api进行屏幕点的操作,以下是比较简单的实现,是通过autoit3对游戏FARMVILLE进行的操作,点击这里下载。

  自动化的实现主要是将FARM中的田地size化,通过在1280x800的屏幕中,进行模拟对屏幕点的操作。实际效果还是很棒的,测试时遇到修改的情况的话可以通过修改excel中FARM的田地参数进行修改。可以使用更多的API进行定时,定点的收割。

  以上提到的是使用windows api半hook的方式进行的自动化测试。

  我们还可以通过真实的tcp,http或者https的协议来进行相关的自动化测试。

  主要看在facebook中的游戏整体架构,使用flash前台通过json或者amf协议进行协议发送的话可以利用python的pyamf或者 perl的amf3解析包解析后进行协议层的自动化测试,这样可以减轻前段UI测试的压力,一般游戏的UI测试用例非常的多,很多涉及购买等操作的可以利 用协议自动化测试进行。

  flash的自动化测试可以分为UI层面的测试及协议层面的测试。

  flash的UI层面的测试:

  UI层面的测试建议在基本UI及核心玩法已经确定的情况下运用,这样比较有实效性,返工率比较低。

  主要实现的手法之前的Jason已经介绍过了,windows hook技术及Browsers本身的特性。

  关于Browers本身的特性,这里需要提下iMacros这个在FF中的插件,iMacros插件版不支持flash的自动化,pro版可以通过代码实现很多的逻辑性操作。

  Pro版实现flash自动化的效果也可分为屏幕定位及元素定位的方法,在整体实现上还是很有效果的。

  flash的协议层面测试:

  协议层面的测试做自动化测试的效果比较好,使用性比较高。主要的做法为,通过各种编程手段及辅助工具(http watch或者charles)来共同实现。

  简单介绍下python下的framework:

  首先需要python的pyamf包,可以通过这里来安装。

  之后我们需要Mechanize包,这是发送http及https包比较easy的类。

  通过已有的python test framework框架将测试用例变量化,最后输出报告格式化,这样整体的测试框架就出来了。

  做协议测试的另一个方面是验证UI无法放松的边界值对后台逻辑的影响,很多游戏的失败就是因为这个原因。

  python的 Pyamf 解析包是对amf协议的解析利器,可以使你轻松的实现类似于对html-text的操作,我们也可以利用Mechanize来进行相应的协议自动化测试。

  Pyamf在协议测试中我们主要需要用到的类有三类:

  1、amf3协议包体类:

  envelope = pyamf.remoting.Envelope(amfVersion=3)

  产生的envelope对象就是之后对你需要传递数据的封装对象。

  2、pyamf amf3协议的转换类:

  message = pyamf.remoting.encode(envelope)

  产生的message 就可以利用urllib2.Request进行传递了。

  3、pyamf amf3协议的解码类:

  res = urllib2.urlopen(req);

  content = res.read();

  content = pyamf.remoting.decode(content)

  这里最后产生的content就是返回amf3整体解析好的数据,可以根据需要将返回值进行解析,返回值可能是list{list{……},”jason”=jason},可以根据需要最后做相应的assert。更多pyamf类相关信息,查询这里。

  之前介绍了如何进行webgame自动化测试的 思路及针对flash进行的自动化测试的框架。在对游戏进行自动化测试的时候,总是会思考大部分的致命BUG都来源于随机的操作,那么我们如何进行这些方 面的自动化测试呢。这时FUZZ模糊的思想又体现到我们的面前,我们可以将需要生成的测试用例交给COMPUTER来自动生成,并且自动执行得到相应的报 告,整体FUZZ模糊测试的概念就比较清晰了。

  我们主要使用的是模糊测试中的自动协议生成测试并与协议测试相结合进行自动化测试。

  利用pairwise的思想进行模糊测试。

  我们需要考虑的模糊因素有以下几点。

  1、各种类型的对象的模糊参数设计,模糊参数默认值。

  2、组合参数对象的顺序模糊。

  3、非正常类型的参数模糊,针对XSS。

  利用设计的用例组合进行穷举算法生成相应的用例。

  以下以最简单的用例做个实例:假设需要参数:”id=12&Goodid=12300&name=jason”。

  针对ID的设计可以为{-65536,-1,0,12,65536},针对Goodid的设计可以为 {-65536,-1,0,12300,65536},针对name的设计可以为{jason,null,None,”",…………},针对参数顺序 {(id,goodid,name),(id,name,goodid)……}

  根据上面的测试用例集合自动产生相应的测试用例,然后进行相应的协议自动化测试。当然这里设计的用例不完善仅供参考思路。

  模糊测试的使用可以借助很多已有的测试用例类,类似之前Jason介绍的sulley一样,它的用例库比较的全,这样测试覆盖率会比较高。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-12-08 07:47:38

Webgame自动化测试之旅的相关文章

QTP自动化测试之VBScript基础

要想使用QTP进行自动化测试,必须了解VBScript这门语言,对于使用过ASP或VB开发的人来说,VBScript已经再熟悉不过了,但是没有接触过VBScript的同学也不要灰心,因为这门语言简单易学. 1. VBScript利器  2. Hello World  3. 数据类型  4. 变量  5. 常数  6. 运算符 1. VBScript利器 子曰:工欲善其事,必先利其器.学习一门语言自然是离不开工具及文档,有好的工具及文档在手,学习起来也会得心应手.在此,我推荐大家一个很不错的编辑工

一个初级码农的测试之旅(一)——初识单元测试

前言 首先说一下我自己--一个码农,准确的讲我是一名在中国最大互联网公司搬砖的初级码农.我不是计算机科班出身,一年前进入公司的时候,从未接触过web开发,没有完整的学习过数据库知识,写不出一条完整的sql语句,甚至不知道js和css到底是怎么控制页面行为和样式的--这样的人为什么可以通过面试?反正不是因为我长得帅. 背景知识 文章最初,先介绍一下我们团队的产品--阿里云持续交付平台(crp.aliyun.com),是一个旨在服务阿里云上众多开发者的持续交付平台(你可能还没听说过,但不妨一试哦),

自动化之旅:选择正确的IT自动化工具

在企业中,老生常谈的"少即是多"通常是正确的,IT也不例外.这意味着寻求使用已有资源响应不断增加的资源需求,效率往往更高.上述方式往往是通过任务自动化以及使用脚本.批处理任务简化流程来实现的.尽管这些方式对单个系统或任务很有效,但应用范围有限,因为通常无法超出单个系统的限制.为使IT行业继续满足业务需求,脚本化必须发展为能够跨越多个系统的自动化工具. 单个任务自动化仅仅是自动化之旅的第一步.当今的IT基础设施是多个系统的组合,多个系统之间必须无缝交互以使组织能够以令人难以置信的速度运转

python自动化测试之连接几组测试包实例_python

本文实例讲述了python自动化测试之连接几组测试包的方法,分享给大家供大家参考.具体方法如下: 具体代码如下: class RomanNumeralConverter(object): def __init__(self): self.digit_map = {"M":1000, "D":500, "C":100, "L":50, "X":10, "V":5, "I"

python自动化测试之从命令行运行测试用例with verbosity_python

本文实例讲述了python自动化测试之从命令行运行测试用例with verbosity,分享给大家供大家参考.具体如下: 实例文件recipe3.py如下: class RomanNumeralConverter(object): def __init__(self, roman_numeral): self.roman_numeral = roman_numeral self.digit_map = {"M":1000, "D":500, "C"

python自动化测试之setUp与tearDown实例_python

本文实例讲述了python自动化测试之setUp与tearDown的用法,分享给大家供大家参考.具体如下: 实例代码如下: class RomanNumeralConverter(object): def __init__(self): self.digit_map = {"M":1000, "D":500, "C":100, "L":50, "X":10, "V":5, "I

我的软件测试之旅:(3)同期——加入测试自动化小组

刚被派遣到诺基亚不久,确切地说是刚刚结束新员工入职培训的时候,小组长问我对测试自动化是否 感兴趣,我觉得好像蛮酷的,而且还可以被派到北京去参加两天的培训,英国人授课,何乐而不为呢.这个英国人就是Mark Fewster,<Software Test Automation>的作者,这本书被认为是该领域的开山之作,详细地描述了测试自动化相关的所有细节.战略和战术.于是就这样我加入了只有两个人的兼职测试自动化小组,之所以成立这个小组是因为在国外的其他研发中心使用测试自动化的效果非常好,所以要把它引入

我的软件测试之旅:(12)机遇——测试自动化培训师和教练

测试自动化小组尝试过另一款芬兰同事开发的新型框架,名字叫做robotframework,如今已经开源.这个框架本身使用Python语言开发完成,用来开发可接受性测试,是关键字驱动的测试自动化框架,支持多种测试用例的格式,我最喜欢的是使用表格的HTML文件格式.框架非常好用,各方评价都非常高,但是由于核心的开发者都在芬兰,杭州本地需要有人能够进行培训.辅导,才有可能做到快速地推广使用.于是测试自动化小组的同事参加了该框架的高级培训,以及如何进行入门级培训的培训,然后向杭州研发中心的其他同事提供培训

我的软件测试之旅:(10)贡献——开发项流程

开发项流程(Development Item Process) 当时的这个Scrum试点项目身负重任,其中之一就是要探索出在新型的敏捷模式下该使用何种的开 发流程,负责人就是当时的Linux部门经理,而我则捞到了负责测试部分流程的机会.整个试点项目的人员扩张速度不错,4个人的团队维持了好几个迭代,陆续有人加入,新的测试人员在大概是第四个迭代的时候才补充进来,而后逐渐扩张到两三个团队.这样的扩张速度对测试流程的确定来说非常好,一开始我可以只考虑自己的想法,不断地尝试摸索,可以很快地得到反馈然后改进