Set "wd_host" directly in "behat.yml" instead of through "BEHAT_PARAMS"

The "wd_host" parameter of Selenium2 sessions specify the URL used by
the Selenium driver to connect with the Selenium server. Thus, when the
Selenium server is at a different host or port than the default one (for
example, when run on Drone) the "wd_host" parameter must be set for each
of the Selenium2 sessions defined in "behat.yml".

The "BEHAT_PARAMS" environment variable, which extends the "behat.yml"
configuration file, was used for that. However, this required adding to
the "BEHAT_PARAMS" in "run-local.sh" each new session added to
"behat.yml", including those added in the acceptance tests of apps.

To address that limitation, this commit introduces a simulated variable,
"selenium.server"; just before the acceptance tests are run the
"selenium.server" variable in the "wd_host" parameter is replaced in the
"behat.yml" file used by the acceptance tests. Note that the file that
is modified is the one inside the Docker container used to run the
acceptance tests, so the original file is not touched.

Note that a simulated variable is needed because Behat does not support
overridding nor setting configuration parameters with environment
variables.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
Daniel Calviño Sánchez 2018-06-22 18:29:08 +02:00
parent 082646f7e5
commit d70b6bc94b
2 changed files with 20 additions and 29 deletions

View File

@ -27,14 +27,18 @@ default:
Behat\MinkExtension:
sessions:
default:
selenium2: ~
selenium2:
wd_host: %selenium.server%
John:
selenium2: ~
selenium2:
wd_host: %selenium.server%
Jane:
selenium2: ~
selenium2:
wd_host: %selenium.server%
Rubeus:
# Rubeus uses a browser that has CSS grid support.
selenium2:
wd_host: %selenium.server%
capabilities:
firefox:
profile: %paths.base%/firefox-profiles/css-grid-enabled.zip

View File

@ -172,32 +172,19 @@ FILE_CONTENTS=$(<$ACCEPTANCE_TESTS_CONFIG_DIR/behat.yml)
echo "${FILE_CONTENTS//$ORIGINAL/$REPLACEMENT}" > $ACCEPTANCE_TESTS_CONFIG_DIR/behat.yml
if [ "$SELENIUM_SERVER" != "$DEFAULT_SELENIUM_SERVER" ]; then
# Set the Selenium server to be used by Mink; this extends the default
# configuration from "config/behat.yml".
export BEHAT_PARAMS='
{
"extensions": {
"Behat\\MinkExtension": {
"sessions": {
"default": {
"selenium2": {
"wd_host": "http://'"$SELENIUM_SERVER"'/wd/hub"
}
},
"John": {
"selenium2": {
"wd_host": "http://'"$SELENIUM_SERVER"'/wd/hub"
}
},
"Jane": {
"selenium2": {
"wd_host": "http://'"$SELENIUM_SERVER"'/wd/hub"
}
}
}
}
}
}'
# Set the Selenium server to be used by Mink. Although Mink sessions can be
# extended through BEHAT_PARAMS this would require adding here too each new
# session added to "behat.yml", including those added in the acceptance
# tests of apps. Instead, the default "behat.yml" configuration file is
# adjusted to replace the simulated "selenium.server" variable by its value
# before the configuration file is parsed by Behat.
ORIGINAL="wd_host: %selenium.server%"
REPLACEMENT="wd_host: http://$SELENIUM_SERVER/wd/hub"
# As the substitution does not involve regular expressions or multilines it
# can be done just with Bash. Moreover, this does not require escaping the
# regular expression characters that may appear in the URL, like "/".
FILE_CONTENTS=$(<$ACCEPTANCE_TESTS_CONFIG_DIR/behat.yml)
echo "${FILE_CONTENTS//$ORIGINAL/$REPLACEMENT}" > $ACCEPTANCE_TESTS_CONFIG_DIR/behat.yml
fi
composer install