从命令行构建UiAutomator 2.0

3

我希望能通过命令行构建、安装并运行一个UiAutomator项目的测试。

在以前的版本中,我是这样做的:

android create uitest-project -n <project_name> -p <project_path> -t <target_id>
ant build

构建并且然后

adb push <jar_path> /data/local/tmp

安装并最终完成

adb shell uiautomator runtest <jar_name> -c <main_class>

然而,现在我卡在了构建部分

结果是:

-check-env:
  [checkenv] Android SDK Tools Revision 24.1.2                                    
  [checkenv] Installed at C:\Android                                                                                                                             
-build-setup:                                                                   
[getbuildtools] Using latest Build Tools: 22.0.0                                     
    [echo] Resolving Build Target for AndroidExplorerTester...                 
[getuitarget] Project Target:   Android 5.0.1                                   
[getuitarget] API level:        21                                                   
    [echo] ----------                                                               
    [echo] Creating output directories if needed...                                                                                                            
-pre-compile:                                                                                                                                                   
compile:                                                                                                                                                        
-post-compile:                                                                                                                                                  
-dex:                                                                                 
    [dex] input: <test_path>\bin\classes                                                                          
    [dex] Converting compiled files and external libraries into <test_path>\bin\classes.dex...
     [dx] no classfiles specified                                                                                                                             
BUILD FAILED                                                                    
C:\Android\tools\ant\uibuild.xml:198: null returned: 1                                                                                                          
Total time: 1 second             

我不知道自从新版UiAutomator发布以来是否有更好的方法来做这件事。

注意:我不知道这是否重要,但之前我使用的是Eclipse,现在我使用的是IntelliJ(如果您喜欢,也可以使用Android Studio)。

2个回答

4
这里有一种方法适用于那些不想使用gradle而希望使用ant的人。顺便说一下,为什么旧的方法不行的主要原因是uiautomator从其2.0版本开始从独立的测试运行器移动到标准的android“am instrument”测试运行器来进行应用程序测试。这次转变只有一个缺点。现在测试项目应该绑定到一个明确的目标应用程序(请参见第一步中的解决方法)。所以这里有一个计划。
首先,你应该有一个目标项目,为你的测试所设计。实际上,它可以是一个空的应用程序,在应用程序菜单中将不会显示任何内容,在测试期间也不会显示。我已经成功地在Eclipse中创建了一个,而没有在向导中创建任何活动。为了让ant的build.xml工作,请按照以下步骤进行操作。
android update project --target 0 --path %path_to_empty_app%

了解更多关于Android工具的信息,请参考http://developer.android.com/tools/projects/projects-cmdline.html

注意:您可能需要为目标应用程序提供必要的权限,这些权限将传播到测试应用程序。现在测试不是以shell用户权限运行的。

第二步是创建一个测试项目。正如我之前提到的,uiautomator现在已经集成到标准的Android测试方案中。因此,它使用一个标准命令来创建测试应用程序:

android create test-project -m %path_to_target_app% -n %test_app_name% -p %path_to_test_app%

通常的应用程序结构将在%path_to_test_app%中创建,包括ant's build.xml。更多信息请参见http://developer.android.com/tools/testing/testing_otheride.html

第三步:将uiautomator类jar复制到测试应用程序libs中。该jar文件可以从SDK中的\extras\android\m2repository\com\android\support\test\uiautomator\uiautomator-v18\2.1.0或类似位置的*.aar存档中提取。

第四步:将您的测试类*.java放入测试应用程序src文件夹中。请注意在此处uiautomator中的以下更改:

  1. 包重命名为android.support.test.uiautomator而非com.android.uiautomator
  2. UiAutomatorTestCase类已弃用,但保留了兼容性;扩展您的测试类以从InstrumentationTestCase获得UiDevice实例,请使用UiDevice.getInstance(getInstrumentation())

第五步:安装和运行您的测试。简单的方法如下:

cd %path_to_test_app%
:: Here 'ant instrument install' builds and installs both target and test apps.
ant instrument install
ant test

或者最后一行可以修改为:
adb shell am instrument -w %target_app_full_name%.tests/android.test.InstrumentationTestRunner

更多信息请参见http://developer.android.com/reference/android/test/InstrumentationTestRunner.html


2

我终于弄清楚了。

在项目的主文件夹(包含 gradlew.bat 文件)中,从命令行运行以下命令:

build

.\gradlew.bat assembleDebug

在设备上安装:

.\gradlew.bat installDebug

(if you want to run the Release version, just replace "Debug" with "Release". I haven't tested it, but the option exists and I assume it works) 运行:
.\gradlew.bat connectedCheck

如果您想了解其他选项,您可以运行

.\gradlew.bat tasks

额外信息

要以编程方式(Java)执行此操作,请使用Runtime.getRuntime().exec(String command,String[] envp,File dir)。例如:

Runtime.getRuntime().exec(shell_command + " <path_to_test_folder>\gradlew.bat assembleDebug", null, new File(<path_to_test_project>));

其中shell_command取决于操作系统(命令行的命令):

- Windows: cmd /C
- Unix-based: /bin/sh -c

请注意,connectedCheck 无论如何都会构建和安装,因此手动运行命令会浪费一些时间。 - Code-Apprentice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接