Appium 移动扩展包包含一些工具,可以帮助您为 Android 和 iOS 应用程序(本地、web 和混合)执行 Junit 格式的 Appium 移动测试。在本章节中:

关于该工具

包中包含以下工具。

Appium 移动执行器工具

Appium 移动执行器工具能够结合使用 SOAtest 运行的各种其他类型的测试来执行 Junit 格式的 Appium 测试。它支持针对 Android 和 iOS 应用程序(原生、web 和混合)的 Junit 功能测试。测试可以在 Android 模拟器、iOS 模拟器或本机设备(iOS 或 Android)上执行。要测试的特定 OS 版本的支持取决于 Appium 服务器。有关更多信息,请查阅 Appium documentation

您可以设计并执行一个单一的、整体的测试场景,该场景将移动测试编排为更广泛的事件序列的一部分。例如,您可以使用最直观的 SOAtest 界面:

  • 运行一个执行多个操作的场景来设置测试环境或测试数据,
  • 运行单元和服务级别测试,
  • 执行移动测试。

您可以从中提取值,用于验证和/或填充端到端测试场景中涉及的其他工具。

启动 Appium 服务器工具

该工具使用所需的配置自动启动 Node.js 服务器上的 Appium 应用程序。

停止 Appium 服务器工具

此工具自动关闭使用启动 Appium 服务器工具打开的所有服务器实例。

要求

  • 9.10.X 或更高版本的 SOAtest 运行带 Java 8 或更高版本的 Eclipse。
  • 1.6.5 或更高版本的 Appium 服务器。您可以安装 Desktop App ,也可以将 Appium 安装在 Node.js 服务器上
  • Appium 期望您计划运行的测试类型的先决条件和配置。关于更多详情,请查阅 Appium documentation ,尤其是 Setting up the Appium Client
  • 如果您计划与模拟器连接,则 Junit 必须按照 Appium Concepts 或Desired Capabilities documentation中所描述的那样描述所需功能。例如:

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("deviceName", "testDevice");
    capabilities.setCapability("platformVersion", "4.4.2");
    capabilities.setCapability("app", "C:\path\to\application.apk");

    “设备名称”必须始终在工具 UI 和 JUnit 中设置

    这是一个 Appium 要求。其他设置必须在 JUnit 测试本身或工具 UI 中设置。在工具 UI 中指定的设置将覆盖 JUnit 中设置的值。

  • 支持用 3.8.x 和 4 格式的 JUnit 编写 Appium Selenium WebDriver 测试。测试应该根据 Appium 需求编写和配置,如 Running tests 帮助主题所述。

安装指南

可以从 UI 或命令行安装该工具集。

UI 安装指南

  1. 选择 Parasoft> Preferences
  2. 在系统属性首选项页面,单击 Add JARs
  3. 导航到 appiumextensions.jar 文件。
  4. 重启 SOAtest/Virtualize。

命令行安装指南

将 appiumextensions.jar 文件添加到 localsettings 属性文件中的 system.properties.classpath 属性中。例如:

system.properties.classpath=<path to jar>/ appiumextensions.jar

基本配置

需要为要运行测试的特定移动平台设置环境。关于更多详情,请查阅 Appium documentation ,尤其是 requirementssetup

启动 Appium 服务器工具的使用说明

