您的位置:首页 > 编程语言 > Java开发

MonkeyTalk Java API 使用教程

2015-08-13 08:12 756 查看


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;

@BeforeClass
public 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");
}

@AfterClass
public 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的官方文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: