当前位置: 首页 > 工具软件 > FlexMonkey > 使用案例 >

FlexMonkey实战

淳于烈
2023-12-01

文章来源:http://www.cnblogs.com/raol/p/flexmonkey.html

我的有道云笔记:http://note.youdao.com/share/?id=22b79669c366c65e6bbdc5e541266b8f&type=note


1. 研究FlexMonkey的缘由, 关于自动化测试.


     每一次的迭代都需要大量的回归测试, 测试的点烦了, 开发的懒得点, 导致最后出来的版本BUG繁多, 为了进一步提高软件质量, 但也不能做重复工作,所以咱也研究一下自动化测试吧。
    项目介绍: XXX
    所用技术: Flex4+Java  
    现在主要关注UI, UI部分主要由html+swf文件组成。所以怎么测试呢? 工欲善其事, 必先利其器。那咱就先百度一把看看有哪些工具吧。
    经过搜索Flash Selenium ,Flex UI Selenium,Selenium Flex API,Fluorida、FunFx,FlexMonkey,RIATEST发现这些都是针对Flex进行录制的工具, 但是很多工具已经是昨日黄花, 其中Flash Selenium ,Flex UI Selenium,Selenium Flex API,Fluorida、FunFx,都支持Flex2, Flex3,之后没有再更新, FlexMonkey, QTP,RIATEST 都有Flex4的支持,其中又分,RIATEST只支持对纯Flex或者AIR的测试, 咱页面还有html呢, 先放弃QTP这个比较庞大, 体积就不小,还有一堆vb脚本, 没得选, 暂时先研究FlexMonkey吧。
   
    FlexMonkey官方网站上有5个产品,我这次主要关注了FlexMonkium这款工具,这款工具能与传统的Selenium进行整合,能集成在SeleniumIDE上进行录制网页上所有操作的行为,通过SeleniumIDE导出Junit4的单元测试代码,导出代码后,能加上数据的准备操作,以及验证flex页面上的数据是否准确,此套代码能在SeleniumServer上运行, 客户端需要导入SeleniumRC的Lib,能完好的与持续集成环境整合,导出测试报告。
 
    经过此次的前期调研工作, 发现FlexMonkey挺符合目前项目需要的
    选定工具: FlexMonkey+selenium

 

 

      相关的一些文章:Flex自动化功能测试工具大比拼》, 该文章中介绍了几种专业自动化测试工具。
     
 
2. 认识  FlexMonkium , 下载 FlexMonkium .
    上一篇文章已经确定了目标, 那咱就现在认识一下Flexmonkey,点击进入  官网, 什么,你点了, 还没打开?是的,官网奇慢, 慢如蜗牛, 慢的都怀疑FlexMonkey是不是没钱搞个好点的域名解析供应商, 但又想回来, 或许就天朝慢呢, 不知不觉中打开了, 点击TESTINGTOOLS可以看到这个菜单下有FoneMonkey, FlexMonkey, Flexmonium, 等,点击FlexMonium,点击download按钮, 下载进入如下页面:当然需要先注册。

    点击下载
  • FlexMonkium5.1.1.zip, 下载完之后别忘记安装FlexMonkeyConsole v5.1.1,到此软件准备完毕。为缓解蜗牛速度,
  • 下方附件提供下载已上传至有道:
 
 
2012/7/30 23:23
 
 
3. FlexMonkium介绍.
    打开FlexMonkium5.1.1.zip,可以看到libs, flexmonkium.xpi, user-extensions.js, 到这里不得不讲到selenium, flexmonkium是selenium-IDE的一个插件, 以增加flex的录制功能, selenium-IDE是FireFox的插件, 安装完selenium-IDE与flexMonkium插件后可以看到如图所示:
 
flexMonkium作为selenium-IDE的插件, 装完后在selenium-IDE的右上方可以看到Monkey的图标, 第一次你需要配置,如图:
 
点击FlexMonkium, 弹出MonkeyConsole配置地址:
 
到此处FlexMonkium软件配置完成, 现在还是不能录制Flex页面, 此处需要加上monkey和adobe提供的类库,在FlasHBuilder编译参数里加上-locale en_US  -include-libraries "../lib/automation_monkey4.x.swc" "${flexlib}/libs/automation/automation_spark.swc" "${flexlib}/libs/automation/automation.swc" "${flexlib}/libs/automation/automation_agent.swc" "${flexlib}/libs/automation/automation_dmv.swc"
重新编译编译完成后, 用FireFox浏览, 此时你可以进行录制了.
 
    附件: 
    
 
