Я рад приветствовать вас, мой друг!К сожалению, у меня есть проблема, которую нужно решить - это очень важно для меня и любой информации, которая будет касаться этой темы по цене!Заранее спасибо!
Я недавно встречался с тестированием пользовательского интерфейса.На данный момент я написал проект, который запускает тестирование на платформе 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, он начинает работать на одном устройстве.
- Позади него запускается тест № 2., Но на другом устройстве.
- Когда тест № 1 завершен, проводится следующий тест, если он не запущен, тест № 3запущен, иначе следующий.
- и т. д.
К сожалению, я не понимаю, как можно достичь решения этой проблемы в рамках стека используемых технологий,который я описал выше.Возможно, есть источник информации, который я не смог найти ... Мне очень нужна ваша помощь в том, как выпустить запуск распределенных тестов в appium и node.js ... Заранее спасибо!