并行运行 Web、移动或 API 测试
使用 ParallelRunner CLI 工具并行运行多个 UFT One 测试。您可以在移动设备和 Web 浏览器上运行 GUI 测试,也可以运行 API 测试。ParallelRunner 还支持由 GUI 测试调用的 API 测试,反之亦然。
支持在 UFT One 版本 15.0.2 及更高版本上使用 ParallelRunner 运行 API 测试
支持的环境
对于受 Web 插件支持的控件,支持在特定浏览器上进行并行 Web 测试。有关受支持的浏览器的列表,请参阅浏览器参数值的列表。
使用 UFT Mobile 时支持在移动设备上进行并行测试,在本地设备上进行测试时则不支持。
启动并行测试之前
启动并行测试之前,请执行以下操作:
许可证 |
确保许可证支持您的用例。 ParallelRunner 最多支持并行运行四个测试。此外,并行进行桌面 Web 测试需要使用并发许可证服务器。每次 Web 测试运行都会使用一个并发许可证。 |
对 ParallelRunner 端口的访问 | 确保 UFT One 计算机上的防火墙不会阻止由 ParallelRunner 使用的端口 (默认情况下为 50051)。 |
移动 Web 测试 |
如果要测试移动 Web 浏览器,请确保在“移动”选项卡上的“录制和运行设置”中选择正确的浏览器。 有关更多详细信息,请参阅定义设置以测试移动应用程序。 |
Web 测试 |
请记住以下几点: 如果在 ParallelRunner 命令中指定 Web 浏览器,请在运行测试之前启动这些浏览器。这将覆盖在“录制和运行设置”中定义的设置,以及在测试中配置的所有浏览器参数化。 这表示:
|
并行运行测试
ParallelRunner 工具位于“<UFT One 安装文件夹>/bin”目录中。
执行以下操作:
-
关闭 UFT One。ParallelRunner 和 UFT One 不能同时运行。
-
从命令行并行运行测试,以使用以下方法定义测试和环境详细信息:
-
如果使用 .json 文件,则可以通过在测试运行之间创建依赖关系并控制运行的开始时间来同步和控制并行运行。有关详细信息,请参阅使用条件同步并行运行。
使用 ParallelRunner 的运行测试将“快速”模式下运行。有关详细信息,请参阅快速模式。
有关更多详细信息,请参阅:
使用命令行选项定义测试、环境和参数
从命令行运行测试时,请单独使用命令分别运行每个测试。
对于 GUI 测试,如果您为运行提供不同的替代项,则每个命令都会多次运行测试。您可以为以下对象提供替代项:
- 浏览器
- 设备
- 数据表
- 测试参数
要从命令行运行测试,请使用以下各个部分中定义的语法。使用分号 (;) 分隔各个替代项。
ParallelRunner 会根据需要多次运行测试,以测试您提供的替代项的所有组合。
例如:
运行测试三次,为每个浏览器运行一次:
ParallelRunner -t "C:\GUIWebTest" -b "Chrome;IE;Firefox"
运行测试四次,为每个浏览器上的每个数据表运行一次:
ParallelRunner -t "C:\GUIWebTest" -b "Chrome;Firefox" -dt ".\Datatable1.xlsx;.\Datatable2.xlsx"
运行测试 8 次,使用每个数据表和每组测试参数在每个浏览器上测试。
ParallelRunner -t "C:\GUIWebTest" -b "Chrome;Firefox" -dt ".\Datatable1.xlsx;.\Datatable2.xlsx" -tp "param1:value1, param2:value2; param1:value3, param2:value4"
提示: 或者,引用 .json 文件,该文件在单个文件中配置了多个测试。在此文件中,分别配置每个测试运行。有关详细信息,请参阅使用 .json 文件定义测试、环境和参数。
在命令行中,使用以下语法运行每个 Web 测试:
例如:
ParallelRunner -t "C:\GUIWebTest_Demo" -b "Chrome;IE;Firefox" -r "C:\parallelexecution"
如果指定多个浏览器,则测试将运行多次,即在每个浏览器上运行一次。
在命令行中,使用以下语法运行每个移动测试:
例如:
ParallelRunner -t "C:\GUITest_Demo" -d "deviceID:HT69K0201987;manufacturer:samsung,osType:Android,osVersion:>6.0;manufacturer:motorola,model:Nexus 6" -r "C:\parallelexecution"
如果指定多个设备,则测试将运行多次,即在每个设备上运行一次。
等待可用的设备
您可以指示 ParallelRunner 等待合适的设备变得可用,而不是在没有可用设备时立即将测试运行设为失败。为此,请将 -we
选项添加到 ParallelRunner 命令中。
在命令行中,使用以下语法运行每个 API 测试:
例如:
ParallelRunner -t "C:\APITest" -r "C:\API_TestResults"
直接从命令行运行测试时,请使用以下选项。
-
选项名称不区分大小写。
-
使用后跟选项缩写的短划线 (
-
),或者后跟选项全名的双短划线 (--
)。
|
字符串。必填项。 定义要运行的 UFT One 测试所在文件夹的路径。 如果路径中包含空格,则必须用双引号 ("") 将路径引起来。例如: -t ".\GUITest Demo" 不支持在同一路径中存在多个测试。 |
-b
--browsers
|
字符串。可选。支持 Web 测试。 使用分号 (;) 定义多个浏览器。ParallelRunner 会多次运行测试,以在所有指定浏览器上进行测试。 受支持的值包括:
注意:
|
|
字符串。可选。支持移动测试。 使用分号 (;) 定义多个设备。ParallelRunner 会多次运行测试,以在所有指定设备上进行测试。 使用此字符串中的以下属性,定义使用特定设备 ID 的设备,或按功能查找设备:
注: 请勿在此字符串中的逗号、冒号或分号周围额外添加空格。我们建议始终用双引号 ("") 将字符串引起来,以支持任何特殊字符。 例如: –d "manufacturer:apple,osType:iOS,osVersion:>=11.0" |
|
字符串。可选。支持 Web 或移动测试。 定义要用于此测试的数据表的路径。UFT One 将使用您提供的表,而非随测试一起保存的数据表。 使用分号 (;) 定义多个数据表。ParallelRunner 会多次运行测试,以使用所有指定的数据表进行测试。 如果路径中包含空格,则必须用双引号 ("") 将路径引起来。 例如: -dt ".\Data Tables\Datatable1.xlsx;.\Data Tables\Datatable2.xlsx"。 |
-o
|
字符串。可选。 确定测试运行期间和之后在控制台中显示的结果输出。 受支持的值包括:
|
-r
|
字符串。可选。 定义要用于保存测试运行结果的路径。默认情况下,运行结果保存在 %Temp%\TempResults 中。 如果字符串中包含空格,则必须用双引号 ("") 将字符串引起来。例如: - r "%Temp%\Temp Results" |
-rl
|
可选。 包含在命令中,以在测试运行开始时自动打开运行结果。使用 -rr--report-auto-refresh 选项确定测试运行的刷新频率。 有关更多详细信息,请参阅示例 ParallelRunner 响应和运行结果。 |
-rn
|
字符串。可选。 定义报告名称,当您打开并行运行的摘要报告时,该名称将显示在浏览器选项卡中。默认情况下,该名称为 Parallel Report。 自定义此名称,以帮助在同时打开多个报告时区分不同的运行。为此,UFT One 还会为每个报告名称添加时间戳。 如果字符串中包含空格,则必须用双引号 ("") 将字符串引起来。例如: - rn "My Report Title" |
-rr
|
可选。 确定已打开的运行结果文件自动刷新的频率,以秒为单位。 例如: -rr 5 如果未提供整数,则使用默认值: 5 秒 |
--testParameters
|
字符串。可选。支持 Web 和移动测试。 定义用于测试参数的值。提供参数名称-值对的逗号分隔列表。 对于未指定的测试参数,UFT One 将使用在测试自身中定义的默认值。 例如: -tp "param1:value1,param2:value2" 使用分号 (;) 定义多个测试参数集。ParallelRunner 会多次运行测试,以使用所有指定的测试参数集进行测试。 例如: -tp "param1:value1, param2:value2; param1:value3, param2:value4" 如果参数值包含逗号 (,)、分号 (;) 或冒号 (:),请使用后跟双引号的反斜杠 (\") 将值引起来。 例如,如果 TimeParam 的值为 10:00;00,则使用: -tp "TimeParam:\"10:00;00\"" 注: 不能在使用命令行选项的参数值内包含双引号 (")。对于 ParallelRunner 命令,请改为使用 JSON 配置文件。 |
-we
|
可选。支持移动测试。 包含在命令中,以指示每个移动测试运行等待合适的设备变得可用,而不是在没有可用设备时立即设为失败。 |
使用 .json 文件定义测试、环境和参数
运行 ParallelRunner 并直接从命令行引用 .json 配置文件。
在 .json 文件中,您可以:
- 指定多个要并行运行的测试。
- 定义要用于多个运行的多个环境和参数。
要使用 .json 配置文件运行 ParallelRunner,请执行以下操作:
-
在 .json 文件中,为每个测试运行添加单独的行。使用 .json 选项 描述要用于每个运行的环境和参数。
-
使用以下命令行选项在命令行中引用 .json 文件:
-c
字符串。定义 .json 配置文件的路径。
使用以下语法:
ParallelRunner -c <.json 文件路径>
例如:
ParallelRunner -c parallelexecution.json
-
添加其他命令行选项以配置运行结果。有关详细信息,请参阅 -o、-rl 和 -rr。
这些选项是唯一可以与 .json 配置文件一起使用的命令行选项。任何其他命令行选项都将被忽略。
示例 .json 配置文件
以下是示例 .json 配置文件的语法。在此文件中,最后一个测试同时在本地桌面浏览器和移动设备上运行。另请参阅包含同步的示例 .json 配置文件。
{ "reportPath": "C:\\parallelexecution", "reportName":"My Report Title", "waitForEnvironment":true, "parallelRuns": [ { "测试": "C:\\Users\\qtp\\Documents\\Unified Functional Testing", "dataTable": "C:\\Data Tables\\Datatable1.xls", "testParameter":{ "para1":"val1", “ para2”:“ val2” } "reportSuffix": "Samsung_OS_above_6", "env": { "mobile": { "device": { "manufacturer": "samsung", "osVersion": ">6.0", "osType": "Android" } } } }, { "测试": "C:\\Users\\qtp\\Documents\\Unified Functional Testing", "dataTable: "C:\\Data Tables\\Datatable2.xls", "testParameter":{ "para1":"val3", "para2":"val4" } "reportSuffix": "Moto_Nexus_6_OS_equals_7", "env": { "mobile": { "device": { "manufacturer": "motorola", "model": "Nexus 6", "osVersion": "7.0", "osType": "Android" } } } }, { "测试": "C:\\Users\\qtp\\Documents\\Unified Functional Testing", "reportSuffix": "ID_HT69K0201987", "env": { "mobile": { "device": { "deviceID": "HT69K0201987" } } } }, { "测试": "C:\\Users\\qtp\\Documents\\Unified Functional Testing", "reportSuffix": "Web_Chrome", "env": { "web": { "browser": "Chrome" } } } , { "测试": "C:\\Users\\qtp\\Documents\\API Test", "reportSuffix": "API" } , { "测试": "C:\\Users\\qtp\\Documents\\Unified Functional Testing", "dataTable": "C:\\Data Tables\\Datatable3.xls", "reportSuffix": "Mobile_Web", "env": { "web": { "browser": "Chrome" }, "mobile": { "device": { "manufacturer": "motorola", "model": "Nexus 6", "osVersion": "7.0", "osType": "Android" } } } } ] }
在 json 置文件中定义要从命令行引用的以下选项 (区分大小写):
reportPath |
字符串。定义要用于保存测试运行结果的路径。 默认情况下,运行结果保存在 %Temp%\TempResults 中。 |
reportName |
字符串。 定义报告名称,当您打开并行运行的摘要报告时,该名称将显示在浏览器选项卡中。默认情况下,报告名称与 .json 文件名相同。 自定义此名称,以帮助在同时打开多个报告时区分不同的运行。为此,UFT One 还会为每个报告名称添加时间戳。 |
测试 |
字符串。定义要运行的 UFT One 测试所在文件夹的路径。 |
reportSuffix |
字符串。定义要附加到运行结果文件名末尾的后缀。例如,您可能想要添加指示测试运行环境的后缀。 示例: 默认值: "[N]"。此值指示当前结果实例的索引号 (如果同一并行运行中的同一测试存在多个结果)。 注:
|
browser |
字符串。定义在运行 Web 测试时要使用的浏览器。 受支持的值包括:
注意:
|
deviceID |
字符串。为 UFT Mobile 设备实验室中的特定设备定义设备 ID。 注: 如果同时提供了 deviceID 和设备功能属性,则将忽略设备功能属性。 |
manufacturer |
字符串。定义设备制造商。 |
model |
字符串。定义设备型号。 |
osVersion |
字符串。定义设备操作系统版本。 以下之一:
|
osType |
定义设备操作系统。 以下之一:
|
字符串。支持 Web 和移动测试。 定义要用于此测试运行的数据表的路径。UFT One 将使用您提供的表,而非随测试一起保存的数据表。 将 dataTable 定义置于描述相关测试运行的部分中。 |
|
testParameter |
字符串。支持 Web 和移动测试。 定义要用于此测试运行中的测试参数的值。提供参数名称-值对的逗号分隔列表。 例如: "testParameter":{ "para1":"val1", "para2":"val2" } 将 testParameter 定义置于描述相关测试运行的部分中。 如果参数值包含反斜杠 (\) 或双引号 ("),则在相应字符前面添加反斜杠。例如: "para1":"val\"1" 会将值 val"1 分配给参数 para1。 对于未指定的测试参数,UFT One 将使用在测试自身中定义的默认值。 |
waitForEnvironment |
将此选项设置为 |
使用条件同步并行运行
要同步和控制并行运行,可以在测试运行之间创建依赖关系并控制运行的开始时间。(仅在 ParallelRunner 命令中使用 .json 文件时才支持)。
使用条件,测试运行可以执行以下一项或多项操作:
- 等待几秒钟,然后再开始运行。
- 在其他测试运行之后运行。
- 仅在其他测试运行并达到特定状态后才开始。
对于在 .json 文件中定义的每个测试运行,请创建用于控制运行开始时间的条件。使用如下所述的元素在 test 部分下构建条件。
您可以创建以下类型的条件:
- 简单条件,其中包含一个或多个 wait 语句。
- 组合条件,其中包含多个条件和一个用于指定是否必须满足所有条件的 AND/OR 运算符。
下面是提供同步并行运行的示例 .json 配置文件:
{ "reportPath": "C:\\parallelexecution", "reportName": "My Report Title", "waitForEnvironment": true, "parallelRuns": [{ "test": "C:\\Users\\qtp\\Documents\\Unified Functional Testing\\GUITest_Mobile", "testRunName": "1", "condition": { "operator": "AND", "conditions": [{ "waitSeconds": 5 }, { "operator": "OR", "conditions": [{ "waitSeconds": 10, "waitForTestRun": "2" }, { "waitForTestRun": "3", "waitSeconds": 10, "waitForRunStatuses": ["failed", "warning", "canceled"] } ] } ] }, "env": { "mobile": { "device": { "osType": "IOS" } } } }, { "test": "C:\\Users\\qtp\\Documents\\Unified Functional Testing\\GUITest_Mobile", "testRunName": "2", "condition": { "waitForTestRun": "3", "waitSeconds": 10 }, "env": { "mobile": { "device": { "osType": "IOS" } } } }, { "test": "C:\\Users\\qtp\\Documents\\Unified Functional Testing\\GUITest_Mobile", "testRunName": "3", "env": { "mobile": { "device": { "deviceID": "63010fd84e136ce154ce466d79a2ebd357aa5ce2" } } } }] }
使用此 .json 文件运行 ParallelRunner 时,会发生以下情况:
-
测试运行 3 将等待设备 63010fd84e136ce154ce466d79a2ebd357aa5ce2。
-
测试运行 2 将在测试运行 3 结束后等待 10 秒,然后等待可用的 IOS 设备。
-
测试运行 1 将在 ParallelRunner 命令运行之后先等待 5 秒。
接着在测试运行 2 结束或者测试运行 3 达到 failed、warning 或 canceled 状态之后等待 10 秒。
然后会一直等到 IOS 设备可用。
在隔离模式下运行步骤
当并行运行的多个测试具有与相同对象进行交互的相关步骤时,这些步骤可能会相互干扰,并导致并行测试运行中出现错误。
为防止出错,请将这些步骤配置为在隔离模式下运行,以免受到其他并行运行测试的干扰。
在要并行运行的步骤前后加上以下实用程序步骤:
- ParallelUtil.StartIsolatedExecution
- ParallelUtil.StopIsolatedExecution
例如:
ParallelUtil.StartIsolatedExecution
Browser("Advantage Shopping").Page("Google").WebEdit("Search").Click
Dim mySendKeys
set mySendKeys = CreateObject("WScript.shell")
mySendKeys.SendKeys("Values")
ParallelUtil.StopIsolatedExecution
有关更多详细信息,请参阅《UFT One Object Model Reference》中的 ParallelUtil 对象引用。
停止并行执行
要从命令行退出测试运行,请在键盘上按 Ctrl+C。
-
状态为“正在运行”或“待定”(指示尚未完成) 的任何测试将立即停止。
-
对于这些已取消的测试,将不会生成任何运行结果。
示例 ParallelRunner 响应和运行结果
以下代码显示使用 ParallelRunner 运行测试后在命令行中显示的示例响应。
>ParallelRunner -t ".\GUITest_Demo" -d "manufacturer:samsung,osType:Android,osVersion:Any;deviceID:N2F4C15923006550" -r "C:\parallelexecution" -rn "My Report Name"
Report Folder: C:\parallelexecution\Res1
ProcessId, Test, Report, Status
3328, GUITest_Demo, GUITest_Demo_[1], Running -
3348, GUITest_Demo, GUITest_Demo_[2], Pass
在此示例中,运行完成后,以下结果文件将保存在 :\parallelexecution\Res1 目录中:
- GUITest_Demo_[1]
- GUITest_Demo_[2]
parallelrun_results.html 文件将显示所有并行运行测试的结果。浏览器选项卡中的报告名称为 My Report Name。
表中的第一行指示由 ParallelRunner 命令定义的任何规则,后续各行指示结果以及测试期间使用的实际环境。
提示: 对于每个测试运行,单击 HTML 报告 图标可打开特定运行的结果。仅当将 UFT One 配置为生成 HTML 运行结果时才支持此操作。
例如:
注: 该报告将为每个浏览器名称单独提供一列,并且为便于比较浏览器名称,将区分大小写。因此,将为 IE 和 ie 提供单独的列。
修改 ParallelRunner 端口
ParallelRunner 将使用在 parallel.ini 文件 (位于“<UFT One 安装文件夹>/bin>”目录中) 中配置的端口。默认端口为 50051。
如果在此处配置的端口已在其他位置使用,请通过执行以下操作之一进行修改:
-
打开“<UFT One 安装文件夹>/bin/parallel.ini”文件进行编辑,然后修改已配置的端口号。
-
如果您在编辑此文件时遇到权限问题,请在 %ProgramData%\UFT 目录中新建一个名为 parallel.custom.ini 的文件。
添加以下代码:
[Mediator]
Port=<端口号>parallel.custom.ini 文件将覆盖 parallel.ini 文件中的所有配置。
另请参见: