Как создать и запустить распределенные тесты в appium + node.js для Android - PullRequest
0 голосов
/ 25 октября 2018

Я рад приветствовать вас, мой друг!К сожалению, у меня есть проблема, которую нужно решить - это очень важно для меня и любой информации, которая будет касаться этой темы по цене!Заранее спасибо!

Я недавно встречался с тестированием пользовательского интерфейса.На данный момент я написал проект, который запускает тестирование на платформе Android.Технологический стек, который я использую: appium, nodejs, webdriverio.

Это мой основной файл - index.js

const joinPath = require('./utils/utils').joinPath
const getDirContentRecursively = require('./utils/utils').getDirContentRecursively
const getFormattedDate = require('./utils/utils').getFormattedDate
const config = require('./config.json')

executeTests()

async function executeTests () {
  let args = process.argv
  if (!args.includes('android') && !args.includes('ios')) {
    await executeAndroid()
    await executeIos()
    return
  }
  if (args.includes('android')) await executeAndroid()
  if (args.includes('ios')) await executeIos()
}

async function executeAndroid () {
  console.log('Starting Android tests')
  let driver = getDriver(config.android.capabilities)
  let tests = getTests(config.android.testsDir)
  let reportDir = getReportDir(config.android.reportsDir)
  await executeTestsWithDriver(driver, tests, reportDir)
}

async function executeIos () {
  console.log('Starting iOS tests')
  let driver = getDriver(config.ios.capabilities)
  let tests = getTests(config.ios.testsDir)
  let reportDir = getReportDir(config.ios.reportsDir)
  await executeTestsWithDriver(driver, tests, reportDir)
}

function getDriver (caps) {
  const wdio = require('webdriverio')
  const driver = wdio.remote({
    protocol: config.appium.protocol,
    host: config.appium.host,
    port: config.appium.port,
    path: '/wd/hub',
    deprecationWarnings: false,
    desiredCapabilities: caps
  })
  addAdditionalCommands(driver)
  return driver
}

function addAdditionalCommands (driver) {
  const commandsDir = config.directories.commands
  getDirContentRecursively(commandsDir, '.js').forEach(file => {
    const addCommand = require(file)
    addCommand(driver)
  })
}

function getTests (platformTestsDir) {
  const tests = []

  getDirContentRecursively(config.directories.commonTests, '.js').forEach(filePath => tests.push(filePath))

  getDirContentRecursively(platformTestsDir, '.js').forEach(filePath => tests.push(filePath))
  return tests
}

function getReportDir (baseDir) {
  const date = getFormattedDate('dd-mm-yyyy_hh-MM-ss')
  return joinPath(__dirname, baseDir, date)
}

function executeTestsWithDriver (driver, tests, reportDir) {
  const runner = getTestRunner(reportDir)

  tests.forEach(path => {
    delete require.cache[path]
    runner.addFile(path)
  })

  global.reportDir = reportDir
  global.driver = driver
  global.account = require('./accounts/accounts.json')
  global.android_emulator = require('./emulators/android_emulators.json')

  return new Promise(resolve => runner.run(resolve))
}

function getTestRunner (reportDir) {
  const Mocha = require('mocha')
  const runner = new Mocha()

  runner.timeout(1800000)
  runner.reporter('mochawesome', {
    'reportTitle': 'Integration Test',
    'reportPageTitle': 'Integration Test',
    'reportDir': reportDir,
    'saveJson': true,
    'reportFilename': 'report'
  })
  return runner
}

package.json

{
  "name": "MyTesting",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "node index.js"
  },
  "author": "",
  "license": "MIT",
  "devDependencies": {
    "dateformat": "^3.0.3",
    "eslint": "^5.7.0",
    "eslint-config-standard": "^12.0.0",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-node": "^7.0.1",
    "eslint-plugin-promise": "^4.0.1",
    "eslint-plugin-standard": "^4.0.0",
    "mkdirp": "^0.5.1",
    "mocha": "^5.2.0",
    "mocha-parallel-tests": "^2.0.5",
    "mochawesome": "^3.1.1",
    "node-fetch": "^2.2.0",
    "uuid": "^3.3.2",
    "webdriverio": "^4.14.0"
  },
  "dependencies": {}
}

Тестыработать и работать очень хорошо, но у меня есть другая задача.

Необходимо начать тестирование таким образом, чтобы какая-то часть тестов выполнялась на одном устройстве, а другая часть подходила для другого устройства.Если я не ошибаюсь, то это называется «распределенные тесты».

Схема такого тестирования:

  1. Когда запускается тест №1, он начинает работать на одном устройстве.
  2. Позади него запускается тест № 2., Но на другом устройстве.
  3. Когда тест № 1 завершен, проводится следующий тест, если он не запущен, тест № 3запущен, иначе следующий.
  4. и т. д.

К сожалению, я не понимаю, как можно достичь решения этой проблемы в рамках стека используемых технологий,который я описал выше.Возможно, есть источник информации, который я не смог найти ... Мне очень нужна ваша помощь в том, как выпустить запуск распределенных тестов в appium и node.js ... Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...