我正在开发一个 QA 自动化解决方案,可以在 Android 上记录/回放 QA 测试。一个关键的业务要求是在回放记录的测试时不依赖连接的 PC。为此,我正在尝试在没有连接 PC 的情况下运行仪器测试。(特别是 Appium UiAutomator2 测试)。
我目前的方法是尝试从我的应用程序以编程方式运行测试。如果我在连接的 PC 上正常运行测试,我会使用命令adb shell am instrument -w. 我尝试从我的应用程序访问 ADB Shell 并运行am instrument -w,但这会产生一个错误,我缺少 INTERACT_ACROSS_USERS_FULL 权限。
为了解决这个问题,我尝试使用startInstrumentation运行测试。这样就成功开始了测试。但是,测试立即崩溃。经过进一步调查,我将崩溃追溯到 NPE:测试正在尝试检索InstrumentationRegistry.getInstrumentation.getUiAutomation(0),但这会返回 null。
如何以编程方式运行测试并为其提供对所需 UiAutomation 实例的访问权限?
这就是我开始测试的方式:
public void runTest() {
final String pm = getPackageName().replaceFirst(".test$", "");
final InstrumentationInfo info = getInstrumentationInfo(pm);
if (info != null) {
final ComponentName cn = new ComponentName(info.packageName,
info.name);
Bundle arguments = new Bundle();
arguments.putString("class", "io.testim.appiumwrapper.test.AppiumUiAutomator2Server");
//cn = {io.extension.test/android.support.test.runner.AndroidJUnitRunner}
startInstrumentation(cn, null, arguments);
}
}