MonkeyTalk Java API 使用教程
来源:互联网 发布:尼姆连森 知乎 编辑:程序博客网 时间:2024/06/05 15:35
MonkeyTalk简介
简单来说,MonkeyTalk是一个移动端的自动化测试框架,支持Android,iOS,Webapp的功能自动化测试。用户既可以使用MonkeyTalk集成开发环境进行测试步骤的录制回放,也可以使用Java API编写测试脚本进行自动化测试。详细介绍可以参考访问MonkeyTalk的官方网站。这里,我们主要介绍如何使用MonkeyTalk的Java API进行自动化测试。
前提知识
使用MonkeyTalk Java API要求你熟悉Java开发和Junit测试。
使用指导
首先你需要下载一个MonkeyTalk的开发包,并从其中的Java目录下提取出monkeytalk-java-all-in-one.jar文件。这个架包包含了MonkeyTalk的Java API和一起其他需要用到的架包。
然后,你可以在你Eclipse或者Android studio等你熟悉的开发环境中建立一个java工程,并将上述架包连同Junit一起导入到工程中。下图是一个Eclipse中工程目录的截图。
接下来,我们建立一个测试工程,下面是一个基于MonkeyTalk API编写的自动化测试脚本。
import java.io.File;import java.io.IOException;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;import com.gorillalogic.monkeytalk.java.MonkeyTalkDriver;import com.gorillalogic.monkeytalk.java.api.Application;public class LoginTest { private static MonkeyTalkDriver mt; private Application app; @BeforeClass public static void beforeClass() throws IOException { mt = new MonkeyTalkDriver(new File("."), "iOS"); mt.setThinktime(500); mt.setTimeout(5000); } @Before public void before() { app = mt.app(); } @Test public void testLogin() { app.input("username").enterText("fred"); app.input("password").enterText("pass"); app.button("LOGIN").tap(); }}
在@BeforeClass的注解方法中,我们启动MonkeyTalkDriver并连接到一个iOS设备上app。在@Before的注解方法中,我们获取被测的应用程序。然后我们在test方法中编写测试步骤的脚本。接下来我们就可以通过Junit运行我们的测试代码。在Eclipse中,右键点击*Run As > JUnit Test*即可运行。当然,在此之前你要在手机或者模拟器上启动你的待测app。
关于MonkeyTalkDriver
Monkeytalk类开启了一个连接电脑和运行在移动设备上的被测app的接入点。我们可以通过如下的方式配置连接的设备类型。
MonkeyTalkDriver mt = new MonkeyTalkDriver(new File("."), "iOS");
第一个参数是保存截屏或者外包脚本的目录。第二个参数是agent的类型,可以是iOS(对于真机和模拟器),Android(对于通过wifi连接的真机),AndroidEmulator(对于模拟器或者usb连接的真机)。
如果是通过iOS真机连接测试,你必须保证你的设备和电脑在同一个wifi网段上可以通过如下的方式连接:
MonkeyTalkDriver mt = new MonkeyTalkDriver(new File("."), "iOS", "123.456.78.90");
如果是运行在Android真机上的应用程序,我们可以通过下面的方式连接:
MonkeyTalkDriver mt = new MonkeyTalkDriver(new File("."), "AndroidEmulator");mt.setAdb(new File("/path/to/android-sdk/platform-tools/adb"));
当然,MonkeyTalk driver也可以设置其他属性,如timeout或者thinktime。
mt.setTimeout(5000);mt.setThinktime(750);
最后,我们设置一个待测app的入口
Application app = mt.app();
上面的命令初始化了一个待测app的MonkeyTalk连接,因此这部分代码通常放在@Before注解函数中。另一方面,MonkeyTalkDriver在每个测试集中只需要创建一次即可,因此,我们通常将其在@BeforeClass中初始化为一个静态方法。
如何查找MonkeyId
在开始写测试脚本之前,我们先要找到一个UI元素的ID,才能对其进行操作。我们可以通过MonkeyTalk IDE进行录制获取元素ID,也可以通过IDE的Component Tree视图查看当前屏幕的控件树。或者你还可以直接在程序源代码中寻找。根据我的经验,一般第一种方式会更快捷,在这里推荐下。
Action的用法
Action顾名思义是指控件的动作,当我们通过MonkeyId找到一个控件之后,就可以通过Action来指定对该控件的动作,从而完成相应的交互事件。比如我们想要从app中获取页面元素的关键数据来判断是否正确,或者用于后续的操作。这个功能我们可以通过get方法来实现,举个例子,我们获取一个label中显示的文本:
String val = app.label("title").get();
这样,label中的文本就复制给了一个Java变量val,我们可以通过verify方法来判定它:
String val = app.label("title").get();assertThat(val, is("My Title"));
我们也可以将它的值传入其他方法:
String val = app.label("title").get();app.input("description").enterText("The title is: " + val.toLowerCase());
Modifiers的用法
每个java API的action方法,像tap(),enterText(),都可以接受一个map形式的modifiers作为参数。Java API提供一个Mods类来辅助生成该map:
Map<String,String> mods = new Mods.Builder().timeout(3500).thinktime(1000).build();Map<String,String> mods = Mods.of(Mods.TIMEOUT, "3500", Mods.THINKTIME, "1000");
如何生成报告
Java API本身不支持生成报告,但Junit可以用ant等生成xml报告。对于自定义报告,MonkeyTalk Java API提供了一些回调函数,供每个脚本开始或结束的时候调用。具体实现方法,我们可以通过重写一个PlaybackListener接口来实现:
private static StringBuilder report;@BeforeClasspublic static void beforeClass() throws IOException { mt = new MonkeyTalkDriver(new File("."), "iOS"); mt.setThinktime(250); mt.setTimeout(5000); mt.setScriptListener(new PlaybackListener() { @Override public void onScriptStart(Scope scope) { //ignore } @Override public void onScriptComplete(Scope scope, PlaybackResult r) { //ignore } @Override public void onStart(Scope scope) { report.append(scope.getCurrentCommand()); } @Override public void onComplete(Scope scope, Response resp) { report.append("--").append(resp.getStatus()); if (resp.getMessage() != null) { report.append("[").append(resp.getMessage()).append("]"); } report.append('\n'); } @Override public void onPrint(String message) { //ignore } }); report = new StringBuilder("---" + new Date() + "---\n");}@AfterClasspublic static void afterClass() throws IOException { File rpt = new File("custom_report.txt"); Writer out = new OutputStreamWriter(new FileOutputStream(rpt), "UTF-8"); try { out.write(report.toString()); } finally { out.close(); }}
Raw MonkeyTalk
Java API还提供了一个raw()方法用来直接调用MonkeyTalk的命令:
app.raw("Button LOGIN Tap %timeout=123");
总结
上面简单的介绍了Junit中调用MonkeyTalk Java API进行测试的方法,以及介绍了一些API的用法。如果想要了解完整API的介绍和用法,请参考MonkeyTalk Java API的官方文档。
- MonkeyTalk Java API 使用教程
- MonkeyTalk的JavaScript API
- Monkeytalk 使用问题汇总
- Metamap Java Api 使用教程
- API网关使用教程
- API网关使用教程
- video.js使用教程API
- video.js使用教程API
- video.js使用教程API
- video.js使用教程API
- Java Excel API简易教程
- OpenOffice java api UNO 教程
- Java标准教程:Java 2D绘图--第4章 使用Text API
- Java标准教程:Java 2D绘图--第4章 使用Text API
- Java标准教程:Java 2D绘图--第4章 使用Text API
- MonkeyTalk实践
- java Logging API 使用
- java compiler API使用
- 简单编译boost
- OC中的类方法与成员方法
- android service绑定
- 新的旅程 出发!
- B. Amr and The Large Array(Codeforces Round #312 (Div. 2)+找出现次数最多且区间最小)
- MonkeyTalk Java API 使用教程
- 'register_android_system_OsConstants(_JNIEnv*)'解决方案
- leetcode_Maximum Product Subarray
- 面试题6
- 本田CRV被曝轮胎速度级别等同3万元小面包车
- 怎样为孩子30年后做打算。
- codevs1295 N皇后问题 解题报告
- spring4.0整合mongodb3.0.4项目实践(用户验证)
- C. Amr and Chemistry(Codeforces Round #312 (Div. 2) 二进制+暴力)