Configuration

Configuration de l’application :

Utilisez la configuration par défaut de l’application installée en mode production. Si aucun serveur de messagerie n’est configuré localement, définissez le paramètre mailer_transport dans parameters.yml sur null.

Configuration Behat

La configuration de base se trouve dans behat.yml.dist. Chaque application possède son propre fichier behat.yml.dist à la racine du répertoire de l’application. Créez votre behat.yml (il est ignoré par git automatiquement et n’est jamais validé dans le référentiel distant), importez la configuration de base et modifiez-la pour l’adapter à votre environnement:

configuration en local, sans docker

yaml
imports:
   - ./behat.yml.dist

 default: &default
     extensions: &default_extensions
         Behat\MinkExtension:
             browser_name: chrome
             base_url: "http://localhost:8010"

configuration avec la stack docker kiboko

imports:
    - ./behat.yml.dist

default: &default
    extensions: &default_extensions
        Behat\MinkExtension:
            browser_name: chrome
            base_url: 'http://http'
            default_session: 'first_session'
            sessions:
                second_session:
                    oroSelenium2:
                        wd_host: 'http://localhost:4444/wd/hub'
                        capabilities:
                            browser: chrome
                            extra_capabilities:
                                browser: chrome
                                chromeOptions:
                                    w3c: false
                first_session:
                    oroSelenium2:
                        wd_host: 'http://localhost:4444/wd/hub'
                        capabilities:
                            browser: chrome
                            extra_capabilities:
                                browser: chrome
                                chromeOptions:
                                    w3c: false
                system_session:
                    oroSelenium2:
                        wd_host: 'http://localhost:4444/wd/hub'
                        capabilities:
                            browser: chrome
                            extra_capabilities:
                                browser: chrome
                                chromeOptions:
                                    w3c: false
                320_session:
                    oroSelenium2:
                        wd_host: 'http://localhost:4444/wd/hub'
                        capabilities:
                            extra_capabilities:
                                chromeOptions:
                                    w3c: false
                640_session:
                    oroSelenium2:
                        wd_host: 'http://localhost:4444/wd/hub'
                        capabilities:
                            extra_capabilities:
                                chromeOptions:
                                    w3c: false

!!! => Configurer votre parameters.yml avec le search engine en orm et dbal pour les messages

Installation

Installation des dépendances de développement :

Si vous avez installé des dépendances avec le paramètre –no-dev plus tôt, supprimez le fichier composer.lock de la racine du répertoire de l’application.

Installez les dépendances dev à l’aide de la commande suivante

composer install

Etat de l’application initiale

Dans Oro, l’état initial est celui lorsque l’application est installé sans données de démonstration. Les scénarios qui testent des fonctionnalités doivent s’appuyer sur cet état et doivent créer toutes les données nécessaires à des vérifications supplémentaires. Les données peuvent être créées par les étapes du scénario ou comme montages.

Installez l’application en anglais, sans données de démonstration en mode production, sans rabbit et elastic à l’aide de la commande suivante:

 bin/console oro:install  --drop-database --user-name=admin --user-email=admin@example.com  \
   --application-url=http://localhost:8010 --user-firstname=John --user-lastname=Doe \
   --user-password=admin  --organization-name=ORO --env=prod --sample-data=n --timeout=3000 \
   --formatting-code=en --language=en

Installation des outils de test en local, sans la stack docker :

Pour exécuter des scénarios qui utilisent les fonctionnalités de l’application Oro, exécutez le navigateur WebKit (à l’aide de ChromeDriver). Pour installer ChromeDriver, exécutez les commandes suivantes:

LINUX :

 CHROME_DRIVER_VERSION=$(curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE)
 mkdir -p "$HOME/chrome" || true
 wget "http://chromedriver.storage.googleapis.com/${CHROME_DRIVER_VERSION}/chromedriver_linux64.zip" -O "$HOME/chrome/chromedriver_linux64_${CHROME_DRIVER_VERSION}.zip"
 unzip "$HOME/chrome/chromedriver_linux64_${CHROME_DRIVER_VERSION}.zip" -d "$HOME/chrome"
 sudo ln -s "$HOME/chrome/chromedriver" /usr/local/bin/chromedriver

MAC :

brew cask install chromedriver

Installation des outils de test avec la stack docker :

version: '2.2'

