Автоматизация и контейнеры
Сергей Пирогов
Сергей Пирогов
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,862