以下是FlexMonkium 遇到的问题的解决方法.
     1.右键行为
        2.自定义组件的事件录制
        3.表格数据的验证
 
4.   FlexMonkium 录制鼠标右键行为.
    在这里特别提出录制鼠标右键行为, 因为默认monkey,是不录制鼠标右键的事件的, 顺着思路往下找, 有很多文章介绍自定义组件的事件的录制, 需要配的东西N多, 所以能避开就避开, 这里介绍一种方法, 经过研究发现, monkey封装了一个事件, 这个事件可以调用Flex页面的属性为public的方法,  在这里可以直接用, 比如你的页面在初始化的时候已经创建菜单 下面是例子: 
    
编译环境: FlashBuilder4.6  FlexMonkey5.1
 
 
1. 在录制的事件中在<UIEvent command="Select" value="test"><arg value="label1"/></UIEvent>之前加入 <CallFunctionMonkeyCommand value="wwwe" prop="automationName" functionName="show" />
即可解决问题.
 
2. 利用js调用函数
在需要调用函数的页面中加入ExternalInterface.addCallback(" showRightClick", showRightClick);
扩展user-extensions.js     
在test方法里调用proc.getString("isCallFlexMethod", new String[] {" showRightClick", "", ""}))即可
 

自动化测试之flexmonkey-页面flex元素识别机制

目前,项目组在做功能自动化的时候使用flexmonkey5对flex元素进行识别。经过研究,Flexmonkey遵循着这样的识别准则:

 

一.默认识别:

1.automationName

2.id

3.monkeyID

 

二.使用其他属性对识别

具体来说,

1.当元素拥有automationName时,默认以automationName来识别一个元素,automationName可以不用指出;

2.没有automationName的情况下,使用id来识别元素;

3.在没有automationName以及id的情况下,使用monkeyID来识别,flexmonkey官方文档建议使用1与2两种方式来识别元素;

4.除了这三个属性以外,还可以使用其他属性来识别元素,要求此属性能唯一标志出该元素。

目前在项目中的实际使用中发现,flex元素的属性存在这样的情况:

1.大多数元素都拥有automationName和id,且automationName与id相同;

2.拥有automationName和id,二者值不同;

3.只拥有automationName或者Id其中之一;

4.没有automationName与id。这种情况下,自动产生monkeyID。

在项目中发现,在同一个parentowner下,存在多个automationName与id都一样的元素时,默认只能识别到第一个元素。这个时候,有两个途径来解决同类元素的识别:

1.使用monkeyID

2.使用其他属性对

 

   现在首先介绍下如何使用monkeyID来识别,使用monkeyID几乎可以识别所有的flex元素。MonkeyID,在以前的版本中叫automationID,是使用automation tree来定位元素的。

MonkeyID的格式:automationowner.classname.number

解释一下,automationowner是父类的名字,classname是该元素的类名,number是该元素在父类下的序数值,默认从1开始,这个也可以从flexmonkey的最新产品看出来,monkeytalk与fonemonkey中,monkeyID的产生就是以#1开始,第一个同类元素是#1,第二个是#2,以此类推。

如果两个元素拥有同样的automationName和id,默认flexmonkey将以automationName来识别元素,这样就会出现识别不到的情况,在这个情况下,因为工具录制不能产生monkeyID,我们就需要手工编写脚本,按照monkeyID的格式,强制使用monkeyID来识别元素。

另外,如果元素有以上三个属性外的唯一属性值,也可以修改下录制的脚本,使用唯一属性值来识别元素。但是这里需要注意,flexmonkey只能使用一个属性对来识别元素,该工具还做不到使用多个属性对识别。

 
5.   FlexMonkium 录制Flex自定义组件.
    自定义组件的解决方法很多, Monkey不厚道, 只说override function get automationValue():Array方法, 不见效果, 加上如下方法
                         override public function getAutomationChildAt(index:int):IAutomationObject 
override public function get numAutomationChildren():int 
override public function getAutomationChildren():Array
即可
 