services:
  mailcatcher:
    image: schickling/mailcatcher:latest
    ports:
      - ${MAILCATCHER_PORT}:1080

  sql:
    image: postgres:9.6-alpine
    ports:
      - ${SQL_PORT}:5432
    environment:
      - POSTGRES_USER
      - POSTGRES_DB
      - POSTGRES_PASSWORD
      - POSTGRES_ROOT_PASSWORD
    volumes:
      - ./.docker/postgres@9.6/sql/uuid-ossp.sql:/docker-entrypoint-initdb.d/00-uuid-ossp.sql:ro
      - ./.docker/postgres@9.6/custom-sql/:/docker-entrypoint-initdb.d/custom-sql/
      - database:/var/lib/postgresql/data
    restart: on-failure

  http:
    image: nginx:alpine
    volumes:
      - ./.docker/nginx@1.15/config/options.conf:/etc/nginx/conf.d/000-options.conf
      - ./.docker/nginx@1.15/config/reverse-proxy.conf:/etc/nginx/conf.d/default.conf
      - ./:/var/www/html
      - cache:/var/www/html/var/cache:ro
      - assets:/var/www/html/public/bundles:ro
    restart: on-failure
    ports:
      - ${HTTP_PORT}:80
    depends_on:
      - http-worker-prod
      - http-worker-dev
      - http-worker-xdebug

  http-worker-prod:
    image: nginx:alpine
    volumes:
      - ./.docker/nginx@1.15/config/options.conf:/etc/nginx/conf.d/000-options.conf
      - ./.docker/nginx@1.15/config/vhost-prod.conf:/etc/nginx/conf.d/default.conf
      - ./:/var/www/html
      - cache:/var/www/html/var/cache:delegated
      - assets:/var/www/html/public/bundles:delegated
    restart: on-failure
    depends_on:
      - fpm

  http-worker-dev:
    image: nginx:alpine
    volumes:
      - ./.docker/nginx@1.15/config/options.conf:/etc/nginx/conf.d/000-options.conf
      - ./.docker/nginx@1.15/config/vhost-dev.conf:/etc/nginx/conf.d/default.conf
      - ./:/var/www/html
      - cache:/var/www/html/var/cache:ro
      - assets:/var/www/html/public/bundles:ro
    restart: on-failure
    depends_on:
      - fpm

  http-worker-xdebug:
    image: nginx:alpine
    volumes:
      - ./.docker/nginx@1.15/config/options.conf:/etc/nginx/conf.d/000-options.conf
      - ./.docker/nginx@1.15/config/vhost-xdebug.conf:/etc/nginx/conf.d/default.conf
      - ./:/var/www/html
      - cache:/var/www/html/var/cache:ro
      - assets:/var/www/html/public/bundles:ro
    restart: on-failure
    depends_on:
      - fpm-xdebug

  fpm:
    image: kiboko/php:7.2-fpm-blackfire-orocommerce-ee-3.1-postgresql
    user: docker:docker
    volumes:
      - ./:/var/www/html
      - cache:/var/www/html/var/cache
      - assets:/var/www/html/public/bundles
    environment:
      - "I_AM_DEVELOPER_DISABLE_INDEX_IP_CHECK="
      - BLACKFIRE_CLIENT_ID
      - BLACKFIRE_CLIENT_TOKEN
    restart: on-failure

  fpm-xdebug:
    image: kiboko/php:7.2-fpm-xdebug-orocommerce-ee-3.1-postgresql
    user: docker:docker
    volumes:
      - ./:/var/www/html
      - cache:/var/www/html/var/cache
      - assets:/var/www/html/public/bundles
    environment:
      - "I_AM_DEVELOPER_DISABLE_INDEX_IP_CHECK="
    restart: on-failure

  blackfire:
    image: blackfire/blackfire
    environment:
      - BLACKFIRE_SERVER_ID
      - BLACKFIRE_SERVER_TOKEN

  sh:
    build:
      context: .docker/sh@7.2/
    user: docker:docker
    volumes:
      - $HOME/.ssh:/opt/docker/.ssh:cached
      - ./:/var/www/html
      - cache:/var/www/html/var/cache
      - assets:/var/www/html/public/bundles
      - composer:/opt/docker/.composer/:cached
    environment:
      - COMPOSER_AUTH
      - COMPOSER_PROCESS_TIMEOUT
      - BLACKFIRE_CLIENT_ID
      - BLACKFIRE_CLIENT_TOKEN
      - HOME=/var/www/html
    command: [ "sleep", "31536000" ]
    restart: "always"

  sh-xdebug:
    image: kiboko/php:7.2-cli-xdebug-orocommerce-ee-3.1-postgresql
    user: docker:docker
    volumes:
      - $HOME/.ssh:/opt/docker/.ssh:cached
      - ./:/var/www/html
      - cache:/var/www/html/var/cache
      - assets:/var/www/html/public/bundles
      - composer:/opt/docker/.composer/
    environment:
      - COMPOSER_AUTH
      - COMPOSER_PROCESS_TIMEOUT
    command: [ "sleep", "31536000" ]
    restart: "always"

  mq:
    image: kiboko/php:7.2-cli-blackfire-orocommerce-ee-3.1-postgresql
    user: docker:docker
    volumes:
      - ./:/var/www/html
      - cache:/var/www/html/var/cache
      - assets:/var/www/html/public/bundles
    command: [ "bin/console", "oro:message-queue:consume", "--env=prod", "-vv" ]
    restart: "always"

  ws:
    image: kiboko/php:7.2-cli-blackfire-orocommerce-ee-3.1-postgresql
    user: docker:docker
    volumes:
      - ./:/var/www/html
      - cache:/var/www/html/var/cache
      - assets:/var/www/html/public/bundles
    command: [ "bin/console", "gos:websocket:server", "--env=prod", "-vv" ]
    ports:
      - ${WEBSOCKET_PORT}:8080
    restart: "always"

  elasticsearch:
    image: 'docker.elastic.co/elasticsearch/elasticsearch-oss:6.5.4'
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
      - http.port=9200
      - http.cors.allow-origin=http://localhost:${DEJAVU_PORT},http://127.0.0.1:${DEJAVU_PORT},http://192.168.64.4:${DEJAVU_PORT},http://dejavu:${DEJAVU_PORT},http://host.docker.internal:${DEJAVU_PORT}
      - http.cors.enabled=true
      - http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization
      - http.cors.allow-credentials=true
    ports:
      - ${ELASTICSEARCH_PORT}:9200
    volumes:
      - elasticsearch:/usr/share/elasticsearch/data
      - ./.docker/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    restart: on-failure

  dejavu:
    image: appbaseio/dejavu
    ports:
      - ${DEJAVU_PORT}:1358

  amqp:
    build:
      context: .docker/rabbitmq@3.6
    ports:
      - ${RABBITMQ_AMQP_PORT}:5672
      - ${RABBITMQ_MANAGER_PORT}:15672
    environment:
      - RABBITMQ_DEFAULT_USER=${RABBITMQ_USER}
      - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD}
    restart: on-failure

  redis:
    build:
      context: .docker/redis@5/
    restart: on-failure
    ports:
      - ${REDIS_PORT}:6379

  chrome:
      image: selenium/node-chrome:3.141.59-oxygen
      volumes:
          - /dev/shm:/dev/shm
      depends_on:
          - hub
      environment:
          HUB_HOST: hub

  firefox:
      image: selenium/node-firefox:3.141.59-20200525
      volumes:
          - /dev/shm:/dev/shm
      depends_on:
          - hub
      environment:
          HUB_HOST: hub

  opera:
      image: selenium/node-opera:3.141.59-20200525
      volumes:
          - /dev/shm:/dev/shm
      depends_on:
          - hub
      environment:
          HUB_HOST: hub

  hub:
      image: selenium/hub:3.141.59-20200525
      ports:
          - ${HUB_PORT}::4444
