Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
TestContainers - Heisenbug Moscow 2017
Search
Sergei Egorov
December 13, 2017
Programming
200
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
410
JUGBB2020: Testcontainers - Past, Present, Future
bsideup
1
260
Presentation: Reactive: Do. Or do not. There is no try.
bsideup
1
1.5k
Devoxx MA: Testcontainers deep dive
bsideup
1
200
Jokerconf 2019: Testcontainers: a year-in-review
bsideup
1
340
GeekOut 2019: Don’t be Homer Simpson with your Reactor!
bsideup
0
950
DevClub Tallinn: How to Make Your OSS Project Successful
bsideup
1
810
Pivotal Toronto 2019: Don’t be Homer Simpson with your Reactor!
bsideup
0
160
GeeCON 2019: Testcontainers: a year-in-review
bsideup
1
2.7k
Other Decks in Programming
See All in Programming
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
250
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.1k
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
850
一人だけ、Kiroが静止する日
hideg
0
120
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
290
Java 27新機能 / Java 27 new features
kishida
2
150
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
350
setup-vp GitLab対応の裏側
naokihaba
0
120
wkhtmltopdfの次どうするか問題2026
willnet
2
1.6k
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
180
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
190
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
490
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
550
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
530
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Being A Developer After 40
akosma
91
590k
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