智能Monkey在指定执行的页面范围内执行方案

    在做移动端稳定性测试的时候,Monkey测试是首选的方案,但是在执行测试过程中也会存在问题。比如说,Monkey测试是随机执行的,如果在执行过程中跳出了要执行的App,打开的系统页面或是其他应用的页面。有的应用有地图页面,debug包的话也会有Debug工具等,直接影响Monkey的执行结果。为了达到测试指定App的效果,希望Monkey在App内的页面上执行,是否有相应的方案呢?

一,修改测试App

   通过在网上调研相关的技术,发现可以通过adb shell am start ActiviyName可以打开指定的页面。但是,出于安全考虑,正常开发的App是不能通过这个命令打开页面的,会报如下错误:

 

   所以需要对被测试的App做修改,请参考:Andoird开发调试时不修改Manifest直接启动任意Activity的方法https://www.jianshu.com/p/54fd9627860a)。经过测试,从gitlab上下载一个可以运行Android App Demo,通过Android Studio打开项目,在app模块的build.gradle文件下的android{}最后添加如下代码:

同时在最后添加:

 

// 启动android:exported="true"Activity
task startExportedTestActivity(type: Exec, dependsOn: 'installDebug') {
    commandLine
'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'cn.easydone.componentizationapp/com.linked.erfli.moduleb.news.NewsListActivity'
}

其中的Activity可以修改成你自己App的Activity。重新打debug安装到手机上,就可以通过adb shell am start打开相应的页面。

二,开发Monkey测试用例

   在做Monkey测试的时候,肯定不能直接使用命令行的方式来执行。需要借助于自动化测试框架,如Appium来进行操作。这样做的好处是:1,可以为Monkey测试做一些准备操作,如构造测试数据,登录被测App等。2,监控Monkey的执行,如对执行过程进行截图,检测当前执行的页面等。
   而要将Monkey在指定的页面下执行,可以按如下思路来处理:

1,设置页面白名单
   通过配置文件或是常量来指定要覆盖的页面白名单,如下所示:
//文件名:Constant.java
//页面Activity白名单

public static String[] actlist={

    "cn.easydone.componentizationapp/cn.easydone.componentizationapp.MainActivity",

    "cn.easydone.componentizationapp/cn.easydone.modulea.LibraryActivity",

    "cn.easydone.componentizationapp/com.linked.erfli.moduleb.news.NewsListActivity"

};

2,检测当前页面是否在白名单中

     检测当前页面是否在白名单中,如果当前页面在白名单中,则继续执行Monkey测试,否则随机打开白名单中的一个页面。实现代码如下:

/**

 * 如果当前页面不是指定的页面,启动app中的页面

 * @param actname

 */

public void startActiviyInApp(String actname){

    //System.out.println("当前页面是:"+actname);

    String[] actlist= Constant.actlist;

    List<String> activitylist= Arrays.asList(actlist);

    //当前页面不是白名单中的页面

    if(!activitylist.contains(actname))

    {

        int actindex=(int)(Math.random()*actlist.length);

        //System.out.println("获取第:"+actindex+"个页面!");

        String cmd = "adb -s " + Udid + " shell am start " + actlist[actindex];

        LocalCommandLine.execute(cmd, 20000, true);

    }

    else

    {

        System.out.println("*****当前页面在指定页面范围中*******");

    }

}

3,异步多线程启动Monkey

       在执行智能Monkey测试的时候,可以通过java编写多线程来进行执行。一个线程执行你设置的Monkey测试,如:

 adb shell monkey -p com.jddl.rbr --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 100000

让Monkey按指定的时间去执行。另外启动一个线程,去检测当前的activity,对应的adb命令是:adb shell dumpsys window | grep mCurrentFocus,处理一下当前获取的页面内容。

      根据你的测试需要,如每间隔3分钟检测一下,调用上面编写的函数,检测当前页面是否在白名单中,如果不在记随机启动白名单的页面,继续执行Monkey测试。从而实现控制Monkey在指定的页面范围中执行。

      稳定性测试在移动端专项中占居重要位置,所以在不少移动测试平台中会集成智能Monkey测试。借助于一定的移动端测试框架,不管是开源的Appium还是公司对移动框架做的二次开发,实现对Monkey测试的封装,异步多线程去执行Monkey测试。结合公司产品的特点,做前置的数据准备,登录,或是其他操作是比较常规的手段。本文介绍了智能Monkey测试的一个使用场景,希望能给你带来帮助。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值