volumes:
  database:
    driver: local
  elasticsearch:
    driver: local
  composer:
    driver: local
    driver_opts:
      type: tmpfs
      device: tmpfs
      o: "size=2048m,uid=1001,gid=1002"
  assets:
    driver: local
    driver_opts:
      type: tmpfs
      device: tmpfs
      o: "size=2048m,uid=1001,gid=1002"
  cache:
    driver: local
    driver_opts:
      type: tmpfs
      device: tmpfs
      o: "size=2048m,uid=1001,gid=1002"

Lancement des outils de tests en local, sans docker

Conditions préalables

  • Exécutez ChromeDriver:

chromedriver --url-base=wd/hub --port=4444 > /tmp/driver.log 2>&1

Pour exécuter ChromeDriver en arrière-plan, ajoutez le symbole esperluette (&) à la fin de la ligne, comme dans les exemples suivants:

chromedriver --url-base=wd/hub --port=4444 > /tmp/driver.log 2>&1 &

  • Lancer un serveur sur le port spécifié pour l’installation (ici 8010 ), avec apache, nginx, ou juste le serveur symfony de base

Execution des tests

Avant de commencer, il est fortement recommandé de vous familiariser avec les arguments et les options de Behat. Exécutez bin/behat --help pour une description détaillée.

Lorsque l’application Oro est installée sans données de démonstration et est en cours d’exécution, et que ChromeDriver est en cours d’exécution, vous pouvez commencer à exécuter les tests behat par fonctionnalité à partir de la racine de l’application.

Vous pouvez utiliser l’une des commandes suivantes.

Exécutez le scénario de test des fonctionnalités:

bin/behat vendor/oro/platform/src/Oro/Bundle/UserBundle/Tests/Behat/Features/login.feature -vvv

Aperçu de toutes les étapes de fonctionnalité disponibles:

bin/behat -dl -s OroUserBundle

Voir les étapes avec une description complète et des exemples:

bin/behat -di -s OroUserBundle

Chaque bundle a sa suite de tests dédiée qui peut être exécutée séparément:

bin/behat -s OroUserBundle