Skip to content

appcelerator-archive/appium-tests

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

appium-tests

Tool to run Titanium mobile tests in Appium.

Caveats

Setup

  1. Make sure you have node >= 4 and npm >= 3.
  2. In this directory, run npm install.
  3. Next, install appium-doctor: [sudo] npm install -g appium-doctor.
  4. Run appium-doctor to ensure your machine is properly setup for appium testing.

Flag Usage

  • node run.js

    • Run all tests in the tests directory.
  • node run.js --suites <suites>

    • Run only the specified test suites e.g.
    node run.js --suites Slider/ios.js -> run only the iOS Slider test suite
    
    node run.js --suites Slider/ios.js,Slider/android.js -> run both the iOS and Android slider test suites.
    
  • node run.js --suites <suites> --use-sdk <ti_sdk>

    • Before running the specified test suites, rebuild the test app with the specified ti_sdk.
    • This probably won't be useful if you are running this on your local machine. But, will be useful in a Jenkins build.
  • node run.js --suites <suites> --more-logs

    • Run the specified test suites with logs enabled; this can become very noisy.
  • Below is the complete list of flags:

    Options:
    
    	-h, --help          output usage information
    	--suites <suites>   comma-delimited string of valid test suites; otherwise, run all tests
    	--use-sdk <ti_sdk>  build all test apps with the specified Titanium SDK
    	--more-logs         enables more logging; this becomes very noisy
    

How to Write Tests

1. Test Suite Structure

All test suites live in the tests directory and should have the following folder structure:

tests/
|--- suite_name/
	 |--- test_app/
	 |--- platform.js
	 |--- platform2.js
...

Info:

  • suite_name should be an API supported by Titanium SDK or Hyperloop e.g. Slider.
  • test_app should be a Titanium Classic, Alloy, or Hyperloop enabled project.
  • platform.js is a mocha file that will execute test cases (via Appium) in the test_app on the designated mobile platform.
  • It's important that the platform.js file name is a valid platform (ios.js or android.js), since it tells this tool which mobile platform to use when: installing the test_app and running the tests.

2. test_config.js

The test_config.js file (which lives at the root of this project) contains information about all the test suites and which Appium server to connect to.

High-level notes:

module.exports = {
	// this will connect to the local running appium server; you can leave as-is
	server: {
		host: 'localhost',
		port: 4723
	},

	// this tracks all the test suites (per platform) in the 'tests' directory
	tests: {
		ios: {

			// these are properties straight from appium and more are defined here:
			// https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/default-capabilities-arg.md
			desiredCapabilities: {
				automationName: 'XCUITest' // leave as-is for ios
			},

			// the suite_name folder should exist in the 'tests' directory
			suite_name: {
				proj: 'SAMPLE', // name of the 'test_app'

				// list of simulators you want the test app to run against
				testDevices: [
					{
						deviceName: 'iPhone 7 Plus', // the simulator created in xcode
						platformVersion: '10.2' // the platform version associated with the simulator
					},
					...
				]
			},

			suite_name2: { ... }
			...
		},

		android: {
			desiredCapabilities: {
				automationName: 'Appium' // leave as-is for android
			},
			suite_name: {
				proj: 'SAMPLE',

				// these two properties are needed when testing against android
				appPackage: 'com.company.name',
				appActivity: '.SomeActivity',

				// list of genymotion emulators you want the test app to run against
				testDevices: [
					{
						deviceName: 'Custom Phone - 6.0.0 - API 23 - 768x1280', // the genymotion emulator created in the genymotion app
						platformVersion: '6.0' // the platform version associated with the emulator
					},
					...
				]
			}
		}

		// other platforms can be added in the future
	}
};

Actual:

module.exports = {
	server: {
		host: 'localhost',
		port: 4723
	},
	tests: {
		ios: {
			desiredCapabilities: {
				automationName: 'XCUITest',
				noReset: true
			},
			Slider: {
				proj: 'KitchenSink',
				testDevices: [
					{
						deviceName: 'iPhone 7 Plus',
						platformVersion: '10.2'
					},
					{
						deviceName: 'iPhone 7',
						platformVersion: '10.1'
					}
				]
			}
		},
		android: {
			desiredCapabilities: {
				automationName: 'Appium',
				noReset: true
			},
			Slider: {
				proj: 'KitchenSink',
				appPackage: 'com.appcelerator.kitchensink',
				appActivity: '.KitchensinkActivity',
				testDevices: [
					{
						deviceName: 'Custom Phone - 6.0.0 - API 23 - 768x1280',
						platformVersion: '6.0'
					},
					{
						deviceName: 'Custom Phone - 7.0.0 - API 24 - 768x1280',
						platformVersion: '7.0'
					}
				]
			}
		}
	}
};

3. Mocha Files

To write the Appium test cases, you will need to be familiar with mocha and Promises. Look at https://github.com/appcelerator/qe-appium/tree/master/test for examples.

Couple notes about those examples vs these test suites:

Main Loop

run.js is the entry point file and contains the main loop, which does the following:

  1. runAppium() - launches the local Appium server.
  2. buildTestApps() - if --use-sdk flag is passed, then build all the test apps before moving onto the next task.
  3. createTests() - create a data structure from --suites and loop through the data structure. While looping:
  4. launchGeny() - if the test app needs to be tested on an Android platform, launch the designated Genymotion emulator first. iOS simulators will be launched in the next step by Appium.
  5. startClient() - after the simulator/genymotion is launched, install the test app to the device and connect to the Appium local server.
  6. new Mocha().addFile().run() - run the associated mocha test suite.
  7. stopClient() - after a mocha test suite is finished running, disconnect the mobile device from the Appium local server. Depending on the desiredCapabilities, iOS simulators can be left running or killed.
  8. quitGeny() - if a Genymotion emulator is launched, gracefully kill the process.
  9. killAppium() - after all the test suites are executed, kill the Appium local server.

About

Tool to run Titanium mobile tests in Appium

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published