From 12a979a3cfee76b71ae15f410bedda2ce807a6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Tue, 10 Oct 2017 17:51:05 +0200 Subject: [PATCH 01/20] [dockerized tests/wip] Selenium, Protractor and Webdriver tests OK --- docker-compose.yml | 29 +++++++++++++++++++++++++++ docker/entrypoint | 6 +----- test/helper/Nightmare_test.js | 2 +- test/helper/Protractor_test.js | 10 +++++++-- test/helper/SeleniumWebdriver_test.js | 6 +++--- test/helper/WebDriverIO_test.js | 13 ++++++------ 6 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..edd5c454b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,29 @@ +version: '3' +services: + test: + build: . + entrypoint: [] + command: docker/entrypoint node_modules/.bin/mocha test/helper + working_dir: /codecept + environment: + - SITE_URL=http://php:8000 + - SELENIUM_HOST=selenium.chrome + depends_on: + - selenium.chrome + - php + volumes: + - .:/codecept + + selenium.chrome: + image: selenium/standalone-chrome:3.5.2-antimony + ports: + - 4444:4444 + + php: + image: php:7.0 + command: php -S 0.0.0.0:8000 -t /test/data/app + ports: + - 8000:8000 + volumes: + - ./test:/test + diff --git a/docker/entrypoint b/docker/entrypoint index 8d30cfdad..3e8387855 100755 --- a/docker/entrypoint +++ b/docker/entrypoint @@ -1,8 +1,4 @@ #!/usr/bin/env bash set -e -# Start Xvfb -Xvfb -ac -screen scrn 1280x1024x24 :9.0 & -export DISPLAY=:9.0 - -exec "$@" \ No newline at end of file +xvfb-run --server-args="-screen 0 1024x768x24" "$@" diff --git a/test/helper/Nightmare_test.js b/test/helper/Nightmare_test.js index c7e5dc38a..4fc705fc3 100644 --- a/test/helper/Nightmare_test.js +++ b/test/helper/Nightmare_test.js @@ -2,7 +2,7 @@ let Nightmare = require('../../lib/helper/Nightmare'); let should = require('chai').should(); let I, browser; -let site_url = 'http://127.0.0.1:8000'; +let site_url = 'http://php:8000'; let assert = require('assert'); let path = require('path'); let fs = require('fs'); diff --git a/test/helper/Protractor_test.js b/test/helper/Protractor_test.js index 8d0db9af7..baa54ffb5 100644 --- a/test/helper/Protractor_test.js +++ b/test/helper/Protractor_test.js @@ -2,7 +2,7 @@ let Protractor = require('../../lib/helper/Protractor'); let site_url = 'http://davertmik.github.io/angular-demo-app'; -const web_app_url = 'http://127.0.0.1:8000' +const web_app_url = (process.env.SITE_URL || 'http://127.0.0.1:8000'); let assert = require('assert'); let I, browser; let path = require('path'); @@ -25,12 +25,18 @@ function assertFormContains(key, value) { }); } +const seleniumAddress = `${process.env.SELENIUM_HOST}:4444` + describe('Protractor', function() { this.timeout(20000); before(() => { global.codecept_dir = path.join(__dirname, '../data'); - I = new Protractor({url: site_url, browser: 'chrome'}); + I = new Protractor({ + url: site_url, + browser: 'chrome', + seleniumAddress: 'http://selenium.chrome:4444/wd/hub' + }); return I._init().then(() => { return I._beforeSuite(); }); diff --git a/test/helper/SeleniumWebdriver_test.js b/test/helper/SeleniumWebdriver_test.js index 35c273eaa..4b2876624 100644 --- a/test/helper/SeleniumWebdriver_test.js +++ b/test/helper/SeleniumWebdriver_test.js @@ -2,7 +2,7 @@ let SeleniumWebdriver = require('../../lib/helper/SeleniumWebdriver'); let should = require('chai').should(); let I, browser; -let site_url = 'http://127.0.0.1:8000'; +let site_url = (process.env.SITE_URL || 'http://127.0.0.1:8000'); let assert = require('assert'); let path = require('path'); let fs = require('fs'); @@ -27,8 +27,8 @@ describe('SeleniumWebdriver', function () { url: site_url, browser: 'chrome', windowSize: '500x400', - restart: false - + restart: false, + seleniumAddress: 'http://selenium.chrome:4444/wd/hub' }); return I._init().then(() => { return I._beforeSuite().then(() => { diff --git a/test/helper/WebDriverIO_test.js b/test/helper/WebDriverIO_test.js index 7744c6980..27d702f21 100644 --- a/test/helper/WebDriverIO_test.js +++ b/test/helper/WebDriverIO_test.js @@ -3,7 +3,7 @@ let WebDriverIO = require('../../lib/helper/WebDriverIO'); let should = require('chai').should(); let wd; -let site_url = 'http://127.0.0.1:8000'; +let site_url = (process.env.SITE_URL || 'http://127.0.0.1:8000'); let assert = require('assert'); let path = require('path'); let fs = require('fs'); @@ -29,7 +29,8 @@ describe('WebDriverIO', function () { url: site_url, browser: 'chrome', windowSize: '500x400', - smartWait: 10 // just to try + smartWait: 10, // just to try + host: (process.env.SELENIUM_HOST || '127.0.0.1'), }); }); @@ -172,7 +173,7 @@ describe('WebDriverIO', function () { it('should check attributes values for given element', () => { return wd.amOnPage('/info') .then(() => wd.seeAttributesOnElements('//form', { method: "post"})) - .then(() => wd.seeAttributesOnElements('//form', { method: "post", action: "http://127.0.0.1:8000/"})) + .then(() => wd.seeAttributesOnElements('//form', { method: "post", action: `${site_url}/` })) .then(() => wd.seeAttributesOnElements('//form', { method: "get"})) .then(expectError) .catch((e) => { @@ -277,17 +278,17 @@ describe('WebDriverIO', function () { .then(() => wd.waitInUrl('/info2', 0.1)) .then(expectError) .catch((e) => { - assert.equal(e.message, `expected url to include /info2, but found http://127.0.0.1:8000/info`); + assert.equal(e.message, `expected url to include /info2, but found ${site_url}/info`); }); }); it('should wait for the entire URL to match the expected', () => { return wd.amOnPage('/info') .then(() => wd.waitUrlEquals('/info')) - .then(() => wd.waitUrlEquals('http://127.0.0.1:8000/info')) + .then(() => wd.waitUrlEquals(`${site_url}/info`)) .then(() => wd.waitUrlEquals('/info2', 0.1)) .then(expectError) .catch((e) => { - assert.equal(e.message, `expected url to be http://127.0.0.1:8000/info2, but found http://127.0.0.1:8000/info`); + assert.equal(e.message, `expected url to be ${site_url}/info2, but found ${site_url}/info`); }); }); }); From b75bfa6f93f5a9c984afc9c78ec395232fe8d081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Tue, 17 Oct 2017 16:08:11 +0200 Subject: [PATCH 02/20] [docker-compose.yml] Don't run Appium tests --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index edd5c454b..a7d7d1df2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ services: test: build: . entrypoint: [] - command: docker/entrypoint node_modules/.bin/mocha test/helper + command: docker/entrypoint node_modules/.bin/mocha --invert --fgrep Appium test/helper working_dir: /codecept environment: - SITE_URL=http://php:8000 From 10b1efcd80b46024249e1fdacc9d6d6733e6d0ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Tue, 17 Oct 2017 16:23:41 +0200 Subject: [PATCH 03/20] [docker-compose.yml] Respect passed spec path Allow to pass test file path and run only it --- docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a7d7d1df2..35d60de27 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,9 @@ version: '3' services: - test: + test-helpers: build: . - entrypoint: [] - command: docker/entrypoint node_modules/.bin/mocha --invert --fgrep Appium test/helper + entrypoint: docker/entrypoint node_modules/.bin/mocha --invert --fgrep Appium + command: test/helper working_dir: /codecept environment: - SITE_URL=http://php:8000 From dc82b4fc2c1c075902df3775ea11592461cf5528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Tue, 17 Oct 2017 17:02:59 +0200 Subject: [PATCH 04/20] [TestHelper] Keep test configs in one place --- docker-compose.yml | 1 + test/helper/Nightmare_test.js | 4 +++- test/helper/Protractor_test.js | 7 +++---- test/helper/SeleniumWebdriver_test.js | 6 ++++-- test/helper/WebDriverIO_test.js | 6 ++++-- test/support/TestHelper.js | 19 +++++++++++++++++++ 6 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 test/support/TestHelper.js diff --git a/docker-compose.yml b/docker-compose.yml index 35d60de27..15477bb38 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,7 @@ services: environment: - SITE_URL=http://php:8000 - SELENIUM_HOST=selenium.chrome + - SELENIUM_PORT=4444 depends_on: - selenium.chrome - php diff --git a/test/helper/Nightmare_test.js b/test/helper/Nightmare_test.js index 4fc705fc3..42827079e 100644 --- a/test/helper/Nightmare_test.js +++ b/test/helper/Nightmare_test.js @@ -1,8 +1,10 @@ 'use strict'; +let TestHelper = require('../support/TestHelper'); + let Nightmare = require('../../lib/helper/Nightmare'); let should = require('chai').should(); let I, browser; -let site_url = 'http://php:8000'; +let site_url = TestHelper.siteUrl(); let assert = require('assert'); let path = require('path'); let fs = require('fs'); diff --git a/test/helper/Protractor_test.js b/test/helper/Protractor_test.js index baa54ffb5..f6184d8c0 100644 --- a/test/helper/Protractor_test.js +++ b/test/helper/Protractor_test.js @@ -1,8 +1,9 @@ 'use strict'; +let TestHelper = require('../support/TestHelper'); let Protractor = require('../../lib/helper/Protractor'); let site_url = 'http://davertmik.github.io/angular-demo-app'; -const web_app_url = (process.env.SITE_URL || 'http://127.0.0.1:8000'); +const web_app_url = TestHelper.siteUrl(); let assert = require('assert'); let I, browser; let path = require('path'); @@ -25,8 +26,6 @@ function assertFormContains(key, value) { }); } -const seleniumAddress = `${process.env.SELENIUM_HOST}:4444` - describe('Protractor', function() { this.timeout(20000); @@ -35,7 +34,7 @@ describe('Protractor', function() { I = new Protractor({ url: site_url, browser: 'chrome', - seleniumAddress: 'http://selenium.chrome:4444/wd/hub' + seleniumAddress: TestHelper.seleniumAddress() }); return I._init().then(() => { return I._beforeSuite(); diff --git a/test/helper/SeleniumWebdriver_test.js b/test/helper/SeleniumWebdriver_test.js index 4b2876624..c8331eade 100644 --- a/test/helper/SeleniumWebdriver_test.js +++ b/test/helper/SeleniumWebdriver_test.js @@ -1,8 +1,10 @@ 'use strict'; +let TestHelper = require('../support/TestHelper'); + let SeleniumWebdriver = require('../../lib/helper/SeleniumWebdriver'); let should = require('chai').should(); let I, browser; -let site_url = (process.env.SITE_URL || 'http://127.0.0.1:8000'); +let site_url = TestHelper.siteUrl(); let assert = require('assert'); let path = require('path'); let fs = require('fs'); @@ -28,7 +30,7 @@ describe('SeleniumWebdriver', function () { browser: 'chrome', windowSize: '500x400', restart: false, - seleniumAddress: 'http://selenium.chrome:4444/wd/hub' + seleniumAddress: TestHelper.seleniumAddress() }); return I._init().then(() => { return I._beforeSuite().then(() => { diff --git a/test/helper/WebDriverIO_test.js b/test/helper/WebDriverIO_test.js index 27d702f21..b61e6c1e1 100644 --- a/test/helper/WebDriverIO_test.js +++ b/test/helper/WebDriverIO_test.js @@ -1,9 +1,10 @@ 'use strict'; +let TestHelper = require('../support/TestHelper'); let WebDriverIO = require('../../lib/helper/WebDriverIO'); let should = require('chai').should(); let wd; -let site_url = (process.env.SITE_URL || 'http://127.0.0.1:8000'); +let site_url = TestHelper.siteUrl(); let assert = require('assert'); let path = require('path'); let fs = require('fs'); @@ -30,7 +31,8 @@ describe('WebDriverIO', function () { browser: 'chrome', windowSize: '500x400', smartWait: 10, // just to try - host: (process.env.SELENIUM_HOST || '127.0.0.1'), + host: TestHelper.seleniumHost(), + port: TestHelper.seleniumPort() }); }); diff --git a/test/support/TestHelper.js b/test/support/TestHelper.js new file mode 100644 index 000000000..7b715e2d1 --- /dev/null +++ b/test/support/TestHelper.js @@ -0,0 +1,19 @@ +class TestHelper { + static siteUrl() { + return (process.env.SITE_URL || '127.0.0.1:8000') + } + + static seleniumAddress() { + return `http://${this.seleniumHost()}:${this.seleniumPort()}/wd/hub` + } + + static seleniumHost() { + return (process.env.SELENIUM_HOST || '127.0.0.1') + } + + static seleniumPort() { + return (process.env.SELENIUM_PORT || '4444') + } +} + +module.exports = TestHelper; From 140e48d66d8d743d32488873e788ce12fbff04af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Tue, 17 Oct 2017 21:52:34 +0200 Subject: [PATCH 05/20] [TestHelper] use default links friendly for Travis --- test/support/TestHelper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/support/TestHelper.js b/test/support/TestHelper.js index 7b715e2d1..7981b131b 100644 --- a/test/support/TestHelper.js +++ b/test/support/TestHelper.js @@ -1,6 +1,6 @@ class TestHelper { static siteUrl() { - return (process.env.SITE_URL || '127.0.0.1:8000') + return (process.env.SITE_URL || 'http://localhost:8000') } static seleniumAddress() { @@ -8,7 +8,7 @@ class TestHelper { } static seleniumHost() { - return (process.env.SELENIUM_HOST || '127.0.0.1') + return (process.env.SELENIUM_HOST || 'localhost') } static seleniumPort() { From 43eb1c46ae769efcf12a4bb1415d9120969ace5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Thu, 19 Oct 2017 15:02:36 +0200 Subject: [PATCH 06/20] [test/rest] Run in dockerized environment docker-compose run test-helpers test/rest docker-compose run test-helpers test/rest/ApiDataFactory_test.js docker-compose run test-helpers test/rest/REST_test.js --- docker-compose.yml | 11 +++++++++++ test/rest/ApiDataFactory_test.js | 7 +++++-- test/rest/REST_test.js | 5 +++-- test/support/TestHelper.js | 4 ++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 15477bb38..439d340f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,9 +9,11 @@ services: - SITE_URL=http://php:8000 - SELENIUM_HOST=selenium.chrome - SELENIUM_PORT=4444 + - JSON_SERVER_URL=http://json_server:8010 depends_on: - selenium.chrome - php + - json_server volumes: - .:/codecept @@ -28,3 +30,12 @@ services: volumes: - ./test:/test + json_server: + image: node:alpine + command: npm run json-server + working_dir: /codecept + expose: + - 8010 + volumes: + - .:/codecept + diff --git a/test/rest/ApiDataFactory_test.js b/test/rest/ApiDataFactory_test.js index 98d373ab8..5c3edce3e 100644 --- a/test/rest/ApiDataFactory_test.js +++ b/test/rest/ApiDataFactory_test.js @@ -1,7 +1,9 @@ 'use strict'; +const TestHelper = require('../support/TestHelper'); + let ApiDataFactory = require('../../lib/helper/ApiDataFactory'); let should = require('chai').should(); -let api_url = 'http://127.0.0.1:8010'; +let api_url = TestHelper.jsonServerUrl(); let assert = require('assert'); let path = require('path'); let fs = require('fs'); @@ -52,6 +54,7 @@ describe('ApiDataFactory', function () { }); describe('create and cleanup records', function() { + this.timeout(20000) it('should create a new post', function*() { yield I.have('post'); @@ -154,4 +157,4 @@ describe('ApiDataFactory', function () { }); }); -}); \ No newline at end of file +}); diff --git a/test/rest/REST_test.js b/test/rest/REST_test.js index c29c7a430..d5197a275 100644 --- a/test/rest/REST_test.js +++ b/test/rest/REST_test.js @@ -1,7 +1,8 @@ 'use strict'; +const TestHelper = require('../support/TestHelper'); let REST = require('../../lib/helper/REST'); let should = require('chai').should(); -let api_url = 'http://127.0.0.1:8010'; +let api_url = TestHelper.jsonServerUrl(); let assert = require('assert'); let path = require('path'); let fs = require('fs'); @@ -103,4 +104,4 @@ describe('REST', function () { }); }); -}); \ No newline at end of file +}); diff --git a/test/support/TestHelper.js b/test/support/TestHelper.js index 7981b131b..4f2fe9d27 100644 --- a/test/support/TestHelper.js +++ b/test/support/TestHelper.js @@ -14,6 +14,10 @@ class TestHelper { static seleniumPort() { return (process.env.SELENIUM_PORT || '4444') } + + static jsonServerUrl() { + return (process.env.JSON_SERVER_URL || 'http://localhost:8010') + } } module.exports = TestHelper; From a46010d41f7d4b0fadffa0b649a641563264be1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Thu, 19 Oct 2017 16:12:23 +0200 Subject: [PATCH 07/20] dockerize WebDriverIO, Nightmare acceptance tests Nightmare still failing on iframe examples --- docker-compose.yml | 26 +++++++++++++++++++++++ test/acceptance/codecept.Nightmare.js | 16 ++++++++++++++ test/acceptance/codecept.Nightmare.json | 14 ------------ test/acceptance/codecept.WebDriverIO.js | 20 +++++++++++++++++ test/acceptance/codecept.WebDriverIO.json | 16 -------------- test/acceptance/within_test.js | 6 +++--- 6 files changed, 65 insertions(+), 33 deletions(-) create mode 100644 test/acceptance/codecept.Nightmare.js delete mode 100644 test/acceptance/codecept.Nightmare.json create mode 100644 test/acceptance/codecept.WebDriverIO.js delete mode 100644 test/acceptance/codecept.WebDriverIO.json diff --git a/docker-compose.yml b/docker-compose.yml index 439d340f3..9532417e1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,32 @@ services: volumes: - .:/codecept + test-acceptance.webdriverio: + build: . + environment: + - CODECEPT_ARGS=-c codecept.WebDriverIO.js --grep @WebDriverIO + - SITE_URL=http://php:8000 + - SELENIUM_HOST=selenium.chrome + - SELENIUM_PORT=4444 + depends_on: + - php + - selenium.chrome + volumes: + - ./test/acceptance:/tests + + test-acceptance.nightmare: + build: . + environment: + - CODECEPT_ARGS=-c codecept.Nightmare.js --grep @Nightmare + - SITE_URL=http://php:8000 + - SELENIUM_HOST=selenium.chrome + - SELENIUM_PORT=4444 + depends_on: + - php + - selenium.chrome + volumes: + - ./test/acceptance:/tests + selenium.chrome: image: selenium/standalone-chrome:3.5.2-antimony ports: diff --git a/test/acceptance/codecept.Nightmare.js b/test/acceptance/codecept.Nightmare.js new file mode 100644 index 000000000..bdc6c2cff --- /dev/null +++ b/test/acceptance/codecept.Nightmare.js @@ -0,0 +1,16 @@ +const TestHelper = require('/test/support/TestHelper'); + +module.exports.config = { + tests: "./*_test.js", + timeout: 10000, + output: "./output", + helpers: { + Nightmare: { + url: TestHelper.siteUrl() + } + }, + include: {}, + bootstrap: false, + mocha: {}, + name: "acceptance" +} diff --git a/test/acceptance/codecept.Nightmare.json b/test/acceptance/codecept.Nightmare.json deleted file mode 100644 index e94172434..000000000 --- a/test/acceptance/codecept.Nightmare.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "tests": "./*_test.js", - "timeout": 10000, - "output": "./output", - "helpers": { - "Nightmare": { - "url": "http://127.0.0.1:8000" - } - }, - "include": {}, - "bootstrap": false, - "mocha": {}, - "name": "acceptance" -} \ No newline at end of file diff --git a/test/acceptance/codecept.WebDriverIO.js b/test/acceptance/codecept.WebDriverIO.js new file mode 100644 index 000000000..15ce18eb2 --- /dev/null +++ b/test/acceptance/codecept.WebDriverIO.js @@ -0,0 +1,20 @@ +const TestHelper = require('/test/support/TestHelper'); + +module.exports.config = { + tests: "./*_test.js", + timeout: 10000, + output: "./output", + helpers: { + WebDriverIO: { + url: TestHelper.siteUrl(), + browser: "chrome", + host: TestHelper.seleniumHost(), + port: TestHelper.seleniumPort() + } + + }, + include: {}, + bootstrap: false, + mocha: {}, + name: "acceptance" +} diff --git a/test/acceptance/codecept.WebDriverIO.json b/test/acceptance/codecept.WebDriverIO.json deleted file mode 100644 index ee3a6f708..000000000 --- a/test/acceptance/codecept.WebDriverIO.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "tests": "./*_test.js", - "timeout": 10000, - "output": "./output", - "helpers": { - "WebDriverIO": { - "url": "http://127.0.0.1:8000", - "browser": "chrome" - } - - }, - "include": {}, - "bootstrap": false, - "mocha": {}, - "name": "acceptance" -} \ No newline at end of file diff --git a/test/acceptance/within_test.js b/test/acceptance/within_test.js index 1f372ff75..5c1644c14 100644 --- a/test/acceptance/within_test.js +++ b/test/acceptance/within_test.js @@ -1,6 +1,6 @@ Feature('within'); -Scenario('within on form @WebDriverIO @protractor @nightmare', (I) => { +Scenario('within on form @WebDriverIO @Protractor @Nightmare', (I) => { I.amOnPage('/form/bug1467'); I.see('TEST TEST'); within({css: '[name=form2]'}, () => { @@ -22,7 +22,7 @@ Scenario('within on iframe @WebDriverIO @Nightmare', (I) => { I.dontSee('Email Address'); }); -Scenario('within on nested iframe @nightmare', (I) => { +Scenario('within on nested iframe @Nightmare', (I) => { I.amOnPage('/iframe'); within({frame: ['[name=content]']}, () => { I.fillField('rus', 'Updated'); @@ -31,4 +31,4 @@ Scenario('within on nested iframe @nightmare', (I) => { }); I.see('Iframe test'); I.dontSee('Email Address'); -}); \ No newline at end of file +}); From 9a2f9aa7b2ed33529c71d4c1b9c12ceebc0f33d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Thu, 19 Oct 2017 16:18:29 +0200 Subject: [PATCH 08/20] [docker-compose] move env variables to .env file --- .env | 4 ++++ docker-compose.yml | 14 +++----------- 2 files changed, 7 insertions(+), 11 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 000000000..0dae31b63 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +SITE_URL=http://php:8000 +SELENIUM_HOST=selenium.chrome +SELENIUM_PORT=4444 +JSON_SERVER_URL=http://json_server:8010 diff --git a/docker-compose.yml b/docker-compose.yml index 9532417e1..765b34c42 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,11 +5,7 @@ services: entrypoint: docker/entrypoint node_modules/.bin/mocha --invert --fgrep Appium command: test/helper working_dir: /codecept - environment: - - SITE_URL=http://php:8000 - - SELENIUM_HOST=selenium.chrome - - SELENIUM_PORT=4444 - - JSON_SERVER_URL=http://json_server:8010 + env_file: .env depends_on: - selenium.chrome - php @@ -19,11 +15,9 @@ services: test-acceptance.webdriverio: build: . + env_file: .env environment: - CODECEPT_ARGS=-c codecept.WebDriverIO.js --grep @WebDriverIO - - SITE_URL=http://php:8000 - - SELENIUM_HOST=selenium.chrome - - SELENIUM_PORT=4444 depends_on: - php - selenium.chrome @@ -32,11 +26,9 @@ services: test-acceptance.nightmare: build: . + env_file: .env environment: - CODECEPT_ARGS=-c codecept.Nightmare.js --grep @Nightmare - - SITE_URL=http://php:8000 - - SELENIUM_HOST=selenium.chrome - - SELENIUM_PORT=4444 depends_on: - php - selenium.chrome From 1ab6f30f211cf7b17ac83f4398606d946ae75434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Thu, 19 Oct 2017 17:13:27 +0200 Subject: [PATCH 09/20] Move docker-compose.yml and .env to /test dir --- docker/entrypoint | 2 +- .env => test/.env | 0 docker-compose.yml => test/docker-compose.yml | 16 ++++++++-------- 3 files changed, 9 insertions(+), 9 deletions(-) rename .env => test/.env (100%) rename docker-compose.yml => test/docker-compose.yml (86%) diff --git a/docker/entrypoint b/docker/entrypoint index 3e8387855..0e313dc8a 100755 --- a/docker/entrypoint +++ b/docker/entrypoint @@ -1,4 +1,4 @@ #!/usr/bin/env bash set -e -xvfb-run --server-args="-screen 0 1024x768x24" "$@" +xvfb-run -a --server-args="-screen 0 1024x768x24" "$@" diff --git a/.env b/test/.env similarity index 100% rename from .env rename to test/.env diff --git a/docker-compose.yml b/test/docker-compose.yml similarity index 86% rename from docker-compose.yml rename to test/docker-compose.yml index 765b34c42..b3a3867ab 100644 --- a/docker-compose.yml +++ b/test/docker-compose.yml @@ -1,7 +1,7 @@ version: '3' services: test-helpers: - build: . + build: .. entrypoint: docker/entrypoint node_modules/.bin/mocha --invert --fgrep Appium command: test/helper working_dir: /codecept @@ -11,10 +11,10 @@ services: - php - json_server volumes: - - .:/codecept + - ..:/codecept test-acceptance.webdriverio: - build: . + build: .. env_file: .env environment: - CODECEPT_ARGS=-c codecept.WebDriverIO.js --grep @WebDriverIO @@ -22,10 +22,10 @@ services: - php - selenium.chrome volumes: - - ./test/acceptance:/tests + - ./acceptance:/tests test-acceptance.nightmare: - build: . + build: .. env_file: .env environment: - CODECEPT_ARGS=-c codecept.Nightmare.js --grep @Nightmare @@ -33,7 +33,7 @@ services: - php - selenium.chrome volumes: - - ./test/acceptance:/tests + - ./acceptance:/tests selenium.chrome: image: selenium/standalone-chrome:3.5.2-antimony @@ -46,7 +46,7 @@ services: ports: - 8000:8000 volumes: - - ./test:/test + - .:/test json_server: image: node:alpine @@ -55,5 +55,5 @@ services: expose: - 8010 volumes: - - .:/codecept + - ..:/codecept From 4c9f0bea9c335fbe28d1dd02d09a0c0f69dd24da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Wed, 25 Oct 2017 14:57:39 +0200 Subject: [PATCH 10/20] [test/acceptance] Fix nightmare within tests --- test/acceptance/within_test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/acceptance/within_test.js b/test/acceptance/within_test.js index 5c1644c14..de19617d4 100644 --- a/test/acceptance/within_test.js +++ b/test/acceptance/within_test.js @@ -16,7 +16,7 @@ Scenario('within on iframe @WebDriverIO @Nightmare', (I) => { within({frame: 'iframe'}, () => { I.fillField('rus', 'Updated'); I.click('Sign in!'); - I.see('Email Address'); + I.waitForText('Email Address'); }); I.see('Iframe test'); I.dontSee('Email Address'); @@ -27,7 +27,7 @@ Scenario('within on nested iframe @Nightmare', (I) => { within({frame: ['[name=content]']}, () => { I.fillField('rus', 'Updated'); I.click('Sign in!'); - I.see('Email Address'); + I.waitForText('Email Address'); }); I.see('Iframe test'); I.dontSee('Email Address'); From 801a7d3e51db653a041c6695e8508ee19d0f2bcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Wed, 25 Oct 2017 15:05:00 +0200 Subject: [PATCH 11/20] [.travis.yml] Use dockerized helpers & rest tests --- .travis.yml | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 553066bd4..3f1e65382 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,17 +19,8 @@ addons: - php5-cli services: - docker -before_install: -- docker pull selenium/standalone-chrome:2.53.0 -before_script: -- docker run -d --net=host selenium/standalone-chrome:2.53.0 -- export DISPLAY=:99.0 -- sh -e /etc/init.d/xvfb start -- chmod -R 777 test/data -- php -S 127.0.0.1:8000 -t test/data/app >/dev/null 2>&1 & -- npm run json-server & -- sleep 10 script: - gulp test -- './node_modules/.bin/mocha test/rest' -- './node_modules/.bin/mocha test/helper/${HELPER}_test.js' +- cd test +- docker-compose run --rm test-helpers test/rest +- docker-compose run --rm test-helpers test/helper/${HELPER}_test.js From 7d1f5d098fedcc0de5b2ee9f2aaac3041067bad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Wed, 25 Oct 2017 15:46:55 +0200 Subject: [PATCH 12/20] [.travis.yml] Remove php5-cli --- .travis.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3f1e65382..e24e07111 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,10 +13,6 @@ env: - HELPER=Nightmare - HELPER=SeleniumWebdriver - HELPER=WebDriverIO -addons: - apt: - packages: - - php5-cli services: - docker script: From 27694c5a5e1feca718c5627e0e50a2b6ed59d1df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Wed, 25 Oct 2017 16:38:55 +0200 Subject: [PATCH 13/20] [test/docker-compose] Add `test-unit` service --- test/docker-compose.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/docker-compose.yml b/test/docker-compose.yml index b3a3867ab..c44425878 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -1,5 +1,13 @@ version: '3' services: + test-unit: + build: .. + entrypoint: node_modules/.bin/gulp + command: test + working_dir: /codecept + volumes: + - ..:/codecept + test-helpers: build: .. entrypoint: docker/entrypoint node_modules/.bin/mocha --invert --fgrep Appium From 313d758f4816f7cce3faef4ea4f87ef1f1aebeba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Wed, 25 Oct 2017 16:39:18 +0200 Subject: [PATCH 14/20] [Dockerfile] Various fixes - Support passing NODE_VERSION as build arg - Reorder instructions to not reinstall npm packages if package.json doesn't change - Use COPY instead of ADD --- Dockerfile | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/Dockerfile b/Dockerfile index 497cc0b0e..1aff72429 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,29 +1,30 @@ -FROM node:6.9.5 -# LTS +ARG NODE_VERSION=6.9.5 +FROM node:${NODE_VERSION} - # Set grep as an ENV variable -ENV CODECEPT_ARGS="" +# Add our user and group first to make sure their IDs get assigned consistently, +# regardless of whatever dependencies get added. +RUN groupadd --system nightmare && useradd --system --create-home --gid nightmare nightmare - # Set HOST ENV variable for Selenium Server -ENV HOST=selenium +# Installing the pre-required packages and libraries for electron & Nightmare +RUN apt-get update && \ + apt-get install -y libgtk2.0-0 libgconf-2-4 \ + libasound2 libxtst6 libxss1 libnss3 xvfb - # Add our user and group first to make sure their IDs get assigned consistently, - # regardless of whatever dependencies get added. -RUN groupadd --system nightmare && useradd --system --create-home --gid nightmare nightmare +COPY package.json / - # Installing the pre-required packages and libraries for electron & Nightmare -RUN apt-get update && \ - apt-get install -y libgtk2.0-0 libgconf-2-4 \ - libasound2 libxtst6 libxss1 libnss3 xvfb +# Install latest version of Nightmare +RUN npm install -ADD . / +COPY . / - # Install latest version of Nightmare -RUN npm install +# Allow to pass argument to codecept run via env variable +ENV CODECEPT_ARGS="" - # Set the entrypoint for Nightmare -ENTRYPOINT ["/docker/entrypoint"] +# Set HOST ENV variable for Selenium Server +ENV HOST=selenium - # Run tests -CMD ["bash", "/docker/run.sh"] +# Set the entrypoint for Nightmare +ENTRYPOINT ["/docker/entrypoint"] +# Run tests +CMD ["bash", "/docker/run.sh"] From f57892fb76f197aa712a203910b8f05a01e10d23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Wed, 25 Oct 2017 16:40:57 +0200 Subject: [PATCH 15/20] [.travis.yml] Fully dockerized tests - Run unit tests in docker container - Use generic language instead of node --- .travis.yml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index e24e07111..c1dfe561f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,8 @@ -language: node_js -node_js: -- 6 -- 8 +language: generic + sudo: required dist: trusty + env: global: - secure: vLPyF/U+KhmWAXMkcrYFben6Qo5Tsk9nExbb/YTxCCqtpu5FlCcKZ0h/7OXJT9sXR7t8dmz564VbAtbhazPU+2FdpxIoR/D6OUeZa1WhyB5GGfpfHmfIe1hQTsZg0B0zGrrpcLBeaTA1E7+0lBhIKj9S1FoApa6xfP21bju+IddpD881m0bdF/2gEiBrabWHoQieWLNgS4EzUI5IcOknz4bk3nx6ztldJOokwTqUy2RgtVbMkJf0v6LbBOxT5uCwlLYxllDwY6fIatPP7Gol5V2fxMYhp4k/QSeULy81EJBpVhW0Bw5FfGBBVnqk495fhCjRNbjwzcs2zz2dD1i99KeIFhfKYQsfto7odHbt0kasYgaQQUZEZsbY6ScYMDXnzprTCotolmPXJmqu0rHnUfa2ZZxl9/jNis1IoCdwsvJ+cemL13fw9llFvnMGtmqDc9ltjzKoRfi8rpUH5x6EbnUE6vdr0RDA+D3mUbFr2kxlMwQPTpujnxOghpuDnDc/2CGe17uklssw2g2vMxdIuiqxXvKkeN0xBddtlbUx2PwRrecjCmv7RE13j+ERsIysDQUkTMnXTWBumtVGmdxZpFhxD7wwmVFi3qjq4FGyO3f8alnfYOBspPhLgC2PTJGS/X23C9LC08tFl6MpeHD97HUaW6bx+ObI2/0jBsDXB3k= @@ -13,10 +12,19 @@ env: - HELPER=Nightmare - HELPER=SeleniumWebdriver - HELPER=WebDriverIO + matrix: + - NODE_VERSION=6.9.5 + - NODE_VERSION=8.7.0 + services: - docker + +before_install: +- cd test +- docker-compose build --build-arg NODE_VERSION=${NODE_VERSION} test-unit test-helpers + script: -- gulp test - cd test +- docker-compose run --rm test-unit - docker-compose run --rm test-helpers test/rest - docker-compose run --rm test-helpers test/helper/${HELPER}_test.js From 1f81f2680a26d7e8ac3f013c7078d58063c459c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Wed, 25 Oct 2017 16:52:19 +0200 Subject: [PATCH 16/20] [Docker & docker-compose] Optimizations & travisCI - Use dockerized tests on travisCI - Share node_modules as volume between containers --- .travis.yml | 19 +++++++++++-------- Dockerfile | 18 ++++++++++++------ docker/run.sh | 4 ++-- test/docker-compose.yml | 10 +++++++++- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index c1dfe561f..fda12e2aa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,23 +8,26 @@ env: - secure: vLPyF/U+KhmWAXMkcrYFben6Qo5Tsk9nExbb/YTxCCqtpu5FlCcKZ0h/7OXJT9sXR7t8dmz564VbAtbhazPU+2FdpxIoR/D6OUeZa1WhyB5GGfpfHmfIe1hQTsZg0B0zGrrpcLBeaTA1E7+0lBhIKj9S1FoApa6xfP21bju+IddpD881m0bdF/2gEiBrabWHoQieWLNgS4EzUI5IcOknz4bk3nx6ztldJOokwTqUy2RgtVbMkJf0v6LbBOxT5uCwlLYxllDwY6fIatPP7Gol5V2fxMYhp4k/QSeULy81EJBpVhW0Bw5FfGBBVnqk495fhCjRNbjwzcs2zz2dD1i99KeIFhfKYQsfto7odHbt0kasYgaQQUZEZsbY6ScYMDXnzprTCotolmPXJmqu0rHnUfa2ZZxl9/jNis1IoCdwsvJ+cemL13fw9llFvnMGtmqDc9ltjzKoRfi8rpUH5x6EbnUE6vdr0RDA+D3mUbFr2kxlMwQPTpujnxOghpuDnDc/2CGe17uklssw2g2vMxdIuiqxXvKkeN0xBddtlbUx2PwRrecjCmv7RE13j+ERsIysDQUkTMnXTWBumtVGmdxZpFhxD7wwmVFi3qjq4FGyO3f8alnfYOBspPhLgC2PTJGS/X23C9LC08tFl6MpeHD97HUaW6bx+ObI2/0jBsDXB3k= - secure: OlLkzBUwlRFIa5xDWEs/It6ofSfC+pXRVt17kTyox8beH5qu5Ks3/Zwa48YMqHKnbNHI7hiRBO2YfsJgjYJoQ5/ovKPa3rvffNXdKeDZpt+lQqlhjJYpgp0pNgck45RKnFj1pKpQCVG6dWWcT59Gi8NoI8AsAVCVgFtO8McfV8qbks6G2UP0GdFR5s6tRyZTjfCVmMNtJX9veYuibwoiwRyFhh1FY+sw5BvAONSBdOWmcK7RdDm7IE+Oitzn3bRZnC6sgLNpy6qhncED/pbn4GFD5MRlu0UkDGDfXldsOyjOtqdaN5WbOGdhevaYgr/5VvSeMbO7fITlDXbhz9pViogl6fnxj0zELZvG6b6H7nAVV29uzHP4jofocP41h33rvYnQUTfNHN8HIRN4LVfekN2I27GDO+J1QFiWNN/36nhsRH9tWPwSNC2f9QLIf6OrD60FVUIMlQrFHqyrO4KZBZkRsGMgYzsa5XmGOGUATUBrmQVTynNQc+yhniJd4Q8LwwmXMDWNeoeg5eh0TFgERVDlkQ8tPaWOXmpHi6BL4JZlGz275SDWgZH4bnH2B1RzO1qcGN905vIo5snX8LwZbxSfXrt+4WP3jOi+1i8ZrFwACk7jlovJiJquQuZQ5dL7C9rBwpAWB8YjgOKNikDWvUrVnYGS/gLwrdN7+pRiims= matrix: - - HELPER=Protractor - - HELPER=Nightmare - - HELPER=SeleniumWebdriver - - HELPER=WebDriverIO - matrix: - - NODE_VERSION=6.9.5 - - NODE_VERSION=8.7.0 + - HELPER=Protractor NODE_VERSION=6.9.5 + - HELPER=Nightmare NODE_VERSION=6.9.5 + - HELPER=SeleniumWebdriver NODE_VERSION=6.9.5 + - HELPER=WebDriverIO NODE_VERSION=6.9.5 + + - HELPER=Protractor NODE_VERSION=8.7.0 + - HELPER=Nightmare NODE_VERSION=8.7.0 + - HELPER=SeleniumWebdriver NODE_VERSION=8.7.0 + - HELPER=WebDriverIO NODE_VERSION=8.7.0 services: - docker before_install: +- sudo apt-get update +- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce - cd test - docker-compose build --build-arg NODE_VERSION=${NODE_VERSION} test-unit test-helpers script: -- cd test - docker-compose run --rm test-unit - docker-compose run --rm test-helpers test/rest - docker-compose run --rm test-helpers test/helper/${HELPER}_test.js diff --git a/Dockerfile b/Dockerfile index 1aff72429..998cb8e04 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,12 +10,18 @@ RUN apt-get update && \ apt-get install -y libgtk2.0-0 libgconf-2-4 \ libasound2 libxtst6 libxss1 libnss3 xvfb -COPY package.json / +WORKDIR /tmp +COPY package.json /tmp/ -# Install latest version of Nightmare -RUN npm install +# Install packages +RUN npm install --loglevel=warn -COPY . / +RUN mkdir /codecept +WORKDIR /codecept + +COPY . /codecept + +RUN cp -a /tmp/node_modules /codecept/ # Allow to pass argument to codecept run via env variable ENV CODECEPT_ARGS="" @@ -24,7 +30,7 @@ ENV CODECEPT_ARGS="" ENV HOST=selenium # Set the entrypoint for Nightmare -ENTRYPOINT ["/docker/entrypoint"] +ENTRYPOINT ["docker/entrypoint"] # Run tests -CMD ["bash", "/docker/run.sh"] +CMD ["bash", "docker/run.sh"] diff --git a/docker/run.sh b/docker/run.sh index 133e3a85c..674ac3830 100755 --- a/docker/run.sh +++ b/docker/run.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source /docker/help.sh +source docker/help.sh # Check if tests are correctly mounted if [[ -d "/tests/" ]]; then @@ -8,7 +8,7 @@ if [[ -d "/tests/" ]]; then # Run the tests cd /tests/ - node /bin/codecept.js run $CODECEPT_ARGS + node /codecept/bin/codecept.js run $CODECEPT_ARGS else display_usage fi diff --git a/test/docker-compose.yml b/test/docker-compose.yml index c44425878..2f9320512 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -7,6 +7,7 @@ services: working_dir: /codecept volumes: - ..:/codecept + - node_modules:/codecept/node_modules test-helpers: build: .. @@ -20,6 +21,7 @@ services: - json_server volumes: - ..:/codecept + - node_modules:/codecept/node_modules test-acceptance.webdriverio: build: .. @@ -31,6 +33,7 @@ services: - selenium.chrome volumes: - ./acceptance:/tests + - node_modules:/codecept/node_modules test-acceptance.nightmare: build: .. @@ -42,6 +45,7 @@ services: - selenium.chrome volumes: - ./acceptance:/tests + - node_modules:/codecept/node_modules selenium.chrome: image: selenium/standalone-chrome:3.5.2-antimony @@ -57,11 +61,15 @@ services: - .:/test json_server: - image: node:alpine + build: .. + entrypoint: [] command: npm run json-server working_dir: /codecept expose: - 8010 volumes: - ..:/codecept + - node_modules:/codecept/node_modules +volumes: + node_modules: From f7331fae184f5d0ed18cc187f6a686126763bb46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Fri, 27 Oct 2017 13:07:42 +0200 Subject: [PATCH 17/20] [test/acceptance] relative path to TestHelper --- test/acceptance/codecept.Nightmare.js | 2 +- test/acceptance/codecept.WebDriverIO.js | 2 +- test/docker-compose.yml | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/test/acceptance/codecept.Nightmare.js b/test/acceptance/codecept.Nightmare.js index bdc6c2cff..a76ecdb92 100644 --- a/test/acceptance/codecept.Nightmare.js +++ b/test/acceptance/codecept.Nightmare.js @@ -1,4 +1,4 @@ -const TestHelper = require('/test/support/TestHelper'); +const TestHelper = require('../support/TestHelper'); module.exports.config = { tests: "./*_test.js", diff --git a/test/acceptance/codecept.WebDriverIO.js b/test/acceptance/codecept.WebDriverIO.js index 15ce18eb2..d4485e063 100644 --- a/test/acceptance/codecept.WebDriverIO.js +++ b/test/acceptance/codecept.WebDriverIO.js @@ -1,4 +1,4 @@ -const TestHelper = require('/test/support/TestHelper'); +const TestHelper = require('../support/TestHelper.js'); module.exports.config = { tests: "./*_test.js", diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 2f9320512..ccb343309 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -33,6 +33,7 @@ services: - selenium.chrome volumes: - ./acceptance:/tests + - ./support:/support - node_modules:/codecept/node_modules test-acceptance.nightmare: @@ -45,6 +46,7 @@ services: - selenium.chrome volumes: - ./acceptance:/tests + - ./support:/support - node_modules:/codecept/node_modules selenium.chrome: From 4521a60e86ed0b28c18ea322ae217d523c173d2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Fri, 27 Oct 2017 13:24:08 +0200 Subject: [PATCH 18/20] [CONTRIBUTING.md] Add info about dockerized tests --- CONTRIBUTING.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fc3c07fad..a426f7c56 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -108,3 +108,49 @@ mocha test/runner ``` Please try to add corresponding testcase to runner or unit. + +## Running tests in Dockerized environment +Instead of manually running php, json_server and selenium for before tests you +can use `docker-compose` to run those automatically. +You can find `docker-compose.yml` file in `test` directory and run all commands +from this directory. Currently we provide following commands to run tests with +respective dependencies: + +### Run unit tests +``` shell +docker-compose run --rm test-unit +``` + +### Run helper tests +``` shell +docker-compose run --rm test-helpers + +# or pass path to helper test to run specific helper, +# for example to run only WebDriverIO tests: +docker-compose run --rm test-helpers test/helper/WebDriverIO_test.js + +# Or to run only rest and ApiDataFactory tests +docker-compose run --rm test-helpers test/rest +``` + +### Run acceptance tests +To that we provide two separate services respectively for WebDriverIO and +Nightmare tests: +``` shell +docker-compose run --rm test-acceptance.webdriverio +docker-compose run --rm test-acceptance.nightmare +``` + +### Running against specific Node version +By default dockerized tests are run against node 6.9.5, you can run it against +specific version as long as there is Docker container available for such +version. To do that you need to build codecept's Docker image prior to running +tests and pass `NODE_VERSION` as build argument. + +For example to prepare `test-helpers` containers based on node 8.7.0: +``` shell +docker-compose build --build-arg NODE_VERSION=8.7.0 test-helpers +``` + +And now every command based on `test-helpers` service will use node 8.7.0. The +same argument can be passed when building unit and acceptance tests services. From 8a8942703f2a8b07a7be746bee26cf48b86d5b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Fri, 27 Oct 2017 13:42:05 +0200 Subject: [PATCH 19/20] [.travis.yml] check-out from master :D --- .travis.yml | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/.travis.yml b/.travis.yml index fda12e2aa..553066bd4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,33 +1,35 @@ -language: generic - +language: node_js +node_js: +- 6 +- 8 sudo: required dist: trusty - env: global: - secure: vLPyF/U+KhmWAXMkcrYFben6Qo5Tsk9nExbb/YTxCCqtpu5FlCcKZ0h/7OXJT9sXR7t8dmz564VbAtbhazPU+2FdpxIoR/D6OUeZa1WhyB5GGfpfHmfIe1hQTsZg0B0zGrrpcLBeaTA1E7+0lBhIKj9S1FoApa6xfP21bju+IddpD881m0bdF/2gEiBrabWHoQieWLNgS4EzUI5IcOknz4bk3nx6ztldJOokwTqUy2RgtVbMkJf0v6LbBOxT5uCwlLYxllDwY6fIatPP7Gol5V2fxMYhp4k/QSeULy81EJBpVhW0Bw5FfGBBVnqk495fhCjRNbjwzcs2zz2dD1i99KeIFhfKYQsfto7odHbt0kasYgaQQUZEZsbY6ScYMDXnzprTCotolmPXJmqu0rHnUfa2ZZxl9/jNis1IoCdwsvJ+cemL13fw9llFvnMGtmqDc9ltjzKoRfi8rpUH5x6EbnUE6vdr0RDA+D3mUbFr2kxlMwQPTpujnxOghpuDnDc/2CGe17uklssw2g2vMxdIuiqxXvKkeN0xBddtlbUx2PwRrecjCmv7RE13j+ERsIysDQUkTMnXTWBumtVGmdxZpFhxD7wwmVFi3qjq4FGyO3f8alnfYOBspPhLgC2PTJGS/X23C9LC08tFl6MpeHD97HUaW6bx+ObI2/0jBsDXB3k= - secure: OlLkzBUwlRFIa5xDWEs/It6ofSfC+pXRVt17kTyox8beH5qu5Ks3/Zwa48YMqHKnbNHI7hiRBO2YfsJgjYJoQ5/ovKPa3rvffNXdKeDZpt+lQqlhjJYpgp0pNgck45RKnFj1pKpQCVG6dWWcT59Gi8NoI8AsAVCVgFtO8McfV8qbks6G2UP0GdFR5s6tRyZTjfCVmMNtJX9veYuibwoiwRyFhh1FY+sw5BvAONSBdOWmcK7RdDm7IE+Oitzn3bRZnC6sgLNpy6qhncED/pbn4GFD5MRlu0UkDGDfXldsOyjOtqdaN5WbOGdhevaYgr/5VvSeMbO7fITlDXbhz9pViogl6fnxj0zELZvG6b6H7nAVV29uzHP4jofocP41h33rvYnQUTfNHN8HIRN4LVfekN2I27GDO+J1QFiWNN/36nhsRH9tWPwSNC2f9QLIf6OrD60FVUIMlQrFHqyrO4KZBZkRsGMgYzsa5XmGOGUATUBrmQVTynNQc+yhniJd4Q8LwwmXMDWNeoeg5eh0TFgERVDlkQ8tPaWOXmpHi6BL4JZlGz275SDWgZH4bnH2B1RzO1qcGN905vIo5snX8LwZbxSfXrt+4WP3jOi+1i8ZrFwACk7jlovJiJquQuZQ5dL7C9rBwpAWB8YjgOKNikDWvUrVnYGS/gLwrdN7+pRiims= matrix: - - HELPER=Protractor NODE_VERSION=6.9.5 - - HELPER=Nightmare NODE_VERSION=6.9.5 - - HELPER=SeleniumWebdriver NODE_VERSION=6.9.5 - - HELPER=WebDriverIO NODE_VERSION=6.9.5 - - - HELPER=Protractor NODE_VERSION=8.7.0 - - HELPER=Nightmare NODE_VERSION=8.7.0 - - HELPER=SeleniumWebdriver NODE_VERSION=8.7.0 - - HELPER=WebDriverIO NODE_VERSION=8.7.0 - + - HELPER=Protractor + - HELPER=Nightmare + - HELPER=SeleniumWebdriver + - HELPER=WebDriverIO +addons: + apt: + packages: + - php5-cli services: - docker - before_install: -- sudo apt-get update -- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce -- cd test -- docker-compose build --build-arg NODE_VERSION=${NODE_VERSION} test-unit test-helpers - +- docker pull selenium/standalone-chrome:2.53.0 +before_script: +- docker run -d --net=host selenium/standalone-chrome:2.53.0 +- export DISPLAY=:99.0 +- sh -e /etc/init.d/xvfb start +- chmod -R 777 test/data +- php -S 127.0.0.1:8000 -t test/data/app >/dev/null 2>&1 & +- npm run json-server & +- sleep 10 script: -- docker-compose run --rm test-unit -- docker-compose run --rm test-helpers test/rest -- docker-compose run --rm test-helpers test/helper/${HELPER}_test.js +- gulp test +- './node_modules/.bin/mocha test/rest' +- './node_modules/.bin/mocha test/helper/${HELPER}_test.js' From 3a04c01e12a08de5d49befeeced93f5792cdfe3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20P=C5=82oskonka?= Date: Wed, 1 Nov 2017 11:36:03 +0100 Subject: [PATCH 20/20] wercker --- test/wercker.yml | 15 +++++++++++++++ wercker.yml | 13 +++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 test/wercker.yml create mode 100644 wercker.yml diff --git a/test/wercker.yml b/test/wercker.yml new file mode 100644 index 000000000..9df35f55f --- /dev/null +++ b/test/wercker.yml @@ -0,0 +1,15 @@ +box: + id: docker/compose:1.16.0 + cmd: /bin/sh + entrypoint: /bin/bash -c + +build: + steps: + - script: + code: | + echo "HELLO WORLD" + +# test: +# steps: +# - script: +# code: docker-compose run --rm test-unit diff --git a/wercker.yml b/wercker.yml new file mode 100644 index 000000000..597b78aa0 --- /dev/null +++ b/wercker.yml @@ -0,0 +1,13 @@ +box: docker/compose:1.16.0 + +build: + steps: + - script: + code: | + cd test + docker-compose build --build-arg NODE_VERSION=6.9.5 + +test: + steps: + - script: + code: docker-compose run --rm test-unit