Test infrastructure on steroids

Sergey Pirogov

http://automation-remarks.com

https://qaguild-slack.herokuapp.com

QA Tech Lead

http://automation-remarks.com/podcast

Talk will be about?

Baremetal

Container deployment

Won't cover

Project

Deployment workflow

Feature branches

Moment of truth

feature/Jira-5678

master

Bad scenario

feature/Jira-5677

feature/Jira-5679

master

feature/Jira-5680

Good scenario

Run all the tests

feature/Jira-5677

master

Time for DevOps stuff

Infrastructure

Jenkinsfile

Dockerfile

docker-compose.yml

Feature env

http://jira-5766.pp.host.com

http://jira-5767.pp.host.com

Local Workspace Infrastructure

Selenoid + VNC + VIDEO

Selenium Grid with Docker

Selenoid + Windows

version: '3'
services:
  selenoid:
    image: "aerokube/selenoid:latest-release"
    network_mode: bridge
    ports:
      - "4444:4444"
    volumes:
      - "$PWD:/etc/selenoid"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "$PWD/video:/opt/selenoid/video"
    environment:
      - DOCKER_API_VERSION=1.35  
      - OVERRIDE_VIDEO_OUTPUT_DIR=$PWD/video
    command: ["-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video"]
  selenoid-ui:
    image: "aerokube/selenoid-ui:latest-release"
    network_mode: bridge
    links:
      - selenoid
    ports:
      - "8080:8080"
    command: ["--selenoid-uri", "http://172.17.0.2:4444"]
docker inspect -f '{{ .NetworkSettings.IPAddress }}' selenoid

Docker compose .env file

version: '3'
services:
  selenoid:
    image: "aerokube/selenoid:latest-release"
    network_mode: bridge
    ports:
      - "4444:4444"
    volumes:
      - "$PWD:/etc/selenoid"
      - "$PWD/video:/opt/selenoid/video"

https://docs.docker.com/compose/environment-variables/

PWD=/c/Users/user/selenoid

selenoid/

        .env

                                       docker-compose.yml

docker-compose.yml

Docker + Windows

Test Infrastructure

Selenoid + GGR

Configuration management

Ansible + Selenoid + GGR

---
- hosts: all
  vars:
        selenoid_version: 1.4.0
        selenoid_cm_version: 1.3.1
        selenoid_docker_api_version: 1.24
        selenoid_limit: 4
        selenoid_tmpfs: 128
        selenoid_config_dir: /etc/selenoid
        selenoid_listen_port: 4444
        selenoid_time_zone: Europe/Moscow
        selenoid_browsers_last_versions: 5
        selenoid_browsers:
          - firefox
          - opera
          - chrome
  roles:
  - selenoid

https://github.com/iqoption/selenoid-docker

---
- hosts: all
  vars:
    grid_router_path: "{{ ansible_env.HOME }}/grid-router"
    grid_router_qouta_path: "{{ ansible_env.HOME }}/grid-router/quota"
    grid_router_port: 4445

    grid_router_regions:
      - name: "region-1"
        hosts:
        - name: 192.168.1.1
          port: 4444
          browser_count: 4
        - name: 192.168.1.2
          port: 4445
          browser_count: 4            

    grid_router_browsers:
      - name: "chrome"
        defaultVersion: "62.0"
        versions:
          - "62.0"
          - "63.0"
  roles:
    - gridrouter-docker

Example

playbook

ansible-playbook selenoid.yml -i hosts

Jenkins pipeline

Results

feature envs

push to feature branch

tests

GGR

Selenoids

Merge/delete feature env

Pain points

  • Browser cluster monitoring
  • Windows Powershell DSC
  • Windows Server 2016 1709

Lessons learned

  • Keep your infrastructure as a code
  • Always test what your deployment
  • Run all your test for merge request
  • Collaborate with your team
  • Ensure high availability

Useful to read

Thank you!

http://automation-remarks.com

https://qaguild-slack.herokuapp.com

http://automation-remarks.com/podcast

Testing infrastructure on steroids

By Sergey Pirogov

Testing infrastructure on steroids

  • 3,808