当前位置: 首页 > 文档资料 > Appium 中文文档 >

运行测试

优质
小牛编辑
128浏览
2023-12-01

准备你要测试的应用(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):

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);
{
'platformName': 'iOS',
'platformVersion': '7.1',
'deviceName': 'iPhone Simulator',
'app': myApp
}
{
platformName: 'iOS',
platformVersion: '7.1',
deviceName: 'iPhone Simulator',
app: myApp
}
public static $browsers = array(
array(
    'desiredCapabilities' => array(
        'platformName' => 'iOS',
        'platformVersion' => '7.1',
        'deviceName' => 'iPhone Simulator',
        '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 测试脚本,使用下面的预期功能:

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);
{
'platformName': 'Android',
'platformVersion': '4.4',
'deviceName': 'Android Emulator',
'app': myApp
}
{
platformName: 'Android',
platformVersion: '4.4',
deviceName: 'Android Emulator',
app: myApp
}
public static $browsers = array(
array(
    'desiredCapabilities' => array(
        'platformName' => 'Android',
        'platformVersion' => '4.4',
        'deviceName' => 'Android Emulator',
        'app' => $myApp
    )
)
);

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

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

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

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

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

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

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");
{
'automationName': 'Selendroid',
'platformName': 'Android',
'platformVersion': '2.3',
'deviceName': 'Android Emulator',
'app': myApp,
'appPackage': 'com.mycompany.package',
'appActivity': '.MainActivity'
}
{
automationName: 'Selendroid',
platformName: 'Android',
platformVersion: '2.3',
deviceName: 'Android Emulator',
app: myApp,
appPackage: 'com.mycompany.package',
appActivity: '.MainActivity'
}
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'
    )
)
);

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

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

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

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