bugsnag-maze-runner 7.22.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/bugsnag-print-load-paths +6 -0
- data/bin/download-logs +74 -0
- data/bin/maze-runner +174 -0
- data/bin/upload-app +56 -0
- data/lib/features/scripts/await-android-emulator.sh +11 -0
- data/lib/features/scripts/clear-android-app-data.sh +8 -0
- data/lib/features/scripts/force-stop-android-app.sh +8 -0
- data/lib/features/scripts/install-android-app.sh +15 -0
- data/lib/features/scripts/launch-android-app.sh +38 -0
- data/lib/features/scripts/launch-android-emulator.sh +15 -0
- data/lib/features/steps/android_steps.rb +51 -0
- data/lib/features/steps/app_automator_steps.rb +228 -0
- data/lib/features/steps/aws_sam_steps.rb +212 -0
- data/lib/features/steps/breadcrumb_steps.rb +80 -0
- data/lib/features/steps/browser_steps.rb +93 -0
- data/lib/features/steps/build_api_steps.rb +25 -0
- data/lib/features/steps/document_server_steps.rb +7 -0
- data/lib/features/steps/error_reporting_steps.rb +358 -0
- data/lib/features/steps/feature_flag_steps.rb +190 -0
- data/lib/features/steps/header_steps.rb +72 -0
- data/lib/features/steps/log_steps.rb +29 -0
- data/lib/features/steps/multipart_request_steps.rb +142 -0
- data/lib/features/steps/network_steps.rb +135 -0
- data/lib/features/steps/payload_steps.rb +257 -0
- data/lib/features/steps/proxy_steps.rb +34 -0
- data/lib/features/steps/query_parameter_steps.rb +31 -0
- data/lib/features/steps/request_assertion_steps.rb +186 -0
- data/lib/features/steps/runner_steps.rb +428 -0
- data/lib/features/steps/session_tracking_steps.rb +116 -0
- data/lib/features/steps/trace_steps.rb +206 -0
- data/lib/features/steps/value_steps.rb +119 -0
- data/lib/features/support/env.rb +7 -0
- data/lib/features/support/internal_hooks.rb +207 -0
- data/lib/maze/api/appium/file_manager.rb +29 -0
- data/lib/maze/appium_server.rb +112 -0
- data/lib/maze/assertions/request_set_assertions.rb +97 -0
- data/lib/maze/aws/sam.rb +112 -0
- data/lib/maze/aws_public_ip.rb +53 -0
- data/lib/maze/bugsnag_config.rb +42 -0
- data/lib/maze/checks/assert_check.rb +69 -0
- data/lib/maze/checks/noop_check.rb +34 -0
- data/lib/maze/client/appium/base_client.rb +131 -0
- data/lib/maze/client/appium/bb_client.rb +102 -0
- data/lib/maze/client/appium/bb_devices.rb +127 -0
- data/lib/maze/client/appium/bs_client.rb +91 -0
- data/lib/maze/client/appium/bs_devices.rb +141 -0
- data/lib/maze/client/appium/bs_legacy_client.rb +31 -0
- data/lib/maze/client/appium/local_client.rb +67 -0
- data/lib/maze/client/appium.rb +23 -0
- data/lib/maze/client/bb_api_client.rb +102 -0
- data/lib/maze/client/bb_client_utils.rb +181 -0
- data/lib/maze/client/bs_client_utils.rb +168 -0
- data/lib/maze/client/selenium/base_client.rb +15 -0
- data/lib/maze/client/selenium/bb_browsers.yml +188 -0
- data/lib/maze/client/selenium/bb_client.rb +38 -0
- data/lib/maze/client/selenium/bs_browsers.yml +257 -0
- data/lib/maze/client/selenium/bs_client.rb +89 -0
- data/lib/maze/client/selenium/local_client.rb +16 -0
- data/lib/maze/client/selenium.rb +16 -0
- data/lib/maze/compare.rb +161 -0
- data/lib/maze/configuration.rb +182 -0
- data/lib/maze/docker.rb +147 -0
- data/lib/maze/document_server.rb +46 -0
- data/lib/maze/driver/appium.rb +198 -0
- data/lib/maze/driver/browser.rb +124 -0
- data/lib/maze/errors.rb +52 -0
- data/lib/maze/generator.rb +55 -0
- data/lib/maze/helper.rb +122 -0
- data/lib/maze/hooks/appium_hooks.rb +55 -0
- data/lib/maze/hooks/browser_hooks.rb +15 -0
- data/lib/maze/hooks/command_hooks.rb +9 -0
- data/lib/maze/hooks/error_code_hook.rb +49 -0
- data/lib/maze/hooks/hooks.rb +61 -0
- data/lib/maze/http_request.rb +21 -0
- data/lib/maze/interactive_cli.rb +173 -0
- data/lib/maze/logger.rb +86 -0
- data/lib/maze/macos_utils.rb +14 -0
- data/lib/maze/maze_output.rb +88 -0
- data/lib/maze/network.rb +49 -0
- data/lib/maze/option/parser.rb +240 -0
- data/lib/maze/option/processor.rb +130 -0
- data/lib/maze/option/validator.rb +155 -0
- data/lib/maze/option.rb +62 -0
- data/lib/maze/plugins/bugsnag_reporting_plugin.rb +49 -0
- data/lib/maze/plugins/cucumber_report_plugin.rb +101 -0
- data/lib/maze/plugins/error_code_plugin.rb +21 -0
- data/lib/maze/plugins/global_retry_plugin.rb +38 -0
- data/lib/maze/proxy.rb +114 -0
- data/lib/maze/request_list.rb +87 -0
- data/lib/maze/request_repeater.rb +49 -0
- data/lib/maze/retry_handler.rb +67 -0
- data/lib/maze/runner.rb +149 -0
- data/lib/maze/schemas/OtelTraceSchema.json +390 -0
- data/lib/maze/schemas/trace_schema.rb +7 -0
- data/lib/maze/schemas/trace_validator.rb +98 -0
- data/lib/maze/server.rb +251 -0
- data/lib/maze/servlets/base_servlet.rb +27 -0
- data/lib/maze/servlets/command_servlet.rb +47 -0
- data/lib/maze/servlets/log_servlet.rb +64 -0
- data/lib/maze/servlets/reflective_servlet.rb +70 -0
- data/lib/maze/servlets/servlet.rb +199 -0
- data/lib/maze/servlets/temp.rb +0 -0
- data/lib/maze/servlets/trace_servlet.rb +13 -0
- data/lib/maze/store.rb +15 -0
- data/lib/maze/terminating_server.rb +129 -0
- data/lib/maze/timers.rb +51 -0
- data/lib/maze/wait.rb +35 -0
- data/lib/maze.rb +27 -0
- data/lib/utils/deep_merge.rb +17 -0
- data/lib/utils/selenium_money_patch.rb +17 -0
- metadata +451 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 25918b6a96c58be96023fec6acae1dca6463db11c722fe9ef612f1faa1137f48
|
4
|
+
data.tar.gz: 68af4db3ee29db253541685361060a0b969371752a22c7c7e7e78bfd51c7dc31
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5734aa0594c7286ebe127cb4261b0d029f7241a88c090eea5c52a059459e3f7deed26a3fc14d754155ae8d1000b5001d65b3b903e2d98822ccc6cf7a824573e4
|
7
|
+
data.tar.gz: 91d4e5a297ec91c2f71bc2f023632eab9c328fe70bcd61bf511f8eab688b7e85c4cba8a9d5dc5ccec3017a2240daee180f6c0364db490e71376389f77cc5a45f
|
data/bin/download-logs
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative '../lib/maze'
|
5
|
+
require_relative '../lib/maze/client/bs_client_utils'
|
6
|
+
require_relative '../lib/maze/logger'
|
7
|
+
require 'net/http'
|
8
|
+
require 'json'
|
9
|
+
require 'uri'
|
10
|
+
require 'optimist'
|
11
|
+
require 'fileutils'
|
12
|
+
|
13
|
+
class DownloadLogEntry
|
14
|
+
def start(args)
|
15
|
+
p = Optimist::Parser.new do
|
16
|
+
text 'Download device sessions logs from BrowserStack using the build ID'
|
17
|
+
text ''
|
18
|
+
text 'Requires BROWSER_STACK_USERNAME and BROWSER_STACK_ACCESS_KEY'
|
19
|
+
text ''
|
20
|
+
text 'Usage [OPTIONS] <filenames>'
|
21
|
+
text ''
|
22
|
+
opt :help,
|
23
|
+
'Print this help.'
|
24
|
+
opt :build_id,
|
25
|
+
"ID of the BrowserStack build",
|
26
|
+
:type => :string
|
27
|
+
end
|
28
|
+
|
29
|
+
opts = Optimist::with_standard_exception_handling p do
|
30
|
+
raise Optimist::HelpNeeded if ARGV.empty? # show help screen
|
31
|
+
p.parse ARGV
|
32
|
+
end
|
33
|
+
|
34
|
+
# Get browserstack username and access key from the environment
|
35
|
+
username = ENV['BROWSER_STACK_USERNAME']
|
36
|
+
access_key = ENV['BROWSER_STACK_ACCESS_KEY']
|
37
|
+
|
38
|
+
# Check if BROWSER_STACK_USERNAME or BROWSER_STACK_ACCESS_KEY has been set
|
39
|
+
if username.nil? || access_key.nil?
|
40
|
+
$logger.warn "BROWSER_STACK_USERNAME or BROWSER_STACK_ACCESS_KEY has not been set"
|
41
|
+
Optimist::with_standard_exception_handling p do
|
42
|
+
raise Optimist::HelpNeeded
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
build_info = Maze::Client::BrowserStackClientUtils.build_info username,
|
48
|
+
access_key,
|
49
|
+
opts[:build_id]
|
50
|
+
|
51
|
+
$logger.info "Getting logs for build: #{opts[:build_id]}"
|
52
|
+
|
53
|
+
build_info.each_with_index do |session, index|
|
54
|
+
$logger.info "Downloading Device Logs for Session: #{index + 1} to #{Dir.pwd}/maze_output"
|
55
|
+
|
56
|
+
log_name = "#{opts[:build_id]}-#{index + 1}"
|
57
|
+
|
58
|
+
Maze::Client::BrowserStackClientUtils.download_log username,
|
59
|
+
access_key,
|
60
|
+
log_name,
|
61
|
+
session['automation_session']['device_logs_url'],
|
62
|
+
:device
|
63
|
+
|
64
|
+
$logger.info "Downloading Appium Logs for Session: #{index + 1}"
|
65
|
+
Maze::Client::BrowserStackClientUtils.download_log username,
|
66
|
+
access_key,
|
67
|
+
log_name,
|
68
|
+
session['automation_session']['appium_logs_url'],
|
69
|
+
:appium
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
DownloadLogEntry.new.start(ARGV)
|
data/bin/maze-runner
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'cucumber/cli/main'
|
5
|
+
|
6
|
+
require_relative '../lib/utils/deep_merge'
|
7
|
+
|
8
|
+
require_relative '../lib/maze'
|
9
|
+
|
10
|
+
require_relative '../lib/maze/appium_server'
|
11
|
+
require_relative '../lib/maze/api/appium/file_manager'
|
12
|
+
require_relative '../lib/maze/bugsnag_config'
|
13
|
+
require_relative '../lib/maze/client/bb_api_client'
|
14
|
+
require_relative '../lib/maze/client/bb_client_utils'
|
15
|
+
require_relative '../lib/maze/client/bs_client_utils'
|
16
|
+
require_relative '../lib/maze/client/appium'
|
17
|
+
require_relative '../lib/maze/client/appium/base_client'
|
18
|
+
require_relative '../lib/maze/client/appium/bb_client'
|
19
|
+
require_relative '../lib/maze/client/appium/bb_devices'
|
20
|
+
require_relative '../lib/maze/client/appium/bs_client'
|
21
|
+
require_relative '../lib/maze/client/appium/bs_legacy_client'
|
22
|
+
require_relative '../lib/maze/client/appium/bs_devices'
|
23
|
+
require_relative '../lib/maze/client/appium/local_client'
|
24
|
+
require_relative '../lib/maze/client/selenium'
|
25
|
+
require_relative '../lib/maze/client/selenium/base_client'
|
26
|
+
require_relative '../lib/maze/client/selenium/bb_client'
|
27
|
+
require_relative '../lib/maze/client/selenium/bs_client'
|
28
|
+
require_relative '../lib/maze/client/selenium/local_client'
|
29
|
+
require_relative '../lib/maze/aws_public_ip'
|
30
|
+
require_relative '../lib/maze/compare'
|
31
|
+
require_relative '../lib/maze/docker'
|
32
|
+
require_relative '../lib/maze/document_server'
|
33
|
+
require_relative '../lib/maze/errors'
|
34
|
+
require_relative '../lib/maze/generator'
|
35
|
+
require_relative '../lib/maze/helper'
|
36
|
+
require_relative '../lib/maze/http_request'
|
37
|
+
require_relative '../lib/maze/logger'
|
38
|
+
require_relative '../lib/maze/macos_utils'
|
39
|
+
require_relative '../lib/maze/maze_output'
|
40
|
+
require_relative '../lib/maze/network'
|
41
|
+
require_relative '../lib/maze/proxy'
|
42
|
+
require_relative '../lib/maze/retry_handler'
|
43
|
+
require_relative '../lib/maze/request_repeater'
|
44
|
+
require_relative '../lib/maze/runner'
|
45
|
+
require_relative '../lib/maze/terminating_server'
|
46
|
+
|
47
|
+
require_relative '../lib/maze/servlets/base_servlet'
|
48
|
+
require_relative '../lib/maze/servlets/command_servlet'
|
49
|
+
require_relative '../lib/maze/servlets/servlet'
|
50
|
+
require_relative '../lib/maze/servlets/log_servlet'
|
51
|
+
require_relative '../lib/maze/servlets/trace_servlet'
|
52
|
+
require_relative '../lib/maze/servlets/reflective_servlet'
|
53
|
+
require_relative '../lib/maze/server'
|
54
|
+
|
55
|
+
require_relative '../lib/maze/assertions/request_set_assertions'
|
56
|
+
|
57
|
+
require_relative '../lib/maze/schemas/trace_schema'
|
58
|
+
require_relative '../lib/maze/schemas/trace_validator'
|
59
|
+
|
60
|
+
require_relative '../lib/maze/store'
|
61
|
+
require_relative '../lib/maze/timers'
|
62
|
+
|
63
|
+
require_relative '../lib/maze/checks/noop_check'
|
64
|
+
require_relative '../lib/maze/checks/assert_check'
|
65
|
+
|
66
|
+
require_relative '../lib/maze/option'
|
67
|
+
require_relative '../lib/maze/option/parser'
|
68
|
+
require_relative '../lib/maze/option/processor'
|
69
|
+
require_relative '../lib/maze/option/validator'
|
70
|
+
|
71
|
+
|
72
|
+
require_relative '../lib/maze/hooks/hooks'
|
73
|
+
require_relative '../lib/maze/hooks/appium_hooks'
|
74
|
+
require_relative '../lib/maze/hooks/browser_hooks'
|
75
|
+
require_relative '../lib/maze/hooks/command_hooks'
|
76
|
+
require_relative '../lib/maze/hooks/error_code_hook'
|
77
|
+
|
78
|
+
require_relative '../lib/maze/driver/appium'
|
79
|
+
require_relative '../lib/maze/driver/browser'
|
80
|
+
|
81
|
+
require_relative '../lib/maze/plugins/bugsnag_reporting_plugin'
|
82
|
+
require_relative '../lib/maze/plugins/cucumber_report_plugin'
|
83
|
+
require_relative '../lib/maze/plugins/error_code_plugin'
|
84
|
+
require_relative '../lib/maze/plugins/global_retry_plugin'
|
85
|
+
|
86
|
+
# Require monkey-patches after everything else
|
87
|
+
require_relative '../lib/utils/selenium_money_patch'
|
88
|
+
|
89
|
+
# Encapsulates the MazeRunner entry point
|
90
|
+
class MazeRunnerEntry
|
91
|
+
|
92
|
+
# Removes Maze Runner specific args from the array, as these will cause Cucumber to error.
|
93
|
+
def remove_maze_runner_args
|
94
|
+
Maze::Option.constants.each do |opt|
|
95
|
+
name = Maze::Option.const_get(opt)
|
96
|
+
@args.reject! { |arg| arg == "--#{name}" || (arg.start_with? "--#{name}=") || arg == "--no-#{name}" }
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Adds arguments to Cucumber
|
101
|
+
def add_cucumber_args
|
102
|
+
@args << 'features' if @args.empty?
|
103
|
+
@args << '--publish-quiet'
|
104
|
+
@args << '--color'
|
105
|
+
|
106
|
+
# Pass strict mode options through to cucumber if present
|
107
|
+
# If not we default to strict for undefined and pending results,
|
108
|
+
# but no-strict for flaky in order to allow retries
|
109
|
+
regex = /--(no-)?strict(-(undefined|pending|flaky))?/
|
110
|
+
if @args.all? { |arg| regex.match(arg).nil? }
|
111
|
+
@args << '--strict-undefined' << '--strict-pending' << '--no-strict-flaky'
|
112
|
+
end
|
113
|
+
|
114
|
+
# Load internal steps and helper functions
|
115
|
+
load_dir = File.expand_path(File.dirname(File.dirname(__FILE__))).freeze
|
116
|
+
paths = Dir.glob("#{load_dir}/lib/features/**/*.rb")
|
117
|
+
|
118
|
+
# Load project-specific steps and helper functions
|
119
|
+
paths += Dir.glob('features/{support,steps}/*.rb')
|
120
|
+
paths.each { |path| @args << '-r' << path }
|
121
|
+
end
|
122
|
+
|
123
|
+
# List devices for the given device farm, or all otherwise
|
124
|
+
|
125
|
+
def start(args)
|
126
|
+
$logger.info "Maze Runner v#{Maze::VERSION}"
|
127
|
+
|
128
|
+
# Parse args, processing any Maze Runner specific options
|
129
|
+
@args = args.dup
|
130
|
+
options = Maze::Option::Parser.parse args
|
131
|
+
|
132
|
+
if options[Maze::Option::LIST_DEVICES]
|
133
|
+
case options[Maze::Option::FARM].to_sym
|
134
|
+
when :bs
|
135
|
+
Maze::Client::Appium::BrowserStackDevices.list_devices('ios')
|
136
|
+
Maze::Client::Appium::BrowserStackDevices.list_devices('android')
|
137
|
+
when :bb
|
138
|
+
unless options[Maze::Option::ACCESS_KEY]
|
139
|
+
puts 'Listing BitBar devices or device groups available requires a valid access key'
|
140
|
+
exit 1
|
141
|
+
end
|
142
|
+
access_key = options[Maze::Option::ACCESS_KEY]
|
143
|
+
if options[Maze::Option::DEVICE] && !options[Maze::Option::DEVICE].empty?
|
144
|
+
options[Maze::Option::DEVICE].each do |device_group|
|
145
|
+
Maze::Client::Appium::BitBarDevices.list_devices_for_group(device_group, access_key)
|
146
|
+
end
|
147
|
+
else
|
148
|
+
Maze::Client::Appium::BitBarDevices.list_device_groups(access_key)
|
149
|
+
end
|
150
|
+
else
|
151
|
+
Maze::Client::Appium::BrowserStackDevices.list_devices('ios')
|
152
|
+
Maze::Client::Appium::BrowserStackDevices.list_devices('android')
|
153
|
+
end
|
154
|
+
exit 0
|
155
|
+
end
|
156
|
+
|
157
|
+
# Validate CL options
|
158
|
+
errors = Maze::Option::Validator.new.validate options
|
159
|
+
unless errors.empty?
|
160
|
+
puts errors
|
161
|
+
exit 1
|
162
|
+
end
|
163
|
+
|
164
|
+
Maze::Option::Processor.populate Maze.config, options
|
165
|
+
|
166
|
+
# Adjust CL options before calling down to Cucumber
|
167
|
+
remove_maze_runner_args
|
168
|
+
add_cucumber_args
|
169
|
+
|
170
|
+
Cucumber::Cli::Main.new(@args).execute!
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
MazeRunnerEntry.new.start(ARGV)
|
data/bin/upload-app
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative '../lib/maze'
|
5
|
+
require_relative '../lib/maze/client/bs_client_utils'
|
6
|
+
require_relative '../lib/maze/logger'
|
7
|
+
require_relative '../lib/maze/helper'
|
8
|
+
require 'optimist'
|
9
|
+
require 'uri'
|
10
|
+
require 'net/http'
|
11
|
+
|
12
|
+
class UploadAppEntry
|
13
|
+
def start(args)
|
14
|
+
p = Optimist::Parser.new do
|
15
|
+
text 'Upload app files to BrowserStack'
|
16
|
+
text ''
|
17
|
+
text 'Requires BROWSER_STACK_USERNAME and BROWSER_STACK_ACCESS_KEY'
|
18
|
+
text ''
|
19
|
+
text 'Usage [OPTIONS]'
|
20
|
+
text ''
|
21
|
+
opt :help,
|
22
|
+
'Print this help.'
|
23
|
+
opt :app,
|
24
|
+
'The app to upload.',
|
25
|
+
:type => :string
|
26
|
+
opt :app_id_file,
|
27
|
+
'The file to write the uploaded app ID back to',
|
28
|
+
:type => :string
|
29
|
+
end
|
30
|
+
|
31
|
+
opts = Optimist::with_standard_exception_handling p do
|
32
|
+
raise Optimist::HelpNeeded if ARGV.empty? # show help screen
|
33
|
+
p.parse ARGV
|
34
|
+
end
|
35
|
+
|
36
|
+
# Get browserstack username and access key from the environment
|
37
|
+
username = ENV['BROWSER_STACK_USERNAME']
|
38
|
+
access_key = ENV['BROWSER_STACK_ACCESS_KEY']
|
39
|
+
|
40
|
+
# Check if BROWSER_STACK_USERNAME or BROWSER_STACK_ACCESS_KEY has been set
|
41
|
+
if username.nil? || access_key.nil?
|
42
|
+
$logger.warn "BROWSER_STACK_USERNAME or BROWSER_STACK_ACCESS_KEY has not been set"
|
43
|
+
Optimist::with_standard_exception_handling p do
|
44
|
+
raise Optimist::HelpNeeded
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
Maze::Client::BrowserStackClientUtils.upload_app username,
|
49
|
+
access_key,
|
50
|
+
opts[:app],
|
51
|
+
opts[:app_id_file]
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
UploadAppEntry.new.start(ARGV)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
if [ -z "$APP_BUNDLE" ]; then
|
4
|
+
echo APP_BUNDLE environment variable is not set
|
5
|
+
exit 1
|
6
|
+
fi
|
7
|
+
if [ -z "$APK_PATH" ]; then
|
8
|
+
echo APK_PATH environment variable is not set
|
9
|
+
exit 1
|
10
|
+
fi
|
11
|
+
|
12
|
+
echo "Uninstalling '$APP_BUNDLE'"
|
13
|
+
adb uninstall "$APP_BUNDLE"
|
14
|
+
echo "Installing '$APK_PATH'"
|
15
|
+
adb install "$APK_PATH"
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
if [ -z "$APP_BUNDLE" ]; then
|
4
|
+
echo APP_BUNDLE environment variable is not set
|
5
|
+
exit 1
|
6
|
+
fi
|
7
|
+
|
8
|
+
if [ -z "$APP_ACTIVITY" ]; then
|
9
|
+
echo APP_ACTIVITY environment variable is not set
|
10
|
+
exit 1
|
11
|
+
fi
|
12
|
+
|
13
|
+
if [ -z "$EVENT_TYPE" ]; then
|
14
|
+
echo EVENT_TYPE environment variable is not set
|
15
|
+
exit 1
|
16
|
+
fi
|
17
|
+
|
18
|
+
if [ -z "$EVENT_METADATA" ]; then
|
19
|
+
EVENT_METADATA="none"
|
20
|
+
fi
|
21
|
+
|
22
|
+
if [ -z "$MOCK_API_PORT" ]; then
|
23
|
+
echo MOCK_API_PORT environment variable is not set
|
24
|
+
exit 1
|
25
|
+
fi
|
26
|
+
|
27
|
+
if [ -z "$BUGSNAG_API_KEY" ]; then
|
28
|
+
echo BUGSNAG_API_KEY environment variable is not set
|
29
|
+
exit 1
|
30
|
+
fi
|
31
|
+
echo "Launching MainActivity with '$EVENT_TYPE'"
|
32
|
+
adb shell am start -n "$APP_BUNDLE/$APP_ACTIVITY" \
|
33
|
+
--es EVENT_TYPE "$EVENT_TYPE" \
|
34
|
+
--es EVENT_METADATA "$EVENT_METADATA" \
|
35
|
+
--es BUGSNAG_PORT "$MOCK_API_PORT" \
|
36
|
+
--es BUGSNAG_API_KEY "$BUGSNAG_API_KEY"
|
37
|
+
|
38
|
+
echo "Ran Android Test case"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
if [ -z "$ANDROID_EMULATOR" ]; then
|
4
|
+
echo EMULATOR environment variable is not set
|
5
|
+
exit 1
|
6
|
+
fi
|
7
|
+
|
8
|
+
if [ -z "$ANDROID_HOME" ]; then
|
9
|
+
echo ANDROID_HOME environment variable is not set
|
10
|
+
exit 1
|
11
|
+
fi
|
12
|
+
|
13
|
+
echo "Launching $ANDROID_EMULATOR emulator"
|
14
|
+
$ANDROID_HOME/emulator/emulator @$ANDROID_EMULATOR -no-boot-anim -noaudio -no-snapshot
|
15
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# @!group Android steps
|
2
|
+
|
3
|
+
# Starts an Android emulator available within the local environment
|
4
|
+
#
|
5
|
+
# @step_input emulator [String] The name of the emulator to start
|
6
|
+
When("I start Android emulator {string}") do |emulator|
|
7
|
+
steps %Q{
|
8
|
+
When I set environment variable "ANDROID_EMULATOR" to "#{emulator}"
|
9
|
+
And I run the script "launch-android-emulator.sh"
|
10
|
+
And I run the script "await-android-emulator.sh" synchronously
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
# Synchronously clears the data for the test application
|
15
|
+
# Requires an ADB connection
|
16
|
+
When("I clear the Android app data") do
|
17
|
+
step('I run the script "clear-android-app-data.sh" synchronously')
|
18
|
+
end
|
19
|
+
|
20
|
+
# Force stops the test application
|
21
|
+
# Requires an ADB connection
|
22
|
+
When("I force stop the Android app") do
|
23
|
+
step('I run the script "force-stop-android-app.sh" synchronously')
|
24
|
+
end
|
25
|
+
|
26
|
+
# Installs a given bundle from an APK onto a device
|
27
|
+
# Requires an ADB connection
|
28
|
+
#
|
29
|
+
# @step_input bundle [String] The bundle to be installed
|
30
|
+
# @step_input filepath [String] The path to the application's .apk
|
31
|
+
When("I install the {string} Android app from {string}") do |bundle, filepath|
|
32
|
+
steps %Q{
|
33
|
+
When I set environment variable "APP_BUNDLE" to "#{bundle}"
|
34
|
+
And I set environment variable "APK_PATH" to "#{filepath}"
|
35
|
+
And I run the script "install-android-app.sh" synchronously
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
# Starts a specific activity for a given app
|
40
|
+
# Requires an ADB connection
|
41
|
+
#
|
42
|
+
# @step_input app [String] The application name
|
43
|
+
# @step_input activity [String] The activity to start
|
44
|
+
When("I start the {string} Android app using the {string} activity") do |app, activity|
|
45
|
+
steps %Q{
|
46
|
+
When I set environment variable "APP_BUNDLE" to "#{app}"
|
47
|
+
When I set environment variable "APP_ACTIVITY" to "#{activity}"
|
48
|
+
And I run the script "launch-android-app.sh" synchronously
|
49
|
+
And I wait for 4 seconds
|
50
|
+
}
|
51
|
+
end
|