如何运行 并行测试多个设备?
How to run a test on multiple devices in parallel?
无论如何我都无法运行在多台设备上执行一个测试脚本。
我从某个站点提取了一个测试 apk 和测试脚本作为示例,它在应用程序中找到一个文本框,然后在其中输入 "Hello World!",然后脚本就完成了。我现在正在尝试在两个设备上测试脚本。我创建了四个批处理脚本,其中两个 运行 两个具有不同参数的 appium 服务器实例,另外两个 运行 两个具有不同参数(包括功能)的测试脚本实例。
构建批处理文件:
运行-servers.bat
start "Appium Server 1" appium -p 5000 -bp 5100 --session-override
start "Appium Server 2" appium -p 5001 -bp 5101 --session-override
(我不知道--session-override
到底是干什么的,网上没有详细的描述,不管有没有,结果都是一样的)
运行-testscript.bat
start "Test 1" node testing.js 5000 9 Emulator-9 emulator-5554
start "Test 2" node testing.js 5001 7 Emulator-7 emulator-5556
(脚本文件后的额外参数为:
<Port> <Android-Version> <Device Name> <Unique ID>
)
和脚本:
const driver = require("webdriverio");
const args = process.argv;
const caps = {
port: parseInt(args[2]),
capabilities: {
platformName: "Android",
platformVersion: args[3],
deviceName: args[4],
app: "D:/Node/Appium/Test/apk/ApiDemos-debug.apk",
appPackage: "io.appium.android.apis",
appActivity: ".view.TextFields",
automationName: "UiAutomator2",
uniqueID: args[5]
}
};
async function test(caps) {
const client = await driver.remote(caps);
const field = await client.$("android.widget.EditText");
await field.setValue("Hello World!");
const value = await field.getText();
assert.equal(value, "Hello World!");
await client.deleteSession();
}
test(caps);
当我 运行 两个测试实例时,应用程序在两台设备上启动,但在一台设备上它不输入 "Hello World!" 而在另一台设备上输入。无输入设备所在的服务器上也有"ECONNRESET: A server-side error occurred blah-blah"
您需要在 Appium 配置中添加 systemPort。为每个设备使用不同的 systemPort 值(例如,8201、8202 等)。
无论如何我都无法运行在多台设备上执行一个测试脚本。
我从某个站点提取了一个测试 apk 和测试脚本作为示例,它在应用程序中找到一个文本框,然后在其中输入 "Hello World!",然后脚本就完成了。我现在正在尝试在两个设备上测试脚本。我创建了四个批处理脚本,其中两个 运行 两个具有不同参数的 appium 服务器实例,另外两个 运行 两个具有不同参数(包括功能)的测试脚本实例。
构建批处理文件:
运行-servers.bat
start "Appium Server 1" appium -p 5000 -bp 5100 --session-override
start "Appium Server 2" appium -p 5001 -bp 5101 --session-override
(我不知道--session-override
到底是干什么的,网上没有详细的描述,不管有没有,结果都是一样的)
运行-testscript.bat
start "Test 1" node testing.js 5000 9 Emulator-9 emulator-5554
start "Test 2" node testing.js 5001 7 Emulator-7 emulator-5556
(脚本文件后的额外参数为:
<Port> <Android-Version> <Device Name> <Unique ID>
)
和脚本:
const driver = require("webdriverio");
const args = process.argv;
const caps = {
port: parseInt(args[2]),
capabilities: {
platformName: "Android",
platformVersion: args[3],
deviceName: args[4],
app: "D:/Node/Appium/Test/apk/ApiDemos-debug.apk",
appPackage: "io.appium.android.apis",
appActivity: ".view.TextFields",
automationName: "UiAutomator2",
uniqueID: args[5]
}
};
async function test(caps) {
const client = await driver.remote(caps);
const field = await client.$("android.widget.EditText");
await field.setValue("Hello World!");
const value = await field.getText();
assert.equal(value, "Hello World!");
await client.deleteSession();
}
test(caps);
当我 运行 两个测试实例时,应用程序在两台设备上启动,但在一台设备上它不输入 "Hello World!" 而在另一台设备上输入。无输入设备所在的服务器上也有"ECONNRESET: A server-side error occurred blah-blah"
您需要在 Appium 配置中添加 systemPort。为每个设备使用不同的 systemPort 值(例如,8201、8202 等)。