运行测试


运行测试

准备你要测试的应用(iOS)

被测应用要在模拟器上运行,就必须针对该模拟器进行专门的编译,例如在 Xcode 项目下执行如下命令(你可以使用 xcodebuild -showsdks 查看可用的 SDK 列表):

> xcodebuild -sdk iphonesimulator6.0

这会在 Xcode 项目下创建一个 build/Release-iphonesimulator 目录,目录中包含 .app 包。你将使用这个包和 Appium server 沟通。

如果需要,可以将应用程序目录压缩到 .zip 文件中!Appium 会帮你解压(如果你使用的不是局部的 Appium)。

准备你要测试的应用(Android)

什么都不用做就可以使用 Appium 运行你的 .apk。如果你想,可以压缩它。

准备你要测试的应用(Windows)

什么都不用做就可以运行你的测试。

在 Appium 上运行你的测试应用(IOS)

想知道当前要做什么,最好的方法就是是查看示例代码:

Node.js | Python | PHP | Ruby | Java

基本上,首先确认 Appium 正在运行:

node .

然后编写你的 WebDriver 测试脚本, 用如下的预期能力(Desired capabilities):

// javascript
{
    platformName: 'iOS',
    platformVersion: '7.1',
    deviceName: 'iPhone Simulator',
    app: myApp
}
# python
{
    'platformName': 'iOS',
    'platformVersion': '7.1',
    'deviceName': 'iPhone Simulator',
    'app': myApp
}
// php
public static $browsers = array(
    array(
        'desiredCapabilities' => array(
            'platformName' => 'iOS',
            'platformVersion' => '7.1',
            'deviceName' => 'iPhone Simulator',
            'app' => $myApp
        )
    )
);
// java
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.1");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
capabilities.setCapability(MobileCapabilityType.APP, myApp);

在这组功能(capabilities)中,myApp 必须是以下的任意一个:

  • 基于对应模拟器编译的 .app 目录或者 zip 文件的绝对路径
  • app 应用包的 zip 文件的 URL
  • 基于 Appium 安装根目录的示例应用程序的相对路径

用你选择的 WebDriver 库,将远程会话(session)设置为使用以上功能,并连接到服务器所监听的 localhost 4723 (或任何在启动 Appium 时指定的主机和端口)。现在你应该全都设置好了!

使用 Appium 测试你的应用(Android)

首先,确保你有且只有一个 Android 模拟器或设备连接。例如,如果你运行 adb devices,你应该只看到一个设备连接。Appium 将使用这个设备进行测试。当然,要连接上一个设备,你需要配置一个 Android AVD。如果你的系统变量 PATH 里有 Android SDK 的工具,你可以简单运行如下命令:

emulator -avd <MyAvdName>

等待 android 模拟器完成启动。有时,由于各种原因,adb 会卡住。如果它没有显示任何已连接的设备或其他故障,你可以重新启动它:

adb kill-server && adb devices

现在,确认 Appium 已在运行:

node .

有几种方法可以启动一个 Appium 应用程序(工作原理与使用 adb 启动应用程序完全相同):

  • 仅用 apk 或 zip,将启动默认 activity('app' capability)
  • apk + activity ('app' + 'appActivity' capabilities)
  • apk + activity + intent ('app' + 'appActivity' + 'appIntent' capabilities)
  • ...

Activity 可以通过以下方式指定:

  • 绝对路径(例如 appActivity: 'com.helloworld.SayHello')。
  • 相对于应用包名(例如 appPackage: 'com.helloworld', appActivity='.SayHello')

如果指定了 appWaitPackageappWaitActivity,Appium 将自动等待,直到这些 Activity 启动。你可以指定等待多个Activity:

  • appActivity: 'com.splash.SplashScreen'
  • appPackage: 'com.splash' appActivity: '.SplashScreen'
  • appPackage: 'com.splash' appActivity: '.SplashScreen,.LandingPage,com.why.GoThere'

