Содержимое тестового пакета Bitbar Cloud Appium на стороне сервера для JavaScript
Кто-нибудь знает, каким должно быть содержимое zip-файла, используемого для запуска теста на стороне сервера, при использовании Javascript в качестве языка? Я просмотрел примеры python и ruby на странице github ( репозиторий GitHub bitbar-samples), но для Javascript ничего нет, и то же самое верно в документации - только java и python. но для Javascript нет ничего.
1 ответ
Из документации:
Все необходимые файлы для тестирования необходимо загрузить в облако в виде zip-пакета. Этот пакет должен содержать тестовые файлы, файлы данных и должен иметь сценарий оболочки для запуска выполнения теста на корневом уровне пакета.
А также:
Для правильной работы облачной стороны важно, чтобы в zip-архиве тестового пакета были нужные файлы. Здесь мы рассмотрим файлы, а также правильный состав тестового zip-архива. Самым важным является файл run-tests.sh, он отвечает за запуск выполнения теста в облаке, а также за установку требований.
Итак, теоретически вы можете иметь только в ZIP-архиве run-tests.sh
файл. А поскольку это простой сценарий bash, вы свободны в том, что он будет делать. Глядя на примеры Python и Ruby, вот как выглядит моя структура ZIP:
.
├── package.json
├── package-lock.json
├── run-tests.sh
├── test
│ └── specs
│ └── main.js
└── wdio.conf.js
Я использовал Webdriver.io Testrunner - вот почему у меняwdio.conf.js
а также test/specs/main.js
.
Вот как мой run-tests.sh
похоже:
#!/usr/bin/env bash
echo "Preparing..."
# Make sure there's no pre-existing `screenshots` file blocking symbolic link creation
rm -rf screenshots
# Recreate screenshots dir
mkdir screenshots
echo "Extracting tests.zip..."
unzip tests.zip
echo "Installing dependencies..."
npm install
echo "Running tests..."
./node_modules/.bin/wdio wdio.conf.js
Мой main.js
(Я использовал bitbar-sample-app.apk
и метод тестирования сначала сверху):
describe('Bitbar Sample App', () => {
it('Should radio button should be visible ', async () => {
let el = await $('//android.widget.RadioButton[@text="Buy 101 devices"]');
let visible = await el.isDisplayed();
visible.should.be.true;
});
it('Should show failure page', async () => {
let el;
console.log("view1: Clicking button - 'Buy 101 devices'");
el = await $('//android.widget.RadioButton[@text="Buy 101 devices"]');
el.click();
console.log("view1: Typing in textfield[0]: Bitbar user");
el = await $('//android.widget.EditText[@resource-id="com.bitbar.testdroid:id/editText1"]');
el.setValue('Bitbar user');
driver.hideKeyboard();
console.log("view1: Taking screenshot screenshot1.png");
await takeScreenshot('screenshot1');
console.log("view1: Clicking button Answer");
el = await $('//android.widget.Button[@text="Answer"]');
el.click();
console.log("view2: Taking screenshot screenshot2.png");
await takeScreenshot('screenshot2');
el = await $('//android.widget.TextView[@text="Wrong Answer!"]');
let txt = await el.getText();
txt.should.be.equal('Wrong Answer!');
});
});
И wdio.conf.js
(Взгляни на before
крючок):
const path = require('path');
exports.config = {
runner: 'local',
framework: 'mocha',
mochaOpts: {
ui: 'bdd',
timeout: 60000
},
logLevel: 'silent',
deprecationWarnings: true,
bail: 0,
waitforTimeout: 10000,
connectionRetryTimeout: 90000,
connectionRetryCount: 3,
reporters: [
'spec',
[
'junit', {
outputDir: './',
outputFileFormat: () => {
return 'TEST-all.xml';
}
}
]
],
host: '127.0.0.1',
port: 4723,
path: '/wd/hub',
services: ['appium'],
appium: {
command: 'appium',
logPath : './',
},
specs: [
'./test/specs/**/*.js'
],
capabilities: [{
platformName: 'Android',
maxInstances: 1,
'appium:deviceName': 'Android device',
'appium:automationName': 'UiAutomator2',
'appium:app': path.resolve('application.apk'),
'appium:appActivity': '.BitbarSampleApplicationActivity',
'appium:appPackage': 'com.bitbar.testdroid',
'appium:newCommandTimeout': 240
}],
before: function() {
const chai = require('chai');
global.expect = chai.expect;
chai.should();
const fs = require('fs');
global.takeScreenshot = async (fileName) => {
let screenshot = await driver.takeScreenshot();
screenshot = screenshot.replace(/^data:image\/png;base64,/, "")
let filePath = path.resolve(`./screenshots/${fileName}.png`);
fs.writeFileSync(filePath, screenshot, 'base64');
};
}
}
Последний, но тем не менее важный package.json
:
{
"name": "appium-server-side-example",
"version": "1.0.0",
"description": "Bitbar Cloud Appium Server Side Test Example",
"author": "Marek Sierociński <marek.sierocinski@smartbear.com>",
"license": "ISC",
"dependencies": {
"@wdio/appium-service": "^5.16.5",
"@wdio/cli": "^5.16.7",
"@wdio/junit-reporter": "^5.15.5",
"@wdio/local-runner": "^5.16.7",
"@wdio/mocha-framework": "^5.16.5",
"@wdio/spec-reporter": "^5.16.5",
"@wdio/sync": "^5.16.5",
"chai": "^4.2.0"
}
}
Как видите, я использовал chai
(потому что я хотел использовать подход BDD) и junit-reporter
(поскольку разработчики Bitbar - фанаты Java, и по образцам вы можете догадаться, что Cloud читает файлы JUnit для чтения методов тестирования).
У меня работает: