问题:在做安卓随机压力测试时,被测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<ResolveInfo> 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);
}
}
}
页面布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.ming.t.login">
<TableLayout
android:layout_width="344dp"
android:layout_height="495dp"
android:layout_centerHorizontal="true"
tools:layout_editor_absoluteY="8dp"
tools:layout_editor_absoluteX="8dp">
<EditText
android:id="@+id/appPackage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/TopApp"
android:layout_alignParentTop="true"
android:layout_toStartOf="@+id/TopApp"
android:ems="10"
android:hint="此处输入APP包名"
android:inputType="textPersonName"
android:text="App包名" />
<Button
android:id="@+id/TopApp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="32dp"
android:text="不断前置此APP"
android:layout_marginTop="13dp"
android:layout_below="@+id/editText"
android:layout_alignParentStart="true"
android:layout_marginStart="8dp" />
</TableLayout>
</android.support.constraint.ConstraintLayout>
完成后,app界面如下: