Set up browser tests using the Mediawiki docker set up

From Wikitech

Before your start

- If you wish to continue using the mw-docker-dev setup in parallel to this one, start by backing up the LocalSettings.php file in your Mediawilki repo (by renaming or copying elsewhere).
- Switching between the two set ups is possible and requires switching to the corresponding LocalSettings.php for each set up.
- Note: the two set ups need different MW_DOCKER_PORT ports in order to be run without stepping on each other’s toes. (see .env contents)

Files required in your Mediawiki home directory

1) browsertest.sh

#!/bin/sh
set -eu
# create user needed for certain edit actions (only has effect on the first go)

docker-compose -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.browsertest.yml \
run --rm mediawiki php //var/www/html/w/maintenance/createAndPromote.php --bureaucrat --sysop --bot lil-seleni test123456!
docker-compose -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.browsertest.yml \
run --rm seleniumtests npm i
docker-compose -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.browsertest.yml \
run --rm seleniumtests node_modules/.bin/wdio tests/selenium/wdio.conf.js --waitforTimeout=60000 --mochaOpts.timeout=60000 --hostname selenium \
--spec /app/extensions/Wikibase/repo/tests/selenium/specs/blocked.js
#--mochaOpts.grep 'can create lexeme with language item not bearing language code'

NOTE: if you have an older version of Mediawiki, the path might not include “/w” part. Look into the ‘working_dir’ key of your docker-compose.yml in your mediawiki home directory.

2) Docker-compose.browsertest.yml

version: '3.7'
services:
  seleniumtests:
      image: "docker-registry.wikimedia.org/nodejs10-devel"
      environment:
          - "MW_SERVER=http://mediawiki:8080"
          - "MW_SCRIPT_PATH=/"
          - "MEDIAWIKI_USER=lil-seleni"
          - "MEDIAWIKI_PASSWORD=test123456!"
          - "MEDIAWIKI_SECRET_KEY=a5dca55190e1c3927e098c317dd74e85c7eced36f959275114773b188fbabdbc"
          - NODE_DEBUG
      command: echo 'invoke me through ./browsertest'
      working_dir: /app
      volumes:
          - "${DOCKER_MW_PATH}:/app"
          - "${SELENIUM_LOG_PATH}:/app/tests/selenium/log"
      depends_on:
          - seleniu
  selenium:
      image: selenium/standalone-chrome
      shm_size: '2gb'
      depends_on:
          - mediawiki


3) Your .env file should look like this:

 MW_DOCKER_UID=1000                                                                                                                                                                                     
 MW_DOCKER_GID=1000
 MW_DOCKER_PORT=8081        
 MW_SCRIPT_PATH=/w          
 DOCKER_MW_PATH=./          
 SELENIUM_LOG_PATH=./log    
 MW_SERVER=http://localhost:8081
 MEDIAWIKI_USER=Admin       
 MEDIAWIKI_PASSWORD=dockerpass
 XDEBUG_CONFIG=

Then, follow the setup instructions. Note: for this specific test set up there is no need to use the Fresh container

Run the tests

Tests are run by executing ./browsertest.sh in your Mediawiki home directory. You can tell it which test to run inside the file (the path after “--spec”).

Note: Your newly created LocalSettings.php should include:

  • $wgServer = WebRequest::detectServer();
  • header( 'content-encoding: gzip' ); (to avoid gzip compression issues)
  • Load any extension you want to test. E.g. Wikibase repo:
    • wfLoadExtension( 'WikibaseRepository', "$IP/extensions/Wikibase/extension-repo.json" );
    • require_once "$IP/extensions/Wikibase/repo/ExampleSettings.php";