Skip to content

Commit

Permalink
[TASK] Introspect acceptance testing
Browse files Browse the repository at this point in the history
New runTests.sh option "-g" opens a tab in a local
browser pointing to http://localhost:7900/?autoconnect=1.
This allows watching acceptance tests clicking around.

Releases: main, 12.4, 11.5
Resolves: #101611
Change-Id: I53cbb861d7df6daac96dfcc382183f46847d7894
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/80367
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: core-ci <typo3@b13.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
  • Loading branch information
bnf authored and lolli42 committed Aug 8, 2023
1 parent 6ce4218 commit fb3fc7e
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 14 deletions.
73 changes: 61 additions & 12 deletions Build/Scripts/runTests.sh
Expand Up @@ -268,6 +268,11 @@ Options:
Example -e "-v --filter canRetrieveValueWithGP" to enable verbose output AND filter tests
named "canRetrieveValueWithGP"
-g
Only with -s acceptance|acceptanceInstall
Activate selenium grid as local port to watch browser clicking around. Can be surfed using
http://localhost:7900/. A browser tab is opened automatically if xdg-open is installed.
-x
Only with -s functional|functionalDeprecated|unit|unitDeprecated|unitRandom|acceptance|acceptanceInstall
Send information to host instance for test or system under test break points. This is especially
Expand Down Expand Up @@ -338,6 +343,7 @@ DBMS_VERSION=""
PHP_VERSION="8.1"
PHP_XDEBUG_ON=0
PHP_XDEBUG_PORT=9003
ACCEPTANCE_HEADLESS=1
EXTRA_TEST_OPTIONS=""
PHPUNIT_RANDOM=""
CGLCHECK_DRY_RUN=""
Expand All @@ -352,7 +358,7 @@ OPTIND=1
# Array for invalid options
INVALID_OPTIONS=()
# Simple option parsing based on getopts (! not getopt)
while getopts ":a:s:c:d:i:p:e:xy:o:nhu" OPT; do
while getopts ":a:s:c:d:i:p:e:xy:o:nhug" OPT; do
case ${OPT} in
s)
TEST_SUITE=${OPTARG}
Expand Down Expand Up @@ -384,6 +390,9 @@ while getopts ":a:s:c:d:i:p:e:xy:o:nhu" OPT; do
e)
EXTRA_TEST_OPTIONS=${OPTARG}
;;
g)
ACCEPTANCE_HEADLESS=0
;;
x)
PHP_XDEBUG_ON=1
;;
Expand Down Expand Up @@ -500,16 +509,30 @@ fi
# Suite execution
case ${TEST_SUITE} in
acceptance)
CODECEPION_ENV=""
if [ "${ACCEPTANCE_HEADLESS}" -eq 1 ]; then
CODECEPION_ENV="--env headless"
fi
if [ "${CHUNKS}" -gt 0 ]; then
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name ac-splitter-${SUFFIX} ${IMAGE_PHP} php -dxdebug.mode=off Build/Scripts/splitAcceptanceTests.php -v ${CHUNKS}
COMMAND="bin/codecept run Application -d -g AcceptanceTests-Job-${THISCHUNK} -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} ${TEST_FILE} --html reports.html"
COMMAND="bin/codecept run Application -d -g AcceptanceTests-Job-${THISCHUNK} -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} ${CODECEPION_ENV} ${TEST_FILE} --html reports.html"
else
COMMAND="bin/codecept run Application -d -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} ${TEST_FILE} --html reports.html"
COMMAND="bin/codecept run Application -d -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} ${CODECEPION_ENV} ${TEST_FILE} --html reports.html"
fi
${CONTAINER_BIN} run -d --name ac-chrome-${SUFFIX} --network ${NETWORK} --network-alias chrome --tmpfs /dev/shm:rw,nosuid,nodev,noexec,relatime ${IMAGE_SELENIUM} >/dev/null
SELENIUM_GRID=""
if [ "${ACCEPTANCE_HEADLESS}" -eq 0 ]; then
SELENIUM_GRID="-p 7900:7900 -e SE_VNC_NO_PASSWORD=1 -e VNC_NO_PASSWORD=1"
fi
${CONTAINER_BIN} run -d ${SELENIUM_GRID} --name ac-chrome-${SUFFIX} --network ${NETWORK} --network-alias chrome --tmpfs /dev/shm:rw,nosuid,nodev,noexec,relatime ${IMAGE_SELENIUM} >/dev/null
${CONTAINER_BIN} run -d --name ac-web-${SUFFIX} --network ${NETWORK} --network-alias web --add-host "host.docker.internal:host-gateway" $USERSET -v ${CORE_ROOT}:${CORE_ROOT} ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${IMAGE_PHP} php -S web:8000 -t ${CORE_ROOT} >/dev/null
waitFor chrome 4444
waitFor chrome 7900
waitFor web 8000
if [ "${ACCEPTANCE_HEADLESS}" -eq 0 ] && type "xdg-open" >/dev/null; then
xdg-open http://localhost:7900/?autoconnect=1 >/dev/null
elif [ "${ACCEPTANCE_HEADLESS}" -eq 0 ] && type "open" >/dev/null; then
open http://localhost:7900/?autoconnect=1 >/dev/null
fi
case ${DBMS} in
mariadb)
${CONTAINER_BIN} run --name mariadb-ac-${SUFFIX} --network ${NETWORK} -d -e MYSQL_ROOT_PASSWORD=funcp --tmpfs /var/lib/mysql/:rw,noexec,nosuid ${IMAGE_MARIADB} >/dev/null
Expand Down Expand Up @@ -541,39 +564,65 @@ case ${TEST_SUITE} in
esac
;;
acceptanceInstall)
${CONTAINER_BIN} run -d --name ac-istall-chrome-${SUFFIX} --network ${NETWORK} --network-alias chrome --tmpfs /dev/shm:rw,nosuid,nodev,noexec,relatime ${IMAGE_SELENIUM} >/dev/null
SELENIUM_GRID=""
if [ "${ACCEPTANCE_HEADLESS}" -eq 0 ]; then
SELENIUM_GRID="-p 7900:7900 -e SE_VNC_NO_PASSWORD=1 -e VNC_NO_PASSWORD=1"
fi
${CONTAINER_BIN} run -d ${SELENIUM_GRID} --name ac-istall-chrome-${SUFFIX} --network ${NETWORK} --network-alias chrome --tmpfs /dev/shm:rw,nosuid,nodev,noexec,relatime ${IMAGE_SELENIUM} >/dev/null
${CONTAINER_BIN} run -d --name ac-install-web-${SUFFIX} --network ${NETWORK} --network-alias web --add-host "host.docker.internal:host-gateway" $USERSET -v ${CORE_ROOT}:${CORE_ROOT} ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${IMAGE_PHP} php -S web:8000 -t ${CORE_ROOT} >/dev/null
waitFor chrome 4444
waitFor chrome 7900
waitFor web 8000
if [ "${ACCEPTANCE_HEADLESS}" -eq 0 ] && type "xdg-open" >/dev/null; then
xdg-open http://localhost:7900/?autoconnect=1 >/dev/null
elif [ "${ACCEPTANCE_HEADLESS}" -eq 0 ] && type "open" >/dev/null; then
open http://localhost:7900/?autoconnect=1 >/dev/null
fi
case ${DBMS} in
mariadb)
CODECEPION_ENV="--env mysql"
if [ "${ACCEPTANCE_HEADLESS}" -eq 1 ]; then
CODECEPION_ENV="--env mysql,headless"
fi
${CONTAINER_BIN} run --name mariadb-ac-install-${SUFFIX} --network ${NETWORK} -d -e MYSQL_ROOT_PASSWORD=funcp --tmpfs /var/lib/mysql/:rw,noexec,nosuid ${IMAGE_MARIADB} >/dev/null
waitFor mariadb-ac-install-${SUFFIX} 3306
CONTAINERPARAMS="-e typo3InstallMysqlDatabaseName=func_test -e typo3InstallMysqlDatabaseUsername=root -e typo3InstallMysqlDatabasePassword=funcp -e typo3InstallMysqlDatabaseHost=mariadb-ac-install-${SUFFIX}"
COMMAND="bin/codecept run Install -d -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} --env=mysql --html reports.html"
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name ac-install-sqlite ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${CONTAINERPARAMS} ${IMAGE_PHP} ${COMMAND}
COMMAND="bin/codecept run Install -d -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} ${CODECEPION_ENV} --html reports.html"
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name ac-install-mariadb ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${CONTAINERPARAMS} ${IMAGE_PHP} ${COMMAND}
SUITE_EXIT_CODE=$?
;;
mysql)
CODECEPION_ENV="--env mysql"
if [ "${ACCEPTANCE_HEADLESS}" -eq 1 ]; then
CODECEPION_ENV="--env mysql,headless"
fi
${CONTAINER_BIN} run --name mysql-ac-install-${SUFFIX} --network ${NETWORK} -d -e MYSQL_ROOT_PASSWORD=funcp --tmpfs /var/lib/mysql/:rw,noexec,nosuid ${IMAGE_MYSQL} >/dev/null
waitFor mysql-ac-install-${SUFFIX} 3306
CONTAINERPARAMS="-e typo3InstallMysqlDatabaseName=func_test -e typo3InstallMysqlDatabaseUsername=root -e typo3InstallMysqlDatabasePassword=funcp -e typo3InstallMysqlDatabaseHost=mysql-ac-install-${SUFFIX}"
COMMAND="bin/codecept run Install -d -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} --env=mysql --html reports.html"
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name ac-install-sqlite ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${CONTAINERPARAMS} ${IMAGE_PHP} ${COMMAND}
COMMAND="bin/codecept run Install -d -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} ${CODECEPION_ENV} --html reports.html"
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name ac-install-mysql ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${CONTAINERPARAMS} ${IMAGE_PHP} ${COMMAND}
SUITE_EXIT_CODE=$?
;;
postgres)
CODECEPION_ENV="--env postgresql"
if [ "${ACCEPTANCE_HEADLESS}" -eq 1 ]; then
CODECEPION_ENV="--env postgresql,headless"
fi
${CONTAINER_BIN} run --name postgres-ac-install-${SUFFIX} --network ${NETWORK} -d -e POSTGRES_PASSWORD=funcp -e POSTGRES_USER=funcu --tmpfs /var/lib/postgresql/data:rw,noexec,nosuid ${IMAGE_POSTGRES} >/dev/null
waitFor postgres-ac-install-${SUFFIX} 5432
CONTAINERPARAMS="-e typo3InstallPostgresqlDatabasePort=5432 -e typo3InstallPostgresqlDatabaseName=${USER} -e typo3InstallPostgresqlDatabaseHost=postgres-ac-install-${SUFFIX} -e typo3InstallPostgresqlDatabaseUsername=funcu -e typo3InstallPostgresqlDatabasePassword=funcp"
COMMAND="bin/codecept run Install -d -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} --env=postgresql --html reports.html"
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name ac-install-sqlite ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${CONTAINERPARAMS} ${IMAGE_PHP} ${COMMAND}
COMMAND="bin/codecept run Install -d -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} ${CODECEPION_ENV} --html reports.html"
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name ac-install-postgres ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${CONTAINERPARAMS} ${IMAGE_PHP} ${COMMAND}
SUITE_EXIT_CODE=$?
;;
sqlite)
mkdir -p "${CORE_ROOT}/typo3temp/var/tests/functional-sqlite-dbs/"
CODECEPION_ENV="--env sqlite"
if [ "${ACCEPTANCE_HEADLESS}" -eq 1 ]; then
CODECEPION_ENV="--env sqlite,headless"
fi
CONTAINERPARAMS="-e typo3DatabaseDriver=pdo_sqlite --tmpfs ${CORE_ROOT}/typo3temp/var/tests/functional-sqlite-dbs/:rw,noexec,nosuid,uid=${HOST_UID}"
COMMAND="bin/codecept run Install -d -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} --env=sqlite --html reports.html"
COMMAND="bin/codecept run Install -d -c typo3/sysext/core/Tests/codeception.yml ${EXTRA_TEST_OPTIONS} ${CODECEPION_ENV} --html reports.html"
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name ac-install-sqlite ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${CONTAINERPARAMS} ${IMAGE_PHP} ${COMMAND}
SUITE_EXIT_CODE=$?
;;
Expand Down
15 changes: 14 additions & 1 deletion typo3/sysext/core/Tests/Acceptance/Application.suite.yml
Expand Up @@ -13,7 +13,7 @@ modules:
host: chrome
capabilities:
chromeOptions:
args: ["--headless", "--no-sandbox", "window-size=1280,1024", "--disable-gpu"]
args: ["--no-sandbox", "window-size=1280,1024", "--disable-gpu"]
- \TYPO3\TestingFramework\Core\Acceptance\Helper\Acceptance
- \TYPO3\TestingFramework\Core\Acceptance\Helper\Login:
sessions:
Expand All @@ -23,6 +23,19 @@ modules:
- Asserts
- Codeception\Module\Cli

