0

I'm new to codeception and wonder, is it possible to run ui tests in the background, without opening test web browser every time?
I suspect, that I should change something in acceptance.suite.yml, but not sure what.

I would appreciate any help.

nobue
  • 1
  • 1

3 Answers3

0

You can use headless browser. This will execute all the test flow almost exactly as it would work on regular UI mode while there will not be opened visual browser. You can learn more about this here and in more similar resources.

Prophet
  • 32,350
  • 22
  • 54
  • 79
0

You can use Docker to virtualize the WebDriver and Selenium.

Create two different files in the root directory. The Dockerfile will generate a container with PHP and composer to run your codeception tests in it.

Dockerfile

FROM php:8.0-cli-alpine

RUN apk -U upgrade --no-cache

# install composer
COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER=1
ENV PATH="${PATH}:/root/.composer/vendor/bin"

WORKDIR /app

COPY composer.json composer.lock ./

RUN composer install --no-dev --no-scripts --no-progress \
 && composer clear-cache

COPY . /app

RUN composer dump-autoload --optimize --classmap-authoritative \
 && composer clear-cache

The second file is docker-compose.yml which is using a preconfigured Selenium image and bound your PHP codeception tests to one network, so that the container can talk with each other over the needed ports (4444 and 7900)

docker-compose.yml

---
version: '3.4'

services:
  php:
    build: .
    depends_on:
      - selenium
    volumes:
      - ./:/usr/src/app:rw,cached

  selenium:
    image: selenium/standalone-chrome:4
    shm_size: 2gb
    container_name: selenium
    ports:
      - "4444:4444"
      - "7900:7900"
    environment:
      - VNC_NO_PASSWORD=1
      - SCREEN_WIDTH=1920
      - SCREEN_HEIGHT=1080

If you setup docker and your codeception project correctly, you can run these containers in the background.

docker-compose up -d

and execute your tests:

vendor/bin/codecept run

If you want to see, what the test is doing, you can visit http://localhost:7900 to connect to the browser in the container and you can see, what the test is executing.

rickroyce
  • 950
  • 11
  • 24
0

If you are using the WebDriver module to run your tests with codeception, there is an option to configure your browser in headless mode. It won't open any windows and the tests will run in the background without bothering you.

There is an example with chrome :

modules:
  enabled:
     - WebDriver

  config:
    WebDriver:
        url: 'http://myapp.local'
        browser: chrome
        window_size: 1920x1080
        capabilities:
          chromeOptions:
            args: ["--headless", "--no-sandbox"]
Samuel
  • 645
  • 1
  • 7
  • 11