您可以使用添加测试向导将启动 Appium 服务器工具添加为独立版工具 (请查阅 添加项目、.tst 文件和测试套件。将启动 Appium 服务器工具放在测试套件中的 Appium Mobile Executor 工具之前。

Start Appium服务器工具的输出将保存在 <temp>/parasoft/xtest/AppiumServerLog-< timestamp>.txt 的一个临时目录中。

启动 Appium 服务器工具配置

在运行 Appium 之前,必须将该工具配置为在设备或模拟器上启动 Appium。

环境设置

Node.js Installation Directory指定安装 Node.js 的目录。目录应该包含 node.exe(Windows)或 bin/node (Linux 或 Mac)。在Windows上,目录通常是 "C:\Program Files\nodejs"。只需要在 Node.js 不在路径上时配置此设置。
Appium Installation Directory

指定安装 Appium 服务器的目录(不是 Appium Desktop)。

如果您将 Appium 安装到 Node.js 中,则以下目录通常包含服务器:

<APPIUM_DESKTOP_INSTALL>/resources/app/node_modules/appium.

如果您通过安装 Node.js 获得 Appium 服务器,则以下目录通常包含服务器:

%APPDATA%\npm\node_modules\appium (Windows) or /usr/local/lib/node_modules/appium (Linux or Mac).

如果 APPIUM_HOME 未定义并指向有效的 Appium 安装,则不需要此设置。

如果使用 HomeBrew (如 Appium 文档中所述)在 Mac 上安装 Appium,则不需要指定 APPIUM_HOME 或在该字段中输入值。

Port

(Appium flag: --port)

运行 Appium 服务器的端口。默认为 4713
Additional Server Flags (optional)

指定要使用的任何可选 服务器标志

–log server 标记不适用,因为日志会自动重定向到以下文件:

<temp>/parasoft/xtest/AppiumServerLog-< timestamp>.txt

设备设置

Platform Name

(Appium flag: --platform-name)

设备平台的名称。可能的值有 iOSAndroid。必须按照指定的方式输入平台名称(比如, iOS而不是 I OS)。

Platform Version

(Appium flag: --platform-version)

指定平台的版本(比如, 7.14.4)。

Device Name

(Appium flag: --device-name)

对于 iOS,指定模拟设备或物理设备的名称。

对于 Android 物理设备,指定物理设备的名称。如果想要启动模拟的 Android 设备,请使用 Android Virtual Device Name 字段代替。输入设备名或 Android 虚拟设备名,而不是两者都输入。

Android Virtual Device Name

(Appium flag: --avd)

指定要启动的 Android 虚拟设备的名称。输入设备名或 Android 虚拟设备名,而不是两者都输入。

App 设置

App Location

(Appium flag: --app)

为要启动的应用程序指定可执行文件的位置。

Android 的特定配置

如果计划启动 Android 设备,则必须定义 ANDROID_HOME。例如,这个变量可以在 Windows 上设置为 %LOCALAPPDATA%\Android\Sdk" 。 

如果您正在使用插入机器的物理 Android 设备,请指定 Device Name 设置,并保留 Android Virtual Device Name 设置为空。

如果您正在使用模拟的 Android 设备,请指定 Android Virtual Device Name 设置,并保留 Device Name 设置为空。在下面的例子中,启动 Appium 服务器设置是为运行在模拟器上的 Android 测试配置的:

iOS 的特定配置

下面的示例 ~/.bash_profile 将 Node.js 添加到 PATH 中,并基于 OSX 的 Appium 桌面应用程序设置 APPIUM_HOME 变量:

如果 Appium 是与 Appium Homebrew 包管理器一起安装的,并且在路径 /usr/local/bin/appium 上有一个符号链接,则不需要在 Environment Settings 页面中完成 Node.js 安装和 Appium 安装字段。 使用 which appium 命令来验证:

在下面的例子中,启动 Appium 服务器设置是基于 Appium 桌面应用程序为 iOS 应用程序配置的:

您可以使用模拟器和物理设备的 Device Name 设置。始终保留 Android Virtual Device Name 设置为空。

停止 Appium 服务器工具的使用说明

您可以使用添加测试向导将启动 Appium 服务器工具添加为独立版工具(请查阅 添加项目、.tst 文件和测试套件)。将停止 Appium 服务器工具放在 Appium Mobile Executor 之后,并在测试套件中启动 Appium 服务器工具。

如果您想确保即使包含套件中的任何工具失败也能运行该工具,那么您可以将该工具添加为拆卸测试。

此工具不需要配置。它预先配置为关闭使用启动 Appium 服务器工具打开的所有服务器实例。本工具不会关闭以下组件:

  • Android 模拟器或 iPhone 模拟器(因为 Appium 不处理这些操作)。
  • 未使用启动 Appium 服务器工具启动的服务器。

Appium 移动执行器的使用说明

您可以使用添加测试向导将 Appium 移动执行器工具添加为独立的工具(请查阅 添加项目、.tst 文件和测试套件)。

测试的类文件夹或 .jar 文件必须包含您希望执行的 JUnit。其他依赖项可以包含在 jar/folder 中,添加到系统属性中,或者两者都包含。该工具首先查看 jar/folder,然后查看系统属性(如果需要的话)。Appium 服务器需要在 Appium 执行器能够运行任何 Junit 测试之前运行。服务器不会自动启动。

运行单个 JUnit 测试方法

  1. 指定测试的类文件夹或 jar 文件,以及要运行的测试类和测试方法。
  2. (可选)如果要从该工具动态更改 Junit 值,请在 Data 字段中输入以分号分隔的键值对。

您可以使用 Java 的系统属性对象从 Junit 源代码中访问变量。例如:

String lastName = System.getProperty("lastName")

运行类中所有测试方法

  1. 指定测试的类文件夹或 jar 文件,以及测试类。保留 Method 字段为空。
  2. (可选)如果要从该工具动态更改 Junit 值,请在 Data 字段中输入以分号分隔的键值对。

您可以使用 Java 的系统属性对象从 Junit 源代码中访问变量。例如: 

String lastName = System.getProperty("lastName")

审查执行详情

当测试开始时,您的应用程序将在相关的模拟器、仿真器或设备中启动。当测试执行时,您可以观察 simulator/emulator/device,以了解测试操作如何影响应用程序。与 Appium 相关的执行细节将在 Appium 服务器窗口中报告。

查看结果

执行细节和结果将在控制台视图中报告。此外,任何检测到的测试失败都将在质量任务视图中报告:

将 JUnit 测试中的消息报告到控制台

将 JUnit 测试中的消息报告到控制台(例如,用于调试或深入了解执行细节):

Application.showMessage("this displays in the console");

若要访问应用程序上下文,JUnit 需要导入 com.parasoft.api 包。确保将 [install dir]/plugins/com.parasoft.xtest.libs.web_[version]/root/com.parasoft.api.jar 添加到 Java 项目类路径中,以启用该导入。

从 JUnit 测试中检索数据

SOAtest/Virtualize 可以从 Junit 测试和其他 SOAtest/Virtualize 工具中检索数据。您需要配置 Junit,以指示希望存储哪些值,并将适当的工具附加到执行器工具的 Junit 输出。数据将以 XML 格式传递到附加的工具。例如,您可以将数据发送到 DiffXML 断言器XML 数据库 工具。

配置 Junit 输出

在使用 JUnit 输出类型之前,您的 Junit 必须访问应用程序上下文,并在“custom_tool_junit_output”键下的标准 Java 映射中存储所需的值。Appium 移动执行器工具将检查存储映射的应用程序上下文,并将其转换为 XML,并将其传递给该工具的“JUnit Output”输出。映射的键和值必须是字符串。如果希望 Junit 返回一个页面源字符串,请将整个源放到映射中的一个值中(如下面的 example 所示)。

若要访问应用程序上下文,JUnit 需要导入 com.parasoft.api 包。确保将 [install dir]/plugins/com.parasoft.xtest.libs.web_[version]/root/com.parasoft.api.jar 添加到 Java 项目类路径中,以启用该导入。

将数据发送到另一个工具

  1. 右键单击 Appium 移动执行器工具,并从快捷菜单中选择 Add Output
  2. 选择 JUnit Output (左侧)以及要要接收该输出的工具(右侧)。
  3. 单击 Finish

例如

假设您希望获得一个 XML 格式的应用程序布局源,然后将其发送到一个 XML 数据库,这样您就可以从移动应用程序中提取一个值,以便在随后的测试中使用。

通过创建一个 Junit,该 Junit 1)构造一个包含应该发送到 XML 数据库的值的映射,2)将该映射放入应用程序上下文中来启动。映射中的值将被转换成 XML 文档,并传递给任何附加到 Junit 输出的工具:

@org.junit.Test
public void testAccessibilityPage() throws Exception {
  WebElement element = driver.findElement(By.xpath("//android.widget.TextView[1]"));
  element.click();
  // Create map representing name-value pairs for XML
  Map<String, String> map = new HashMap<String, String>();
  // Get App's layout source in XML
  String source = driver.getPageSource();
  // Place source in map with key "source"
  map.put("source", source);
  // Get the Parasoft Scripting Context
  ScriptingContext context = Application.getContext();
  // Place the map in the context with the custom_tool_junit_output
  context.put("custom_tool_junit_output", map);
}

添加一个 Appium 移动执行器工具,该工具配置为接下来运行此测试。给该工具一个 Junit 输出,它将该数据发送到 XML 数据库工具。

在这里,您可以指定要提取哪些值,然后在其他工具中使用它们。注意,映射的内容出现在 XML 文档中的 <root> 元素下面,该元素传递给附加到 Junit 输出的工具。

第三方内容

此工具集包括来自第三方的资源项,如下:

更多的许可详情可在该插件的 licenses 文件夹中获得。

  • No labels