6. Flex dataGrid 多选
按住shif多选一下示例是选中1-3行
<UIEvent command="SelectIndex" value="dataGrid"><arg value="1"/><arg value="1"/><arg value="0"/></UIEvent>
<UIEvent command="SelectIndex" value="dataGrid"><arg value="3"/><arg value="1"/><arg value="2"/></UIEvent>
按住Ctrl 多选,选第一行和第三行
<UIEvent command="SelectIndex" value="dataGrid"><arg value="1"/><arg value="1"/><arg value="1"/></UIEvent>
<UIEvent command="SelectIndex" value="dataGrid"><arg value="3"/><arg value="1"/><arg value="1"/></UIEvent>
 
7. 取Alert值
<VerifyProperty value=\"Alert\" prop="className" propertyString=\"text\" expectedValue=\"核对的字符\" propertyType=\"equals\"/>
 
6. Flex验证
    这里介绍几个常用的标签:
 
    Verify

    Verify Expression

    VerifyProperty见验证表格所选中的第一行数据的属性的用法

    VerifyGrid获取某个cell用来验证某个cell的值 自己代码搞定吧
        <VerifyGrid  value=\"grid\" row=\"0\" col=\"1\"/>
 
    选中单元格第一行默认的录制没有提供, 得自己写代码
        <UIEvent command=\"SelectIndex\" value=\"grid\"><arg value=\"1 \"/></UIEvent>
 
    验证表格所选中的第一行数据的属性 这个也是要自己代码搞定
          proc.doCommand("getFlexMonkeyValue"
        <VerifyProperty value=\"grid\" propertyString=\"selectedItem.name\" expectedValue=\"w\" propertyType=\"equals\"/>
 
7.   FlexMonkium 结合selenium RC实现自动化.
        此时所有准备工作已全部完成, 这时你可以像使用Selenium-IDE一样.
录制完成后可以选择回放,可以导出JUNIT, 选择导出时需注意, 选择菜单
 
怎么自动化测试
1. 以上都准备就绪后, 打开网站录制操作, 录制完成后导出JUNIT生成java文件, 
 
2. 测试环境搭建: 
准备如下文件列表:
   JDK5
   selenium-server-standalone-2.24.1.jar
   user-extensions.js
   selenium-java-2.24.1.zip
准备测试服务器: windows环境,安装好JDK, linux需运行在窗口模式下, 还需装有firefox浏览器
编译及运行TestCase服务器: windows  或者 linux
3. 启动服务器:
启动selenium-server
输入: java -jar selenium-server-standalone-2.24.1.jar -userExtensions user-extensions.js
4. 测试端TestCase代码需注意的地方: 如下: 
 
Flexmonkey提供的简单的API介绍
1.验证属性
VerifyProperty 标签的使用:
例子:
 
if (proc.getBoolean("isFlexMonkey", new String[] {"<VerifyProperty value=\"grid\" propertyString=\"dataProvider.length\" expectedValue=\"1\" propertyType=\"equals\"/>"})) break; 
 
value: 界面UI中Flex 元素的ID.
propertyString: 界面UI中Flex 元素的属性.
expectedValue: 期望值.
propertyType: 对比类型.
2.验证表格
 
VerifyGrid标签的使用:
 assertEquals("err", "OK,w", proc.doCommand("getFlexMonkeyValue", new String[] {"<VerifyGrid  value=\"grid\" row=\"0\" col=\"1\"/>", ""}));
 
3. 提一下Selenium
在以上代码中用到两种Selenium提供的命令如下:
proc.getBoolean(String commandName, String[] args);
返回验证后的Boolean值.
proc.doCommand(String commandName, String[] args);
返回所定位的元素的String类型的值.
5. 现在你可以尽情的写你的前置条件里的数据, 和做完操作后断言所期望的值.
 
 
8. 关于半自动化
     

附录说明:

1.FlexMonkey官方文档: 官方网站很难打开,提供以下链接.

http://note.youdao.com/share/?id=a5a4881475b3864f459776fdea34d31d&type=note

2.扩展组件加入自动化测试:

http://www.infoq.com/cn/articles/flexmonkey-deep-dive

3. Selenium学习的文档: 
<selenium私房菜>
http://www.cnblogs.com/hyddd/archive/2009/05/30/1492536.html


4.Flex持续集成:

http://note.youdao.com/share/?id=e73ab7201fd66c637887bacf655a76dc&type=note

转载于:https://www.cnblogs.com/raol/p/flexmonkey.html

 类似资料: