|
一、AutoRunner简介:
自动化黑盒测试工具,完成功能测试、回归测试、每日构建测试、自动回归测试;可支持基于B/S、C/S
架构测试、支持标准windows应用程序测试和.net应用程序测试;使用beanShell为脚本语言、支持手动参数化
和自动参数化、支持java组件;该软件不支持虚拟机安装;
二、功能/模块作用:
1. 扫描JDK/JRE:该软件自带JRE1.6,如用户电脑上安装了autoRunner后又安装了其他JDK版本,则可以
点击此按钮,将该软件所需要的相应文件写入JDK中;
2. 项目管理器:要建脚本,需先建项目,指定目录,下面所建脚本均在此目录下,便于管理;
3. 脚本编辑器:录制完成的脚本大部分需要再次编辑才能正常使用、或更效率的运行;支持单行(//)多
行(/**/)注释;
4. 记录击键:该软件默认不会录制大部分键盘动作,需在点击录制按钮后弹出的对话框中选中“记录击键”
才可,弹框中没有该选项时,需在菜单→设置→勾选“显示录制选项”;(即使记录击键后,键盘有些动作依旧
不能录入,可用ar.inputKey()命令手动添加动作)
5. 记录时间间隔:记录后录制时会出现sleep命令,回放时时间会与录制一直,在某些场合使用(如网页录
制,网页加载需要时间,可手动修改时间);
6. 对象库:保存多有对象详细信息;手动添加的一些命令不能运行时、回放时对象在对象库中没有找到时,
需手动添加对应对象到对象库中;
7. 权重:对象的属性,重要对象是100,不重要0;回放某个对象是时会在对象库中找到该对象进行属性比
较,如果权重为100的属性发生变化则会导致回放失败(如对象窗口大小发生变化),可通过降低权重来使回
放通过;
8. 参数校验:检验在执行某一条命令之后是否达到预期;可手动点“添加校验点”,也可使用check命令;
9. 参数表及循环参数表:使重复的脚本动作参数化,每列即是一次执行,行是每次执行时需的参数;
10. 脚本串联:支持不同脚本文件之间相互调用,命令runScript(“脚本名”);只支持同一项目下脚本,不能互调;
三、实例:
1. 录制自动发送邮件的脚本
脚本录制好后有三个重要文件:.bsh---脚本文件;.xls—参数表文件;.xml—对象库文件;
以下是自动录制的原始脚本,需要进行编辑才能正常回放;
- [html] view plain copy
- ar.startApplication("F:\\Program Files\\Foxmail 7.2\\Foxmail.exe");
-
- ar.window("TFoxMainFrm.UnicodeClass").clickControl("TTBXToolbar_写邮件", 94, 12, "left");
- ar.window("TFoxMainFrm.UnicodeClass").clickControl("TFoxMainFrm.UnicodeClass", 98, 4, "left");
- ar.window("TFoxMainFrm.UnicodeClass").clickControl("TTBXToolbar_写邮件", 42, 13, "left");
- ar.inputKey("Num 5");
- ar.inputKey("Num 5+Num 1");
- ar.inputKey("Num 2");
- ar.inputKey("Num 2+Num 9");
- ar.inputKey("Num 2");
- ar.inputKey("Num 2+Num 6");
- ar.inputKey("Num 7");
- ar.inputKey("Num 1");
- ar.inputKey("Num 1+Num 8");
- ar.inputKey("Shift+2");
- ar.inputKey("Q");
- ar.inputKey("Q");
- ar.inputKey(".");
- ar.inputKey("C");
- ar.inputKey("O");
- ar.inputKey("O+M");
- ar.inputKey("Tab");
- ar.inputKey("Tab");
- ar.inputKey("A");
- ar.inputKey("U");
- ar.inputKey("T");
- ar.inputKey("O");
- ar.inputKey("R");
- ar.inputKey("U");
- ar.inputKey("N");
- ar.inputKey("N");
- ar.inputKey("E");
- ar.inputKey("R");
- ar.inputKey("Shift+-");
- ar.inputKey("T");
- ar.inputKey("T+E");
- ar.inputKey("S");
- ar.inputKey("T");
- ar.inputKey("M");
- ar.inputKey("A");
- ar.inputKey("I");
- ar.inputKey("L");
- ar.inputKey("Backspace");
- ar.inputKey("Backspace");
- ar.inputKey("Backspace");
- ar.inputKey("Backspace");
- ar.inputKey("Shift+-");
- ar.inputKey("M");
- ar.inputKey("A");
- ar.inputKey("A+I");
- ar.inputKey("L");
- ar.inputKey("Tab");
- ar.inputKey("N");
- ar.inputKey("N+I");
- ar.inputKey("H");
- ar.inputKey("A");
- ar.inputKey("O");
- ar.inputKey("Space");
- ar.inputKey("Shift+;");
- ar.inputKey("Enter");
- ar.inputKey("Enter");
- ar.inputKey("Z");
- ar.inputKey("H");
- ar.inputKey("E");
- ar.inputKey("Backspace");
- ar.inputKey("Backspace");
- ar.inputKey("Backspace");
- ar.inputKey("Tab");
- ar.inputKey("Tab");
- ar.inputKey("Z");
- ar.inputKey("H");
- ar.inputKey("E");
- ar.inputKey("Space");
- ar.inputKey("S");
- ar.inputKey("H");
- ar.inputKey("H+I");
- ar.inputKey("Space");
- ar.inputKey("Y");
- ar.inputKey("O");
- ar.inputKey("O+U");
- ar.inputKey("Space");
- ar.inputKey("A");
- ar.inputKey("U");
- ar.inputKey("T");
- ar.inputKey("O");
- ar.inputKey("Caps Lock");
- ar.inputKey("R");
- ar.inputKey("Caps Lock");
- ar.inputKey("U");
- ar.inputKey("N");
- ar.inputKey("N");
- ar.inputKey("E");
- ar.inputKey("R");
- ar.inputKey("Z");
- ar.inputKey("Z+I");
- ar.inputKey("D");
- ar.inputKey("O");
- ar.inputKey("O+N");
- ar.inputKey("N+G");
- ar.inputKey("Space");
- ar.inputKey("F");
- ar.inputKey("F+A");
- ar.inputKey("S");
- ar.inputKey("O");
- ar.inputKey("O+N");
- ar.inputKey("N+G");
- ar.inputKey("Space");
- ar.inputKey("D");
- ar.inputKey("E");
- ar.inputKey("Space");
- ar.inputKey("Y");
- ar.inputKey("O");
- ar.inputKey("O+U");
- ar.inputKey("J");
- ar.inputKey("J+I");
- ar.inputKey("A");
- ar.inputKey("N");
- ar.inputKey("Space");
- ar.inputKey(";");
- ar.window("TFoxComposeForm.UnicodeClass_autorunner_test_mail - 写邮件 15:04:25 已保存").clickContro
- l("TTBXToolbar_发送", 37, 21, "left");
- ar.window("TFoxMainFrm.UnicodeClass").select("TVirtualDrawTree", "AccountUITree", 104, 19, "left");
- ar.window("TFoxMainFrm.UnicodeClass").select("TVirtualDrawTree_2", "VDT", 127, 29, "left");
复制代码
以下是编辑完后的脚本
第14行还可替换为:
但是鼠标点击对对象要求高,建议尽量使用键盘录制快捷键的操作;
2. 编写参数化的自动循环发送邮件脚本
编写完的脚本及注释如下:
脚本执行完会给下面参数表中的每列第一行的邮箱地址发送主题是第二行内容、正文是第三行的邮件;
通过编辑脚本目录下的“auto_foxmail.xls”文件,可批量添加删除修改要发送的邮件地址、主题和正文;
四、附录
命令摘要:
clickControl(“”) 点击窗口中某一对象,
inputKey(“”) 键盘录入
inputString(“”) 键盘输入一串字符
pressKey(“”,””,,,””) 向对象击键(对象名、按键名、x、y、点击方式)
pressString(“”,””,,,””) 向对象输入字符串
dragControl(“”) 拖动对象
dragScreen(,,,,””) 在屏幕上拖拉
clickScreen(x,y,””) 点击屏幕(坐标,坐标,点击方式)
captureScreen() 抓取屏幕
check(“”,””,””) 校验(对象、属性、值)
setValue(“”,””) 设置可输入文本的对象的值(对象名称+值)
setState(“”,””,,,””) 设置对象(单选框)选中与否的状态(对象名、true/false、x、y、点击)后三
可省
setTimeSpan() 设置两条运行命令之间的时间间隔
setStopWhenError() 设置如果运行出错是否立即停止(true/false)
setSynchronizationTime() 设置同步时间
setX() 设置鼠标点击便宜位置(X或Y)
getProperty(“”,””) 得到对象的某个属性(对象名、属性名)
getRectText(“”,,,,) 得到矩形内的文本(对象名,四个坐标)
getStopWhenError() 获取如果运行出错是否立即停止
getSynchronizationTime() 获取同步时间
getTimeSpan() 获取两条运行命令之间的时间间隔
runScript(“”) 脚本串联调用(脚本名)
startApplication(“”,) 执行某个.exe程序(路径,附加值/null)目录需\\分隔
stopRunning() 停止回放
window(“”) 激活窗口并设为前台窗口
activeTitle(“”) 激活窗口(被激活的窗口不需在对象库中)
menu(“”) 激活弹出菜单
Left 单击
doubleLeft 双击
right 右键
middle 中键
select(“”,””,,,””) 点击目录中某个节点,目录间以/r分隔(对象名、路径x、y、点击方式)
collapse(“”,””,,,””) 收起目录中节点
expand(“”,””,,,””) 展开目录中节点
(以下7个命令只在循环参数表中使用)
getFrom(“”) 获取指定参数名的值(参数名)
getParameterDataListFromFile(“”) 从xls表中获取数据列表(表名)
ParameterData xx 预定义好的数据类型(xx为变量名)
ParameterSource(“”) 类名,(路径)
parameterData=xx 预定义好的该数据类型的变量,用于跨脚本数据传递
getParameterDataList 从参数源中获取数据列表
putInto 设置指定参数名的值
手动添加对象到库
方法一:在录制中把鼠标放在对象上,同时按下键盘上ctrl+alt保持一秒左右;
方法二:在对象库中使用“增加对象”,然后进入录制状态,方法同上;
|
|