Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TestContainers - Heisenbug Moscow 2017
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Sergei Egorov
December 13, 2017
Programming
180
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TestContainers - Heisenbug Moscow 2017
https://heisenbug-moscow.ru/talks/2017/msk/5jkoam6i9o4482geewoy4w/
Sergei Egorov
December 13, 2017
More Decks by Sergei Egorov
See All by Sergei Egorov
SnowOne 2020: Jabel – retrofitting Java Compiler by instrumenting it!
bsideup
1
400
JUGBB2020: Testcontainers - Past, Present, Future
bsideup
1
250
Presentation: Reactive: Do. Or do not. There is no try.
bsideup
1
1.5k
Devoxx MA: Testcontainers deep dive
bsideup
1
190
Jokerconf 2019: Testcontainers: a year-in-review
bsideup
1
340
GeekOut 2019: Don’t be Homer Simpson with your Reactor!
bsideup
0
930
DevClub Tallinn: How to Make Your OSS Project Successful
bsideup
1
750
Pivotal Toronto 2019: Don’t be Homer Simpson with your Reactor!
bsideup
0
140
GeeCON 2019: Testcontainers: a year-in-review
bsideup
1
2.7k
Other Decks in Programming
See All in Programming
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.4k
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
930
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
260
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.7k
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
590
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
210
ふつうのFeature Flag実践入門
irof
8
4.2k
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
190
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.4k
Contextとはなにか
chiroruxx
1
370
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
300
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
Why Our Code Smells
bkeepers
PRO
340
58k
Music & Morning Musume
bryan
47
7.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
620
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
WENDY [Excerpt]
tessaabrams
11
38k
Test your architecture with Archunit
thirion
1
2.3k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Mind Mapping
helmedeiros
PRO
1
260
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
470
Transcript
TestContainers Docker Docker Docker… и тесты Sergei @bsideup Egorov
Про меня • Работаю в Uvita GmbH, Berlin • Apache
Groovy committer • Участник проекта TestContainers • Использую Docker с 2013 года @bsideup
О чем поговорим сегодня? @bsideup
План •Поговорим о Docker-е! @bsideup
План •Поговорим о Docker-е! •Обсудим тестирование с помощью Docker-а @bsideup
План •Поговорим о Docker-е! •Обсудим тестирование с помощью Docker-а •Используем
Docker из Java @bsideup
План •Поговорим о Docker-е! •Обсудим тестирование с помощью Docker-а •Используем
Docker из Java •Пошлём всё на GUI сервера автоматизации @bsideup
План •Поговорим о Docker-е! •Обсудим тестирование с помощью Docker-а •Используем
Docker из Java •Пошлём всё на GUI сервера автоматизации •Не забудем сделать фотографии и постить их в Twitter @bsideup
План •Поговорим о Docker-е! •Обсудим тестирование с помощью Docker-а •Используем
Docker из Java •Пошлём всё на GUI сервера автоматизации •Не забудем сделать фотографии и постить их в Twitter @bsideup
О чем НЕ поговорим сегодня? •Как установить Docker @bsideup
О чем НЕ поговорим сегодня? •Как установить Docker •Как завернуть
ваш EAR внутри IBM WebSphere в Docker контейнер @bsideup
О чем НЕ поговорим сегодня? •Как установить Docker •Как завернуть
ваш EAR внутри IBM WebSphere в Docker контейнер •Насколько сложно мыть дреды @bsideup
@bsideup
@bsideup
@bsideup
@bsideup
@bsideup
Абстракция @bsideup
CI friendly @bsideup
Кросс-платформенный @bsideup
None
Как я встретил вашу Docker @bsideup
@bsideup Я кодил на PHP…
@bsideup Я кодил на PHP…
@bsideup Без тестов…
@bsideup Тестировал “в проде”…
@bsideup Но потом…
@bsideup Я открыл для себя Java…
@bsideup Начал писать Unit тесты…
@bsideup И стал “мокать” базы данных >_<
@bsideup 21 век на дворе!
@bsideup Image Я
Tooling @bsideup
+Tooling @bsideup
Docker Compose рулит! redis: image: redis ports: - "6379:6379" postgres:
image: postgres ports: - "5432:5432" elasticsearch: image: elasticsearch:5.0.0 ports: - "9200:9200" @bsideup
Но…
Декларативный YAML redis: image: redis ports: - "6379:6379" postgres: image:
postgres ports: - "5432:5432" elasticsearch: image: elasticsearch:5.0.0 ports: - "9200:9200" @bsideup
Фиксированные порты redis: image: redis ports: - "6379:6379" postgres: image:
postgres ports: - "5432:5432" elasticsearch: image: elasticsearch:5.0.0 ports: - "9200:9200" @bsideup
Подмножества контейнеров? redis: image: redis ports: - "6379:6379" postgres: image:
postgres ports: - "5432:5432" elasticsearch: image: elasticsearch:5.0.0 ports: - "9200:9200" @bsideup
Запуск из IDE? @bsideup
None
TestContainers • http://github.com/testcontainers/testcontainers-java • Обёртка вокруг docker-java library • Работает
везде где есть Docker (Win, Mac, Linux) • Останавливает контейнеры при JVM shutdown @bsideup
Проще некуда! new PostgreSQLContainer() new BrowserWebDriverContainer() .withDesiredCapabilities(DesiredCapabilities.chrome()) new GenericContainer(“redis:3”)
new DockerComposeContainer(“docker-compose.yml”) @bsideup
Кто использует
Пример: Docker как Selenium драйвер • Selenium/Selenide тесты • Не
требуется устанавливать Chrome/Firefox/etc • CI friendly @bsideup
@Rule public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer() .withDesiredCapabilities(DesiredCapabilities.chrome()) .withRecordingMode(RECORD_ALL, new
File("target")); @bsideup
@Rule public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer() .withDesiredCapabilities(DesiredCapabilities.chrome()) .withRecordingMode(RECORD_ALL, new
File("target")); RemoteWebDriver driver = chrome.getWebDriver(); driver.get("https://wikipedia.org"); WebElement searchInput = driver.findElementByName("search"); searchInput.sendKeys("Rick Astley"); searchInput.submit(); WebElement otherPage = driver.findElementByLinkText("Rickrolling"); otherPage.click(); boolean expectedTextFound = driver.findElementsByCssSelector("p") .stream() .anyMatch(element -> element.getText().contains("meme")); assertTrue("The word 'meme' is found on a page about rickrolling", expectedTextFound); @bsideup
@Rule public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer() .withDesiredCapabilities(DesiredCapabilities.chrome()) .withRecordingMode(RECORD_ALL, new
File("target")); RemoteWebDriver driver = chrome.getWebDriver(); driver.get("https://wikipedia.org"); WebElement searchInput = driver.findElementByName("search"); searchInput.sendKeys("Rick Astley"); searchInput.submit(); WebElement otherPage = driver.findElementByLinkText("Rickrolling"); otherPage.click(); boolean expectedTextFound = driver.findElementsByCssSelector("p") .stream() .anyMatch(element -> element.getText().contains("meme")); assertTrue("The word 'meme' is found on a page about rickrolling", expectedTextFound); import org.openqa.selenium.remote.RemoteWebDriver; @bsideup
@Rule public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer() .withDesiredCapabilities(DesiredCapabilities.chrome()); RemoteWebDriver driver
= chrome.getWebDriver(); driver.get("https://wikipedia.org"); WebElement searchInput = driver.findElementByName("search"); searchInput.sendKeys("Rick Astley"); searchInput.submit(); driver.findElementByLinkText("Rickrolling").click(); assert driver.findElementsByCssSelector("p") .stream() .anyMatch(element -> element.getText().contains("meme")); @bsideup
Demo
• http://testcontainers.org • testcontainers/testcontainers-java-examples • Docker отлично подходит для тестирования
• И для разработки, и для CI @bsideup
Вопросы?
@bsideup bsideup
https://commons.wikimedia.org/wiki/File:Thats_all_folks.svg