Сергей Пирогов
Senior QA Automation
Testing Center of Excellence
Ciklum
http://automation-remarks.com
@s_pirogov
Зоопарк технологий
docker run - запустить
docker stop - остановить
docker rm - удалить
docker run
--name some-postgres
-p 5432:5432
-e POSTGRES_PASSWORD=secret
-d postgres
docker run container
test
docker stop container
Руками - не автоматизация
.bat / .sh - не серьезно
Стартовать прямо из кода
Работает через JUnit rule
Умеет запускать любые контейнеры
public class SimpleDbTest {
@ClassRule
public static PostgreSQLContainer postgres =
new PostgreSQLContainer();
@Test
public void testSimple() throws SQLException {
ResultSet resultSet = performQuery(postgres, "SELECT 1");
int resultSetInt = resultSet.getInt(1);
assertEquals(1, resultSetInt);
}
}
100% повторяет боевую базу
Не нужно чистить после тестов
База данных всегда в одном состоянии
public class BaseTest {
@ClassRule
public static BrowserWebDriverContainer chrome =
new BrowserWebDriverContainer()
.withDesiredCapabilities(chrome())
@BeforeClass
public static void setUp() {
setWebDriver(chrome.getWebDriver());
}
}
docker run -d -p 4444:4444 --name selenium-hub \
selenium/hub:3.0.0-dubnium
docker run -d --link selenium-hub:hub \
selenium/node-chrome:3.0.0-dubnium
docker run -d --link selenium-hub:hub \
selenium/node-firefox:3.0.0-dubnium
hub:
image: selenium/hub
ports:
- "4444:4444"
firefox:
image: selenium/node-firefox
links:
- hub
expose:
- "5555"
chrome:
image: selenium/node-chrome
links:
- hub
expose:
- "5555"
public class DockerComposeSelenideDemo {
@ClassRule
public static DockerComposeContainer environment =
new DockerComposeContainer(new File(getProperty("user.dir") + "/docker-compose.yml"))
.withExposedService("hub_1", 4444);
@BeforeClass
public static void setUp() throws Exception {
String host = environment.getServiceHost("hub_1", 4444);
int port = environment.getServicePort("hub_1", 4444);
Configuration.remote = "http://" + host + ":" + port + "/wd/hub";
}
...
Быстро разворачивается
Не нужно париться с драйверами
Можно легко перейти на куда угодно
Standalone Selenium контенеры
Selenium Grid контенеры
Контейнеры баз данных
@pytest.fixture(scope="session")
def selenium_container(request):
container = SeleniumGrid(FIREFOX, node_count=2).start()
yield container
container.stop()
def test_google(self, selenium_container):
driver = selenium_container.get_driver()
driver.get("http://google.com")
driver.find("q").type("Hello")
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" ]
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