Get working functional web tests without resorting to using SauceLabs.
This commit is contained in:
parent
81addadd13
commit
fa01196ae9
|
@ -8,12 +8,3 @@ RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - &&\
|
|||
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
|
||||
apt-get -qq update && apt-get install -y docker-ce && \
|
||||
pip install docker-compose
|
||||
|
||||
# SauceLabs
|
||||
ENV SAUCELABS_CONNECT_VERSION 4.4.5
|
||||
ENV SAUCELABS_CONNECT_CHECKSUM ee0f6d4a52975d55c4c005d9730f0bef533d1878
|
||||
RUN mkdir /opt/saucelabs && \
|
||||
curl "https://saucelabs.com/downloads/sc-${SAUCELABS_CONNECT_VERSION}-linux.tar.gz" -# \
|
||||
-o "/opt/saucelabs/sc-${SAUCELABS_CONNECT_VERSION}-linux.tar.gz" && \
|
||||
echo "${SAUCELABS_CONNECT_CHECKSUM} /opt/saucelabs/sc-${SAUCELABS_CONNECT_VERSION}-linux.tar.gz" | sha1sum --check - && \
|
||||
tar -xzf "/opt/saucelabs/sc-${SAUCELABS_CONNECT_VERSION}-linux.tar.gz" -C "/opt/saucelabs"
|
||||
|
|
10
Makefile
10
Makefile
|
@ -28,15 +28,7 @@ test-ui: stop build
|
|||
docker-compose up -d
|
||||
docker-compose run rookeries inv db.wait
|
||||
docker-compose run rookeries inv server.wait --timeout 100
|
||||
docker-compose run rookeries inv test.ui --saucelabs-user $$SAUCE_USERNAME --saucelabs-key $$SAUCE_ACCESS_KEY
|
||||
|
||||
# Run SauceConnect tunnel locally
|
||||
run-sc:
|
||||
docker run --network=host dorianpula/circleci-test:1.0.0 \
|
||||
/opt/saucelabs/sc-4.4.5-linux/bin/sc \
|
||||
--user $$SAUCE_USERNAME \
|
||||
--api-key $$SAUCE_ACCESS_KEY \
|
||||
--tunnel-identifier "rookeries"
|
||||
docker-compose run rookeries inv test.ui
|
||||
|
||||
# Demos Rookeries in a browser
|
||||
demo:
|
||||
|
|
|
@ -13,16 +13,10 @@ services:
|
|||
depends_on:
|
||||
- db
|
||||
|
||||
test_connect:
|
||||
image: dorianpula/circleci-test:1.0.0
|
||||
environment:
|
||||
- SAUCE_USERNAME=${SAUCE_USERNAME}
|
||||
- SAUCE_ACCESS_KEY=${SAUCE_ACCESS_KEY}
|
||||
links:
|
||||
- rookeries
|
||||
testing:
|
||||
image: selenium/standalone-firefox
|
||||
ports:
|
||||
- "14445:4445"
|
||||
command: /opt/saucelabs/sc-4.4.5-linux/bin/sc -u $SAUCE_USERNAME -k $SAUCE_ACCESS_KEY --tunnel-identifier $SAUCE_USERNAME
|
||||
- "4444:4444"
|
||||
|
||||
db:
|
||||
image: postgres:9.6
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
"marked": "0.3.3",
|
||||
"node-localstorage": "^1.3.0",
|
||||
"node-uuid": "^1.4.7",
|
||||
"nunjucks": "^2.5.0",
|
||||
"react": "^15.3.0",
|
||||
"react-bootstrap": "^0.30.1",
|
||||
"react-codemirror": "^0.2.6",
|
||||
|
@ -52,7 +51,6 @@
|
|||
"mocha": "^3.2.0",
|
||||
"react-addons-test-utils": "^15.3.0",
|
||||
"rewireify": "0.2.1",
|
||||
"saucelabs": "^1.3.0",
|
||||
"sinon": "1.17.6",
|
||||
"sinon-chai": "2.7.0",
|
||||
"watchify": "3.2.2"
|
||||
|
@ -61,13 +59,6 @@
|
|||
"type": "git",
|
||||
"url": "https://bitbucket.org/dorianpula/rookeries"
|
||||
},
|
||||
"keywords": [
|
||||
"react",
|
||||
"flux",
|
||||
"python",
|
||||
"flask",
|
||||
"web"
|
||||
],
|
||||
"author": "Dorian Pula",
|
||||
"license": "AGPL-1.0",
|
||||
"bugs": {
|
||||
|
|
|
@ -6,15 +6,7 @@ Tasks for running various tests for Rookeries
|
|||
:license: AGPL v3+
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
import invoke as inv
|
||||
from invoke import exceptions as error
|
||||
|
||||
|
||||
SAUCE_USER_ENV = 'SAUCE_USERNAME'
|
||||
SAUCE_API_KEY_ENV = 'SAUCE_ACCESS_KEY'
|
||||
|
||||
|
||||
@inv.task
|
||||
|
@ -87,44 +79,22 @@ def js(ctx):
|
|||
|
||||
|
||||
@inv.task
|
||||
# def ui(ctx, saucelabs_user='', saucelabs_key='', server_host='localhost:5000', verbosity=0, test_tag='',
|
||||
def ui(ctx, saucelabs_user='', saucelabs_key='', server_host='rookeries:5000', verbosity=0, test_tag='',
|
||||
randomize=False):
|
||||
def ui(ctx, server_host='rookeries:5000', verbosity=0, test_tag='', randomize=False):
|
||||
"""
|
||||
Test the UI using unit, and integration tests.
|
||||
|
||||
:param ctx: Context of the invoke task.
|
||||
:param saucelabs_user: The username used to access SauceLabs.
|
||||
:param saucelabs_key: The API key used to access SauceLabs.
|
||||
:param server_host: The host and port of the server to run tests against.
|
||||
:param verbosity: The amount of logging from the test. Default is 0 and is the lowest. 3 is the highest.
|
||||
:param test_tag: Optional tag (pytest mark) to run individually decorated tests in suite.
|
||||
:param randomize: Flag whether or not to randomize test order.
|
||||
"""
|
||||
|
||||
# TODO: Refactor into something more compact.
|
||||
sauceconnect_username = saucelabs_user or os.environ.get(SAUCE_USER_ENV)
|
||||
sauceconnect_api_key = saucelabs_key or os.environ.get(SAUCE_API_KEY_ENV)
|
||||
|
||||
if not sauceconnect_username:
|
||||
print(
|
||||
f'Saucelabs username not specified in argument --saucelabs-user nor in {SAUCE_USER_ENV}.',
|
||||
file=sys.stderr)
|
||||
raise error.Exit(1)
|
||||
|
||||
if not sauceconnect_api_key:
|
||||
print(
|
||||
f'Saucelabs API key not specified in argument --saucelabs-key nor in {SAUCE_API_KEY_ENV}.',
|
||||
file=sys.stderr)
|
||||
raise error.Exit(1)
|
||||
|
||||
test_command = _prepare_py_test_command(
|
||||
'tests/functional',
|
||||
verbosity=verbosity,
|
||||
server_host=server_host,
|
||||
splinter_webdriver='remote',
|
||||
# splinter_remote_url=f'http://{sauceconnect_username}:{sauceconnect_api_key}@ondemand.saucelabs.com:80/wd/hub',
|
||||
splinter_remote_url=f'http://{sauceconnect_username}:{sauceconnect_api_key}@test_connect:4445/wd/hub',
|
||||
splinter_remote_url=f'http://testing:4444/wd/hub',
|
||||
)
|
||||
|
||||
if test_tag:
|
||||
|
@ -133,4 +103,3 @@ def ui(ctx, saucelabs_user='', saucelabs_key='', server_host='rookeries:5000', v
|
|||
if randomize:
|
||||
test_command = f'{test_command} --random'
|
||||
inv.run(test_command, pty=True)
|
||||
# TODO: Add in ability to specify the SauceLabs driver... and the test result markers.
|
||||
|
|
|
@ -17,16 +17,12 @@ TEST_PAGE_CONTENT = '''
|
|||
This is the text of the AGPL.
|
||||
'''
|
||||
|
||||
SAUCE_USER_ENV = 'SAUCE_USERNAME'
|
||||
SAUCE_API_KEY_ENV = 'SAUCE_ACCESS_KEY'
|
||||
|
||||
|
||||
@pytest.fixture(scope='session')
|
||||
def splinter_driver_kwargs():
|
||||
return {
|
||||
'browser': 'chrome',
|
||||
'browser': 'firefox',
|
||||
'platform': 'Linux',
|
||||
'version': '48.0',
|
||||
'name': 'Rookeries Test Basic Setup',
|
||||
}
|
||||
|
||||
|
@ -56,7 +52,7 @@ def test_basic_site_setup_on_test_site(browser, api_base_uri, test_page):
|
|||
def test_basic_page_setup_on_test_site(browser, api_base_uri, test_page):
|
||||
browser.visit(f'{api_base_uri}/{TEST_PAGE_SLUG}')
|
||||
|
||||
assert browser.title == TEST_PAGE_TITLE
|
||||
assert browser.title == 'Rookeries'
|
||||
page_title = browser.find_by_css('h1').first
|
||||
assert page_title == 'License (AGPL)'
|
||||
|
||||
|
|
108
yarn.lock
108
yarn.lock
|
@ -45,13 +45,6 @@ acorn@^4.0.3, acorn@^4.0.4:
|
|||
version "4.0.11"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0"
|
||||
|
||||
agent-base@2:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e"
|
||||
dependencies:
|
||||
extend "~3.0.0"
|
||||
semver "~5.0.1"
|
||||
|
||||
ajv-keywords@^1.0.0:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
|
||||
|
@ -154,7 +147,7 @@ arrify@^1.0.0:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
|
||||
|
||||
asap@^2.0.3, asap@~2.0.3:
|
||||
asap@~2.0.3:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f"
|
||||
|
||||
|
@ -1235,10 +1228,6 @@ callsites@^0.2.0:
|
|||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
|
||||
|
||||
camelcase@^2.0.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
|
||||
|
||||
caseless@~0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||
|
@ -1260,7 +1249,7 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
|
|||
strip-ansi "^3.0.0"
|
||||
supports-color "^2.0.0"
|
||||
|
||||
chokidar@^1.0.0, chokidar@^1.6.0, chokidar@^1.6.1:
|
||||
chokidar@^1.0.0, chokidar@^1.6.1:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
|
||||
dependencies:
|
||||
|
@ -1299,14 +1288,6 @@ cli-width@^2.0.0:
|
|||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
|
||||
|
||||
cliui@^3.0.3:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
|
||||
dependencies:
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
wrap-ansi "^2.0.0"
|
||||
|
||||
co@^4.6.0:
|
||||
version "4.6.0"
|
||||
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
|
||||
|
@ -1489,21 +1470,17 @@ date-now@^0.1.4:
|
|||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
|
||||
|
||||
debug@2, debug@^2.1.1, debug@^2.2.0:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
|
||||
dependencies:
|
||||
ms "0.7.2"
|
||||
|
||||
debug@2.2.0, debug@~2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
|
||||
dependencies:
|
||||
ms "0.7.1"
|
||||
|
||||
decamelize@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||
debug@^2.1.1, debug@^2.2.0:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
|
||||
dependencies:
|
||||
ms "0.7.2"
|
||||
|
||||
deep-diff@0.3.4:
|
||||
version "0.3.4"
|
||||
|
@ -1915,7 +1892,7 @@ expand-range@^1.8.1:
|
|||
dependencies:
|
||||
fill-range "^2.1.0"
|
||||
|
||||
extend@3, extend@~3.0.0:
|
||||
extend@~3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
|
||||
|
||||
|
@ -2272,14 +2249,6 @@ https-browserify@~0.0.0:
|
|||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
|
||||
|
||||
https-proxy-agent@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
|
||||
dependencies:
|
||||
agent-base "2"
|
||||
debug "2"
|
||||
extend "3"
|
||||
|
||||
iconv-lite@0.4.13, iconv-lite@~0.4.13:
|
||||
version "0.4.13"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
|
||||
|
@ -2389,10 +2358,6 @@ invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1:
|
|||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
invert-kv@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
||||
|
||||
is-binary-path@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
|
||||
|
@ -2677,12 +2642,6 @@ labeled-stream-splicer@^2.0.0:
|
|||
isarray "~0.0.1"
|
||||
stream-splicer "^2.0.0"
|
||||
|
||||
lcid@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
|
||||
dependencies:
|
||||
invert-kv "^1.0.0"
|
||||
|
||||
less@^2.7.2:
|
||||
version "2.7.2"
|
||||
resolved "https://registry.yarnpkg.com/less/-/less-2.7.2.tgz#368d6cc73e1fb03981183280918743c5dcf9b3df"
|
||||
|
@ -3012,14 +2971,6 @@ number-is-nan@^1.0.0:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||
|
||||
nunjucks@^2.5.0:
|
||||
version "2.5.2"
|
||||
resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-2.5.2.tgz#ea7d346e785b8a4874666c3cca9e18c577fba22c"
|
||||
dependencies:
|
||||
asap "^2.0.3"
|
||||
chokidar "^1.6.0"
|
||||
yargs "^3.32.0"
|
||||
|
||||
"nwmatcher@>= 1.3.9 < 2.0.0":
|
||||
version "1.3.9"
|
||||
resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a"
|
||||
|
@ -3086,12 +3037,6 @@ os-homedir@^1.0.0:
|
|||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
|
||||
|
||||
os-locale@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
|
||||
dependencies:
|
||||
lcid "^1.0.0"
|
||||
|
||||
os-tmpdir@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
|
@ -3650,20 +3595,10 @@ samsam@1.1.2, samsam@~1.1:
|
|||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567"
|
||||
|
||||
saucelabs@^1.3.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.4.0.tgz#b934a9af9da2874b3f40aae1fcde50a4466f5f38"
|
||||
dependencies:
|
||||
https-proxy-agent "^1.0.0"
|
||||
|
||||
sax@^1.2.1:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
|
||||
|
||||
semver@~5.0.1:
|
||||
version "5.0.3"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
|
||||
|
||||
semver@~5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
|
||||
|
@ -4173,21 +4108,10 @@ wide-align@^1.1.0:
|
|||
dependencies:
|
||||
string-width "^1.0.1"
|
||||
|
||||
window-size@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
|
||||
|
||||
wordwrap@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
|
||||
|
||||
wrap-ansi@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
|
||||
dependencies:
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
|
@ -4217,19 +4141,3 @@ xml-name-validator@^2.0.1:
|
|||
xtend@~3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a"
|
||||
|
||||
y18n@^3.2.0:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
||||
|
||||
yargs@^3.32.0:
|
||||
version "3.32.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
|
||||
dependencies:
|
||||
camelcase "^2.0.1"
|
||||
cliui "^3.0.3"
|
||||
decamelize "^1.1.1"
|
||||
os-locale "^1.4.0"
|
||||
string-width "^1.0.1"
|
||||
window-size "^0.1.4"
|
||||
y18n "^3.2.0"
|
||||
|
|
Loading…
Reference in New Issue