MonkeyTalk Java API 使用教程

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的官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值