env:
headless:
modules:
enabled:
- WebDriver:
url: '%typo3TestingAcceptanceBaseUrl%/typo3temp/var/tests/acceptance'
browser: chrome
wait: 2
host: chrome
capabilities:
chromeOptions:
args: ["--headless", "--no-sandbox", "window-size=1280,1024", "--disable-gpu"]

extensions:
enabled:
- TYPO3\CMS\Core\Tests\Acceptance\Support\Extension\ApplicationEnvironment
Expand Down
15 changes: 14 additions & 1 deletion typo3/sysext/core/Tests/Acceptance/Install.suite.yml
@@ -1,4 +1,5 @@
actor: InstallTester

modules:
enabled:
- WebDriver:
Expand All @@ -8,10 +9,22 @@ modules:
host: chrome
capabilities:
chromeOptions:
args: [ "--headless", "--no-sandbox", "window-size=1280,1024", "--disable-gpu" ]
args: [ "--no-sandbox", "window-size=1280,1024", "--disable-gpu" ]
- Asserts

env:
headless:
modules:
enabled:
- WebDriver:
url: '%typo3TestingAcceptanceBaseUrl%/typo3temp/var/tests/acceptance'
browser: chrome
wait: 2
host: chrome
capabilities:
chromeOptions:
args: [ "--headless", "--no-sandbox", "window-size=1280,1024", "--disable-gpu" ]

mysql:
extensions:
enabled:
Expand Down

0 comments on commit fb3fc7e

Please sign in to comment.