class Fastlane::Helper::RunTest
Public Class Methods
run(params)
click to toggle source
# File lib/fastlane/plugin/testdroid_runner/helper/testdroid_runner_helper.rb, line 6 def self.run(params) # source: https://github.com/bitbar/testdroid-api-client-ruby/blob/master/sample/sample.rb user = Helper::TestdroidRunnerHelper.get_user(params) os_config = Helper::TestdroidRunnerHelper.get_os(params) puts("[testdroid] Starting test run with:\napp #{os_config[:extname]}: #{params[:application_file]}\ntest #{os_config[:extname]}: #{params[:test_file]}") # Create project project = user.projects.list.detect { |proj| proj.name.casecmp(params[:project]) == 0 } # get all the devices to run on device_group = user.device_groups.list.detect { |group| group.display_name.casecmp(params[:device_group]) == 0 } run_devices = device_group.devices.list_all.select { |device| device.os_type.casecmp(os_config[:name]) == 0 } puts("[testdroid] Running on devices #{run_devices.collect(&:display_name)}") # get IDs of the devices id_list = run_devices.collect(&:id) # get the framework id framework_id = user.available_frameworks.list({ filter: os_config[:framework] })[0].id # Upload file puts("[testdroid] Uploading app #{os_config[:extname]}...") file_app = Helper::TestdroidRunnerHelper.upload_file(params[:application_file], params[:access_group]) # instrumentation package puts("[testdroid] Uploading test #{os_config[:extname]}...") file_test = Helper::TestdroidRunnerHelper.upload_file(params[:test_file], params[:access_group]) i = 0 until id_list[i, i + params[:concurrency] * 2].nil? list = id_list[i, i + params[:concurrency] * 2] i += params[:concurrency] * 2 # start test run test_run = user.runs.create("{\"osType\": \"#{os_config[:name]}\", \"projectId\": #{project.id}, \"frameworkId\":#{framework_id}, \"deviceIds\": #{list}, \"scheduler\": \"#{params[:scheduler] || 'SERIAL'}\", \"timeout\": \"#{params[:timeout]}\", \"files\": [{\"id\": #{file_app.id}, \"action\": \"INSTALL\" }, {\"id\": #{file_test.id}, \"action\": \"RUN_TEST\" }]}") puts("[testdroid] Started test run, access it using this link: https://cloud.bitbar.com/#testing/projects/#{project.id}/#{test_run.id}") # wait until the whole test run is completed next unless params[:wait_complete] until test_run.refresh.state == "FINISHED" print(".") sleep(20) end print("\n") puts("[testdroid] Test run finished with success ratio: #{test_run.success_ratio * 100}% [executed:#{test_run.execution_ratio * 100}%]") # download all files from all device sessions next unless params[:report_dir] puts("[testdroid] Downloading files...") test_run.device_sessions.list_all().each { |tr| begin downloaded_file = "#{params[:report_dir]}/#{tr.id()}.zip" user.instance_variable_get(:@client) .download("/cloud/api/v2/me/device-sessions/#{tr.id()}/output-file-set/files.zip", downloaded_file) puts("[testdroid] Downloaded file for #{tr.device["displayName"]} (device session #{tr.id()}) as #{downloaded_file}") rescue puts("[testdroid] No files available for #{tr.device["displayName"]} (device session #{tr.id()})") end } puts("[testdroid] All files downloaded") end ensure puts("[testdroid] Cleaning up...") file_app.delete unless file_app.nil? file_test.delete unless file_test.nil? end