博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
monkey测试时,通过一个守护app,不断调起被测app(通过包名去调起)
阅读量:7013 次
发布时间:2019-06-28

本文共 4682 字,大约阅读时间需要 15 分钟。

问题:在做安卓随机压力测试时,被测APP经常跑出去,被别的app挡住,此时很可能出现断网,截图也截取了别的应用图,比较影响压力测试。

如何解决上面的问题呢?
思路可以有如下几种:
一,测试执行时,不断采用adb 命令,启动app
二,开发一个app,持续不断调起被测app,通过包名启动它
开发工具:android studio
用处:
1.通过包名启动其它app;
2.自动化测试时,有时候需要保证被测APP处于活动状态,而不是在后台。

代码如下:

package com.ming.t;import android.app.ActivityManager;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.util.List;//login.java主要就是实现login界面的功能public class login extends AppCompatActivity {    private Button TopApp;    public static Context mContext;    EditText appPackage;    String appPackageText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_login);        appPackage=(EditText)super.findViewById(R.id.appPackage);//获取用户输入的包名        TopApp=(Button)findViewById(R.id.TopApp);        TopApp.setOnClickListener(new View.OnClickListener()//侦听登录点击事件                                 {                                     public void onClick(View v)                                     {                                         appPackageText =  appPackage.getText().toString();                                         if(appPackageText == null || appPackageText.equals(""))                                         {                                             Toast.makeText(getApplicationContext(), "包名必须填写", Toast.LENGTH_SHORT).show();//提示包名必须填写                                         }else{                                             int x = 1;                                             while( x < 3600 ) {                                                 System.out.print("value of x : " + x );                                                 x++;                                                 try {                                                     Thread.sleep(1000);//休眠1秒                                                 } catch (InterruptedException e) {                                                     e.printStackTrace();                                                 }                                                 openAppWithPackageName(appPackage.getText().toString());                                                 System.out.print("\n");                                             }                                         }                                     }                                 }        );    }    private void openAppWithPackageName(String packagename) {        // 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等        PackageInfo packageinfo = null;        try {            packageinfo = getPackageManager().getPackageInfo(packagename, 0);        } catch (PackageManager.NameNotFoundException e) {            e.printStackTrace();        }        if (packageinfo == null) {            return;        }        // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent        Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);        resolveIntent.setPackage(packageinfo.packageName);        // 通过getPackageManager()的queryIntentActivities方法遍历        List
resolveinfoList = getPackageManager() .queryIntentActivities(resolveIntent, 0); if (!resolveinfoList.iterator().hasNext()){ return ; } ResolveInfo resolveinfo = resolveinfoList.iterator().next(); if (resolveinfo != null) { // packagename = 参数packname String packageName = resolveinfo.activityInfo.packageName; // 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname] String className = resolveinfo.activityInfo.name; // LAUNCHER Intent Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);//重点是加这个 // 设置ComponentName参数1:packagename参数2:MainActivity路径 ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); //startActivity(intent); mContext = getBaseContext(); mContext.startActivity(intent); } }}

页面布局文件如下:

完成后,app界面如下:

图片描述

转载地址:http://ohqtl.baihongyu.com/

你可能感兴趣的文章
《产品设计与开发(原书第5版)》——3.4 步骤1:确立章程
查看>>
《Adobe Illustrator CS6中文版经典教程(彩色版)》—第1课1.5节探索“控制面板”...
查看>>
MySQL 问题分析:ERROR 1071 : Specified key was too long;max
查看>>
我的友情链接
查看>>
nginx tcp代理
查看>>
Linux日志分析常用命令-备忘
查看>>
sybase笔记 3712错误
查看>>
Zabbix 监控windows服务器监控闪断zabbix_get [12577]: Timeout while executing operatio
查看>>
MicrosoftRemoteDesktop Mac版
查看>>
EXCEL拼sql语句
查看>>
分析称明年第二季度平板出货量超PC
查看>>
Device eth0 has different MAC address than expected, ign
查看>>
DXP,AD不用新建PCB完美解决 Unknown Pin 和Failed to add class member 问题
查看>>
web.xml <context-param>只能放一对<param-name>和<param-value>
查看>>
html测验 --(w3cshool)
查看>>
XP对Win7说:哥们,你的U盘我打不开啊
查看>>
不得不知的Linux服务器性能调优技巧
查看>>
猫和老鼠谈ITIL
查看>>
C#异常处理及心得
查看>>
Nginx 做负载均衡的几种轮询策略
查看>>