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
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
190
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
770
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
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
110
Cloudflare is Agents
chimame
0
180
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.8k
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
3.8k
Flow は今どうなっているか
mizdra
PRO
0
760
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
290
T3DD26: From RAGs to Riches
martinhelmich
0
110
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
310
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
830
初めての模倣学習とVLA
natsutan
0
320
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
370
My Marp Sample
sinoue0108
0
130
Featured
See All Featured
How GitHub (no longer) Works
holman
316
150k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
510
Become a Pro
speakerdeck
PRO
31
6.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Visualization
eitanlees
152
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Darren the Foodie - Storyboard
khoart
PRO
3
3.8k
エンジニアに許された特別な時間の終わり
watany
108
250k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Between Models and Reality
mayunak
4
410
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
380
A Soul's Torment
seathinner
6
3.5k
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