Giter VIP home page Giter VIP logo

timoa / cdkit.ui.automation Goto Github PK

View Code? Open in Web Editor NEW
6.0 3.0 1.0 2.92 MB

This tool is a set of scripts to launch an Appium Server instance and run UI tests on iOS simulators and Genymotion Android emulators

Home Page: https://cdkit.org

License: MIT License

JavaScript 98.52% Shell 1.48%
appium appium-server ui-testing titanium appcelerator axway genymotion mobile managed-by-terraform

cdkit.ui.automation's Introduction

CDKit: UI Tests Automation

Latest Release Build Status

Quality Gate Status Security Rating Maintainability Rating

Bugs Code Smells Coverage Duplicated Lines (%)

CDKit is a DevOps framework that helps to deploy mobile apps (iOS and Android) to the app stores (iTunes and Google Play).

This tool is a set of scripts to launch an Appium Server instance and run UI tests on iOS simulators and Genymotion Android emulators.

This project is based on the Appcelerator Appium tests repository that is not maintained since 2017.

I still have a PR to fix the launch of Genymotion :)

Caveats

  • This has been tested on macOS only (for now)
  • Windows 10 Mobile is experimental
  • Install VirtualBox and Genymotion with default settings for macOS and Windows
  • Xcode should be installed on macOS
  • Appc CLI should be installed

Setup

  1. Make sure you have node >= 10 and npm >= 6.
  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 cli.js --app com.company.app

    • Run all tests in the ui-tests/com.company.app directory.
  • node cli.js --app com.company.app --suites <suites>

    • Run only the specified test suites e.g.
    node cli.js --app com.company.app --suites screenshots/ios.js -> run only the iOS `screenshots` test suite
    
    node cli.js --app com.company.app --suites screenshots/ios.js,screenshots/android.js -> run both the iOS and Android `screenshots` test suites.
  • node cli.js --app com.company.app --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 CI/CD build.
  • node cli.js --app com.company.app --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
      --app <bundleID>       app bundleId (needs to be present in the /ui-tests/<bundleId> folder)
      --platform <platform>  run all tests with the specified platform (ios or android)
      --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 ui-tests directory and should have the following folder structure:

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

Info:

  • app should be the bundle ID/app ID of your app e.g. com.company.app.
  • suite_name should be an API supported by Titanium SDK or Hyperloop e.g. screenshots.
  • 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. config.js

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

High-level notes:

module.exports = {
  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 'ui-tests/com.company.app' directory
      suite_name: {
        proj: 'SAMPLE', // name of the 'test_app'

      // list of simulators you want the test app to run against
      testDevices: [
        {
          deviceName: 'iPhone Xr', // the simulator created in xcode
          platformVersion: '13.0' // 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.app',
      appActivity: '.SomeActivity',

      // list of genymotion emulators you want the test app to run against
      testDevices: [
      {
          deviceName: 'Google Pixel 3', // the genymotion emulator created in the genymotion app
          platformVersion: '9.0' // the platform version associated with the emulator
      },
        ...
      ]
    }
  }

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

3. Mocha Files

To write the Appium test cases, you will need to be familiar with mocha and Promises. Look here for examples.

Couple notes about those examples vs these test suites:

  • The driver and webdriver property is exposed to the test suite through the global variable.
  • The global variable contains curDevice property. This has information about the current running device (name) and which version (ver).
  • You don't need a setup or teardown phase like here.

Main Loop

cli.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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.