如果你不确定你的 apk 中配置了哪些 Activity,你可以在下列方法中选一个进行查看:

  • Mac / Linux:'adb shell dumpsys window windows | grep mFocusedApp'
  • 在 Ruby 控制台中:'adb shell dumpsys window windows`.each_line.grep(/mFocusedApp/).first.strip'
  • 在 Windows 终端运行 'adb shell dumpsys window windows' 然后找到 mFocusedApp

然后编写 WebDriver 测试脚本,使用下面的预期功能:

// javascript
{
    platformName: 'Android',
    platformVersion: '4.4',
    deviceName: 'Android Emulator',
    app: myApp
}
# python
{
    'platformName': 'Android',
    'platformVersion': '4.4',
    'deviceName': 'Android Emulator',
    'app': myApp
}
// php
public static $browsers = array(
    array(
        'desiredCapabilities' => array(
            'platformName' => 'Android',
            'platformVersion' => '4.4',
            'deviceName' => 'Android Emulator',
            'app' => $myApp
        )
    )
);
// java
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability(MobileCapabilityType.APP, myApp);

在这组功能(capabilities)中,myApp 必须是以下任意一个:

  • apk 或者 zip 文件的本地绝对路径
  • 包含 apk 的 zip 文件的 url 链接
  • 示例应用相对于 appium 安装根目录的路径

用你选择的 WebDriver 库,将远程会话(session)设置为使用以上功能,并连接到服务器所监听的 localhost 4723 (或任何在启动 Appium 时指定的主机和端口)。现在你应该全都设置好了!

使用 Appium 运行你的测试程序(Android 设备 < 4.2,和混合测试)

Android 设备在 4.2 版本(API 级别 17)之前没有安装谷歌的 UiAutomator 框架。UiAutomator 是 Appium 用于在设备上执行自动化的部分。对于早期的设备或混合(基于 webview)应用程序,Appium 与另一个名为 Selendroid 自动化后端进行绑定。

要使用 Selendroid,只需稍微改动上述提到的预期功能(Desired capabilities),添加 automationName 并指定 Selendroid 为自动化后端。通常,你还需要在 activity 名前加一个 .(例如,对于 appActivity 这个功能需要使用 .MainActivity 替代 MainActivity)。

// javascript
{
    automationName: 'Selendroid',
    platformName: 'Android',
    platformVersion: '2.3',
    deviceName: 'Android Emulator',
    app: myApp,
    appPackage: 'com.mycompany.package',
    appActivity: '.MainActivity'
}
# python
{
    'automationName': 'Selendroid',
    'platformName': 'Android',
    'platformVersion': '2.3',
    'deviceName': 'Android Emulator',
    'app': myApp,
    'appPackage': 'com.mycompany.package',
    'appActivity': '.MainActivity'
}
// php
public static $browsers = array(
    array(
        'desiredCapabilities' => array(
            'automationName' => 'Selendroid',
            'platformName' => 'Android',
            'platformVersion' => '2.3',
            'deviceName' => 'Android Emulator',
            'app' => $myApp,
            'appPackage' => 'com.mycompany.package',
            'appActivity'=> '.MainActivity'
        )
    )
);
// java
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Selendroid");
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "2.3");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability(MobileCapabilityType.APP, myApp);
capabilities.setCapability(MobileCapabilityType.APP_PACKAGE: "com.mycompany.package");
capabilities.setCapability(MobileCapabilityType.APP_ACTIVITY: ".MainActivity");

现在 Appium 将启动一个 Selendroid 测试会话,而不是默认的测试会话。使用 Selendroid 的缺点之一是,它的某些 API 和 Appium 有显著差异。因此,我们建议你在为旧设备或混合应用程序编写脚本前,彻读 Selendroid文档

使用 Appium 运行你的测试程序(Windows)

只需确保 Appium 正在监听,并使用你选择的测试运行器运行您的测试。

查看我们的 示例 以获取细节。