我正在建立一个完全成熟的自动化测试套件,该套件使用带有Appium的ruby编写,用于移动自动化。
我在一台机器中的一个模拟器中运行这些套件,需要花费大量时间,大约需要1小时才能运行56个测试用例(我们有系统测试用例,其中集成了多个检查,如数据库/ Api /功能)。我们有更多额外的测试用例增加了我们的方式。
我们已经实现了在3台mac机器上运行我们的测试,目前运行与Jenkins集成的不同黄瓜标签。但是,更多的测试只会花费我们更多的时间或更多的时间。
使用xcode 9,我们可以同时在一台机器上启动多个模拟器,我想知道,如果有任何示例场景或文档如何在一台mac机器上跨模拟器实现分布式测试
我曾尝试使用不同的平台版本加载两个或三个不同的所需功能,但它只按顺序加载测试。
我在网上经历了很多材料,只有在android中实现这一目标的步骤。 iOS支持吗?
或者任何人都可以提供可以帮助我的链接?至 1.在一个mac中跨各种模拟器实现分布式测试 2.使用黄瓜标签分发测试,为每个所需的功能创建实例
更新
我曾尝试实现多线程选项,并尝试使用每个线程启动特定模拟器创建实例的测试。但是,我发现测试不是并行运行而是顺序运行。
这是我的代码:
def start_app(device_id, wdalocalport)
caps_config = {
platformName: "iOS",
wdaLocalPort: wdalocalport,
deviceName: "iPhone Simulator", #update device as per your need
app: (File.join(File.dirname(__FILE__), "Sequoia.app")),
bundleId: "something",
automationName: "XCUITest",
xcodeOrgId: "something",
xcodeSigningId: "iPhone Developer",
#platformVersion: "10.2",
noReset: "true",
fullReset: "false",
showIOSLog: "true",
autoAcceptAlerts: "true",
showXcodeLog: "true",
useNewWDA: "true",
resetOnSessionStartOnly: "true",
udid: device_id }
appium_lib_config={ port: 4723 }
$opts={ caps: caps_config, appium_lib: appium_lib_config }
setup
end
def setup
@appium = Appium::Driver.new($opts)
@appium.start_driver
#Makes all appium_lib methods accessible from steps
#Starts appium driver before the tests begin
end
def test(device1,device2)
threads = []
threads << Thread.new {
start_app(device1, '8100')
}
threads << Thread.new {
start_app(device2, '8200')
}
threads.each(&:join)
end
end
我使用传递test
的{{1}}方法调用启动测试。模拟器同时启动,同时安装应用程序,但测试并不平行。
任何帮助即兴发生这种情况的帮助?
我能够使用udid's
并行运行,但我仍然发现这种方法以顺序方式运行测试或根本不运行
PFB代码
rake
我的def run_cucumber(cucumber_options)
Cucumber::Rake::Task.new do |t|
t.cucumber_opts = cucumber_options
end
Rake::Task[:cucumber].invoke
end
task :iphone_7 do |t|
ENV['DEVICE'] = 'iphone7'
run_cucumber('-r features features/test.feature --format pretty --tags @slave1')
end
task :iphone_8 do |t|
ENV['DEVICE'] = 'iphone8'
run_cucumber('-r features features/test.feature --format pretty --tags @slave2')
end
multitask :all => [:iphone_7,:iphone_8]
hooks.rb
我一直在Before do
check
end
def check
if ENV['DEVICE'] == 'iphone7'
start_app('iPhone6','port','udid')
elsif ENV['DEVICE'] == 'iphone8'
start_app('iphone6','port','udid')
else
puts "Device not"
end
end
。不知道我错过了什么。
答案 0 :(得分:2)
您需要创建一个首先在Rakefile中调用黄瓜耙的方法,如下所示:
columnDef.cellRenderer = KeyRenderer;
columnDef.width = 20;
columnDef.editable = false;
此方法需要cucumber_options。您可以传递与传递命令行相同的选项,如下所示:
import { ICellEditor, ICellEditorParams, ICellRenderer, CellEditorFactory } from 'ag-grid/main';
export class KeyRenderer implements ICellRenderer {
private params: any;
htmlDiv: HTMLDivElement;
init(params) {
this.htmlDiv = document.createElement("div");
this.htmlDiv.style.width = "100%";
this.htmlDiv.style.height = "100%";
this.htmlDiv.style.textAlign = "center";
this.htmlDiv.style.verticalAlign = "middle";
if (params.data.IsKeyField) {
if (params.data.IsKeyField == true) {
this.htmlDiv.innerHTML = "<img src='/images/icon/key.png' style='height:15px'/>";
}
}
}
getGui() {
return this.htmlDiv;
}
refresh(params: any): boolean {
this.params = params;
return true;
}
}
在此之后,在同一个Rakefile中为特定配置定义rake任务:
def run_cucumber(cucumber_options)
Cucumber::Rake::Task.new do |t|
t.cucumber_opts = cucumber_options
end
Rake::Task[:cucumber].invoke
end
这里,ENV [“DEVICE”]用于设备配置。您可以在Before块中的env.rb中使用此变量来初始化测试。在Before块中,您可以根据此环境变量初始化设备。
您可以根据需要创建这样的rake任务。
然后,您可以使用ruby的并行gem同时调用多个任务。示例在此链接中 - &gt; Ruby Parallel gem 只需将不同类型的rake任务作为Parallel对象中的参数传递。 例如:
-r features features/test.feature --format pretty --tags @test1
然后触发run_parallel rake任务来执行整个代码。 例如:
task :iphone_7 do |t|
ENV["DEVICE"] = "iphone 7"
run_cucumber('-r features features/test.feature --format pretty --tags @test1')
end
task :iphone_8 do |t|
ENV["DEVICE"] = "iphone 8"
run_cucumber('-r features features/test.feature --format pretty --tags @test2')
end