Skip to content

Commit

Permalink
change to instance style (#125)
Browse files Browse the repository at this point in the history
add parallel tests for iOS as an example
  • Loading branch information
KazuCocoa authored Aug 9, 2018
1 parent 29abb31 commit 16681d2
Show file tree
Hide file tree
Showing 28 changed files with 113 additions and 75 deletions.
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,15 @@ $ rake test:func:android # Andorid
$ rake test:func:ios # iOS
```

#### Run parallel tests with parallel_tests gem

- Create iPhone simulators named `iPhone 6 - 8100` and `iPhone 6 - 8101`
- Run iOS functional tests with below command

```
PARALLEL=1 bundle exec parallel_test test/functional/ios -n 2
```

## Run a test case
1. Launch the Appium server locally.
2. Run the following script.
Expand Down
4 changes: 2 additions & 2 deletions test/functional/android/android/device_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class AppiumLibCoreTest
module Android
class DeviceTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@@core ||= ::Appium::Core.for(self, Caps.android)
@@driver ||= @@core.start_driver

@@driver.start_activity app_package: 'io.appium.android.apis',
Expand Down Expand Up @@ -107,7 +107,7 @@ def test_re_install
@@driver.remove_app 'io.appium.android.apis'
assert !@@driver.app_installed?('io.appium.android.apis')

@@driver.install_app "#{Dir.pwd}/#{Caps::ANDROID_OPS[:caps][:app]}"
@@driver.install_app "#{Dir.pwd}/#{Caps.android[:caps][:app]}"
assert @@driver.app_installed?('io.appium.android.apis')

assert !@@driver.app_installed?('fake_app')
Expand Down
2 changes: 1 addition & 1 deletion test/functional/android/android/search_context_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class AppiumLibCoreTest
module Android
class SearchContextTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@@core ||= ::Appium::Core.for(self, Caps.android)
@@driver ||= @@core.start_driver
end

Expand Down
2 changes: 1 addition & 1 deletion test/functional/android/driver_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
class AppiumLibCoreTest
class DriverTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@@core ||= ::Appium::Core.for(self, Caps.android)
@@driver ||= @@core.start_driver
end

Expand Down
2 changes: 1 addition & 1 deletion test/functional/android/patch_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
class AppiumLibCoreTest
class PathTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@@core ||= ::Appium::Core.for(self, Caps.android)
@@driver ||= @@core.start_driver

@@driver.start_activity app_package: 'io.appium.android.apis',
Expand Down
10 changes: 5 additions & 5 deletions test/functional/android/webdriver/create_session_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ class AppiumLibCoreTest
module WebDriver
class CreateSessionTestTest < AppiumLibCoreTest::Function::TestCase
def test_mjsonwp
caps = Caps::ANDROID_OPS[:caps].merge({ forceMjsonwp: true })
new_caps = Caps::ANDROID_OPS.merge({ caps: caps })
caps = Caps.android[:caps].merge({ forceMjsonwp: true })
new_caps = Caps.android.merge({ caps: caps })
core = ::Appium::Core.for(self, new_caps)

driver = core.start_driver
Expand All @@ -18,8 +18,8 @@ def test_mjsonwp

# Require Appium 1.7.2+
def test_w3c
caps = Caps::ANDROID_OPS[:caps].merge({ forceMjsonwp: false })
new_caps = Caps::ANDROID_OPS.merge({ caps: caps })
caps = Caps.android[:caps].merge({ forceMjsonwp: false })
new_caps = Caps.android.merge({ caps: caps })
core = ::Appium::Core.for(self, new_caps)

driver = core.start_driver
Expand All @@ -31,7 +31,7 @@ def test_w3c

# Require Appium 1.7.2+
def test_w3c_default
caps = Caps::ANDROID_OPS
caps = Caps.android
core = ::Appium::Core.for(self, caps)

driver = core.start_driver
Expand Down
2 changes: 1 addition & 1 deletion test/functional/android/webdriver/device_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class AppiumLibCoreTest
module WebDriver
class DeviceTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@@core ||= ::Appium::Core.for(self, Caps.android)
@@driver ||= @@core.start_driver

@@driver.start_activity app_package: 'io.appium.android.apis',
Expand Down
2 changes: 1 addition & 1 deletion test/functional/android/webdriver/w3c_actions_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class AppiumLibCoreTest
module WebDriver
class W3CActionsTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@@core ||= ::Appium::Core.for(self, Caps.android)
@@driver ||= @@core.start_driver

@@driver.start_activity app_package: 'io.appium.android.apis',
Expand Down
2 changes: 1 addition & 1 deletion test/functional/ios/driver_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
class AppiumLibCoreTest
class DriverTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::IOS_OPS)
@@core ||= ::Appium::Core.for(self, Caps.ios)
@@driver ||= @@core.start_driver
end

Expand Down
4 changes: 2 additions & 2 deletions test/functional/ios/ios/device_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class AppiumLibCoreTest
module Ios
class DeviceTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::IOS_OPS)
@@core ||= ::Appium::Core.for(self, Caps.ios)
@@driver ||= @@core.start_driver
end

Expand Down Expand Up @@ -140,7 +140,7 @@ def test_re_install
@@driver.remove_app 'com.example.apple-samplecode.UICatalog'
assert !@@driver.app_installed?('com.example.apple-samplecode.UICatalog')

@@driver.install_app Caps::IOS_OPS[:caps][:app]
@@driver.install_app Caps.ios[:caps][:app]
assert @@driver.app_installed?('com.example.apple-samplecode.UICatalog')
end

Expand Down
2 changes: 1 addition & 1 deletion test/functional/ios/ios/search_context_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class AppiumLibCoreTest
module Ios
class SearchContextTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::IOS_OPS)
@@core ||= ::Appium::Core.for(self, Caps.ios)
@@driver ||= @@core.start_driver
end

Expand Down
2 changes: 1 addition & 1 deletion test/functional/ios/patch_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
class AppiumLibCoreTest
class PathTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::IOS_OPS)
@@core ||= ::Appium::Core.for(self, Caps.ios)
@@driver ||= @@core.start_driver
end

Expand Down
10 changes: 5 additions & 5 deletions test/functional/ios/webdriver/create_session_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ class AppiumLibCoreTest
module WebDriver
class CreateSessionTestTest < AppiumLibCoreTest::Function::TestCase
def test_mjsonwp
caps = Caps::IOS_OPS[:caps].merge({ forceMjsonwp: true })
new_caps = Caps::IOS_OPS.merge({ caps: caps })
caps = Caps.ios[:caps].merge({ forceMjsonwp: true })
new_caps = Caps.ios.merge({ caps: caps })
core = ::Appium::Core.for(self, new_caps)

driver = core.start_driver
Expand All @@ -18,8 +18,8 @@ def test_mjsonwp

# Require Appium 1.7.2+
def test_w3c
caps = Caps::IOS_OPS[:caps].merge({ forceMjsonwp: false })
new_caps = Caps::IOS_OPS.merge({ caps: caps })
caps = Caps.ios[:caps].merge({ forceMjsonwp: false })
new_caps = Caps.ios.merge({ caps: caps })
core = ::Appium::Core.for(self, new_caps)

driver = core.start_driver
Expand All @@ -31,7 +31,7 @@ def test_w3c

# Require Appium 1.7.2+
def test_w3c_default
caps = Caps::IOS_OPS
caps = Caps.ios
core = ::Appium::Core.for(self, caps)

driver = core.start_driver
Expand Down
2 changes: 1 addition & 1 deletion test/functional/ios/webdriver/device_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class AppiumLibCoreTest
module WebDriver
class DeviceTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::IOS_OPS)
@@core ||= ::Appium::Core.for(self, Caps.ios)
@@driver ||= @@core.start_driver
end

Expand Down
2 changes: 1 addition & 1 deletion test/functional/ios/webdriver/w3c_actions_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class AppiumLibCoreTest
module WebDriver
class W3CActionsTest < AppiumLibCoreTest::Function::TestCase
def setup
@@core ||= ::Appium::Core.for(self, Caps::IOS_OPS)
@@core ||= ::Appium::Core.for(self, Caps.ios)
@@driver ||= @@core.start_driver
end

Expand Down
107 changes: 68 additions & 39 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
require 'minitest/autorun'
require 'minitest/reporters'
require 'minitest'

$VERBOSE = nil

Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
Expand Down Expand Up @@ -32,51 +33,79 @@ def save_reports(driver)
end

class AppiumLibCoreTest
module Caps
class Caps
def self.ios
new.ios
end

def self.android
new.android
end

# Require a simulator which OS version is 10.3, for example.
IOS_OPS = {
caps: {
platformName: :ios,
automationName: 'XCUITest',
app: 'test/functional/app/UICatalog.app',
platformVersion: '10.3',
deviceName: 'iPhone Simulator',
useNewWDA: true,
useJSONSource: true,
someCapability: 'some_capability',
newCommandTimeout: 120
},
appium_lib: {
export_session: true,
wait: 30,
wait_timeout: 20,
wait_interval: 1
def ios
wda_local_port = get_wda_local_port
device_name = parallel? ? "iPhone 6 - #{wda_local_port}" : 'iPhone 6'

{
caps: {
platformName: :ios,
automationName: 'XCUITest',
app: 'test/functional/app/UICatalog.app',
platformVersion: '10.3',
deviceName: device_name,
useNewWDA: true,
useJSONSource: true,
someCapability: 'some_capability',
newCommandTimeout: 120,
wdaLocalPort: wda_local_port
},
appium_lib: {
export_session: true,
wait: 30,
wait_timeout: 20,
wait_interval: 1
}
}
}.freeze
end

# Require a real device or an emulator.
# We should update platformVersion and deviceName to fit your environment.
ANDROID_OPS = {
caps: {
platformName: :android,
automationName: 'uiautomator2',
app: 'test/functional/app/api.apk',
platformVersion: '8.1.0',
deviceName: 'Android Emulator',
appPackage: 'io.appium.android.apis',
appActivity: 'io.appium.android.apis.ApiDemos',
someCapability: 'some_capability',
unicodeKeyboard: true,
resetKeyboard: true,
newCommandTimeout: 300
},
appium_lib: {
export_session: true,
wait: 30,
wait_timeout: 20,
wait_interval: 1
def android
{
caps: {
platformName: :android,
automationName: 'uiautomator2',
app: 'test/functional/app/api.apk',
platformVersion: '8.1.0',
deviceName: 'Android Emulator',
appPackage: 'io.appium.android.apis',
appActivity: 'io.appium.android.apis.ApiDemos',
someCapability: 'some_capability',
unicodeKeyboard: true,
resetKeyboard: true,
newCommandTimeout: 300
},
appium_lib: {
export_session: true,
wait: 30,
wait_timeout: 20,
wait_interval: 1
}
}
}.freeze
end

def parallel?
ENV['PARALLEL']
end

def get_wda_local_port
# TEST_ENV_NUMBER is provided by parallel_tests gem
# The number is '', '2', '3',...
number = ENV['TEST_ENV_NUMBER'] || ''
core_number = number.empty? ? 0 : number.to_i - 1
[8100, 8101][core_number]
end
end

module Mock
Expand Down
2 changes: 1 addition & 1 deletion test/unit/android/device/mjsonwp/commands_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class CommandsTest < Minitest::Test
include AppiumLibCoreTest::Mock

def setup
@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@core ||= ::Appium::Core.for(self, Caps.android)
@driver ||= android_mock_create_session
end

Expand Down
2 changes: 1 addition & 1 deletion test/unit/android/device/mjsonwp/definition_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class DefinitionTest < Minitest::Test
include AppiumLibCoreTest::Mock

def setup
@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@core ||= ::Appium::Core.for(self, Caps.android)
@driver ||= android_mock_create_session
end

Expand Down
2 changes: 1 addition & 1 deletion test/unit/android/device/w3c/commands_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class CommandsTest < Minitest::Test
include AppiumLibCoreTest::Mock

def setup
@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@core ||= ::Appium::Core.for(self, Caps.android)
@driver ||= android_mock_create_session_w3c
end

Expand Down
2 changes: 1 addition & 1 deletion test/unit/android/device/w3c/definition_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class DefinitionTest < Minitest::Test
include AppiumLibCoreTest::Mock

def setup
@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@core ||= ::Appium::Core.for(self, Caps.android)
@driver ||= android_mock_create_session_w3c
end

Expand Down
2 changes: 1 addition & 1 deletion test/unit/android/webdriver/mjsonwp/commands_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class CommandsTest < Minitest::Test
include AppiumLibCoreTest::Mock

def setup
@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@core ||= ::Appium::Core.for(self, Caps.android)
@driver ||= android_mock_create_session
end

Expand Down
2 changes: 1 addition & 1 deletion test/unit/android/webdriver/w3c/commands_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class CommandsTest < Minitest::Test
include AppiumLibCoreTest::Mock

def setup
@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@core ||= ::Appium::Core.for(self, Caps.android)
@driver ||= android_mock_create_session_w3c
end

Expand Down
2 changes: 1 addition & 1 deletion test/unit/driver_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class DriverTest < Minitest::Test
include AppiumLibCoreTest::Mock

def setup
@core ||= ::Appium::Core.for(self, Caps::ANDROID_OPS)
@core ||= ::Appium::Core.for(self, Caps.android)
end

class ExampleDriver
Expand Down
Loading

0 comments on commit 16681d2

Please sign in to comment.