Автоматизация и контейнеры
Сергей Пирогов

Сергей Пирогов
Senior QA Automation
Testing Center of Excellence
Ciklum

http://automation-remarks.com

@s_pirogov

О чем поговорим?
Как использовать Docker
Docker и автоматизация на Java
Docker и Python

Почему Java и Python?

Микросервисы и не только



Поднимаем все локально





Тестируем на разных версиях
- MySQL 5.5
- MySQL 5.6
- MySQL 5.7

Ужос ...

Запакуем все в контейнер

MySql в контейнере - это просто
docker run -e -p 3306:3306 \
MYSQL_ROOT_PASSWORD=root mysql:5.7

Тесты + контейнеры
docker run container
test
docker stop container

Как стартовать?
Руками - не автоматизация
.bat / .sh - не серьезно
Стартовать прямо из кода
Java Testcontainers
Работает через JUnit rule
Умеет запускать любые контейнеры

Все тот же MySql
public class SimpleMySQLTest {
@Rule
public MySQLContainer mysql = new MySQLContainer();
@Test
public void testSimple() throws SQLException {
ResultSet resultSet = performQuery(mysql, "SELECT 1");
int resultSetInt = resultSet.getInt(1);
assertEquals(1, resultSetInt);
}
}
Чем это лучше in-memory БД?
100% повторяет боевую базу
Не нужно чистить после тестов
База данных всегда в одном состоянии
Docker + Selenide
public class BaseTest {
@ClassRule
public static BrowserWebDriverContainer chrome =
new BrowserWebDriverContainer()
.withDesiredCapabilities(chrome())
@BeforeClass
public static void setUp() {
setWebDriver(chrome.getWebDriver());
}
}
Чем это лучше?
Быстро разворачивается
Не нужно париться с драйверами
Можно легко перейти на клауды
Python tetcontainers
Standalone Selenium контенеры
Selenium Grid контенеры
Контейнеры баз данных
Стартуем Selenium Grid
@pytest.fixture(scope="session")
def selenium_container(request):
container = SeleniumGrid(FIREFOX, node_count=2).start()
yield container
container.stop()

Используем Selenium Grid
def test_google(self, selenium_container):
driver = selenium_container.get_driver()
driver.get("http://google.com")
driver.find("q").type("Hello")

Cобираем свой контейнер
FROM ubuntu:16.04
# Install Python
RUN \
apt-get update && \
apt-get install -y python
RUN apt-get update -qqy \
&& apt-get -qqy install ffmpeg
EXPOSE 8086
USER root
WORKDIR /home/root/
COPY . /home/root
RUN pip install --no-cache-dir -r requirements.txt
ENTRYPOINT [ "python", "main.py" ]

Cобираем свой контейнер
docker = DockerClient()
docker.build_from_path(".", tag="video_service")
docker.run("video_service", bind_ports={8086: 8086})

Реальный пример

Выводы
Docker упрощает жизнь
Биндинги для языков упрощают использование Docker

Спасибо!

http://automation-remarks.com
@s_pirogov

Атвтоматизация и контейнеры
By Sergey Pirogov
Атвтоматизация и контейнеры
- 2,544