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 安装指南
- 选择 Parasoft> Preferences。
- 在系统属性首选项页面,单击 Add JARs。
- 导航到 appiumextensions.jar 文件。
- 重启 SOAtest/Virtualize。
命令行安装指南
将 appiumextensions.jar 文件添加到 localsettings 属性文件中的 system.properties.classpath 属性中。例如:
system.properties.classpath=<path to jar>/ appiumextensions.jar
基本配置
需要为要运行测试的特定移动平台设置环境。关于更多详情,请查阅 Appium documentation ,尤其是 requirements 和 setup。
启动 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) | 指定要使用的任何可选 服务器标志 。
<temp>/parasoft/xtest/AppiumServerLog-< timestamp>.txt |
设备设置
Platform Name (Appium flag: --platform-name) | 设备平台的名称。可能的值有 iOS 或 Android 。必须按照指定的方式输入平台名称(比如, iOS 而不是 I OS )。 |
---|---|
Platform Version (Appium flag: --platform-version) | 指定平台的版本(比如, 7.1 、 4.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 测试方法
- 指定测试的类文件夹或 jar 文件,以及要运行的测试类和测试方法。
- (可选)如果要从该工具动态更改 Junit 值,请在 Data 字段中输入以分号分隔的键值对。
您可以使用 Java 的系统属性对象从 Junit 源代码中访问变量。例如:
String lastName = System.getProperty("lastName")
运行类中所有测试方法
- 指定测试的类文件夹或 jar 文件,以及测试类。保留 Method 字段为空。
- (可选)如果要从该工具动态更改 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 格式传递到附加的工具。例如,您可以将数据发送到 Diff、 XML 断言器或 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 项目类路径中,以启用该导入。
将数据发送到另一个工具
- 右键单击 Appium 移动执行器工具,并从快捷菜单中选择 Add Output 。
- 选择 JUnit Output (左侧)以及要要接收该输出的工具(右侧)。
- 单击 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 输出的工具。
第三方内容
此工具集包括来自第三方的资源项,如下:
- Appium (Apache License 2.0)
- JUnit (Eclipse Public License 1.0)
更多的许可详情可在该插件的 licenses 文件夹中获得。