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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
420
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
210
Jokerconf 2019: Testcontainers: a year-in-review
bsideup
1
350
GeekOut 2019: Don’t be Homer Simpson with your Reactor!
bsideup
0
960
DevClub Tallinn: How to Make Your OSS Project Successful
bsideup
1
820
Pivotal Toronto 2019: Don’t be Homer Simpson with your Reactor!
bsideup
0
170
GeeCON 2019: Testcontainers: a year-in-review
bsideup
1
2.7k
Other Decks in Programming
See All in Programming
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
14
11k
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.2k
AI-Powered Domain-Driven Design
ziobrando
0
390
Seven New Principles of Software Engineering
yegor256
0
450
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
620
はじめてのPLATEAU
nokonoko1203
1
480
Event is what happens
moro
2
3.6k
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.1k
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
250
オーケストレーション記述言語 Katari
yukikurage
0
220
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
110
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
320
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
6.2k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
47k
The SEO identity crisis: Don't let AI make you average
varn
0
630
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
320
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.2k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
So, you think you're a good person
axbom
PRO
2
2.2k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
570
Google's AI Overviews - The New Search
badams
0
1.7k
WCS-LA-2024
lcolladotor
0
970
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