Download - Smoke Tests @ DevOps-Hamburg 06.02.2017
![Page 1: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/1.jpg)
SmokeTestsWhy you should try to burn down
your production environment
Comments & Feedback
![Page 2: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/2.jpg)
Sebastian ThoßChapter lead Backend
![Page 3: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/3.jpg)
![Page 4: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/4.jpg)
Disclaimer
![Page 5: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/5.jpg)
Agenda• Types Of Tests
• SmokeTests
• Server Architecture
• Questions & Answers
![Page 6: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/6.jpg)
Types Of Tests
![Page 7: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/7.jpg)
Test Pyramid
UNIT TESTS
![Page 8: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/8.jpg)
Class 2
Class 3
Mock
Mock
Unit Tests
Class 1
Class 4
![Page 9: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/9.jpg)
![Page 10: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/10.jpg)
Test Pyramid
INTEGRATION TESTS
UNIT TESTS
![Page 11: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/11.jpg)
Class 3 Class 4Mock Mock
Integration Tests
Class 1 Class 2
![Page 12: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/12.jpg)
Test Pyramid
INTEGRATION TESTS
UNIT TESTS
100% CODE COVER
AGE
![Page 13: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/13.jpg)
Test Pyramid
ACCEPTANCE TESTS
INTEGRATION TESTS
UNIT TESTS
![Page 14: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/14.jpg)
Acceptance Tests
Class 1 Class 2
Class 3 Class 4
![Page 15: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/15.jpg)
Test Pyramid
ACCEPTANCE TESTS
INTEGRATION TESTS
UNIT TESTS
?
$$$
¢
![Page 16: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/16.jpg)
SmokeTests
![Page 17: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/17.jpg)
What are SmokeTests?
In computer programming and software testing, smoke testing is preliminary testing to reveal simple failures severe enough to reject a prospective software release. Source: https://en.wikipedia.org/wiki/Smoke_testing_(software)
![Page 18: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/18.jpg)
SmokeTests should…• … be simple
• … be fast
• … test pages with optional parameters too
• … cover at least all URLs in google index
• … use a manual maintained list of URLs
![Page 19: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/19.jpg)
How do SmokeTests work?
https://www.my-application.com/foo
<html><body>…</body></html>
TTFB: 65ms
HTTP 1.1/200 OK
SmokeTest Client
CI Server
Application Under Test
Production Server
![Page 20: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/20.jpg)
How do SmokeTests work?
https://www.my-application.com/foo
<html><body>…</body></html>
TTFB: 320ms
HTTP 1.1/200 OK
SmokeTest Client
CI Server
Application Under Test
Production Server
![Page 21: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/21.jpg)
What should SmokeTests validate?• Correct Server
• Status Code
• Time To First Byte
• If Body Is Provided
![Page 22: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/22.jpg)
SmokeTests are NOT Acceptance Tests
SmokeTest Client
HTTP 1.1/200 OK
<html> <head> <title>Foo</title> <body> <div id="bar"><span>foobar</span></div> </body> </html>
![Page 23: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/23.jpg)
namespace Kartenmacherei\Testing;
use PHPUnit_Framework_TestCase;
class SmokeTest extends PHPUnit_Framework_TestCase { /** * @dataProvider furyUrlProvider * * @param Url $url */ public function testFuryUrl(Url $url) { $result = $this->sendGetRequest($url);
$this->assertSame(200, $result->getStatusCode()); $this->assertNotEmpty($result->getBody()); $this->assertLessThanOrEqual(100, $result->getTimeToFirstByteInMilliseconds()); }
public function furyUrlProvider() { $urls = ['http://www.kartenmacherei.de', …]; $urlCollection = UrlCollection::fromStrings($urls);
return $urlCollection->asDataProviderArray($urlCollection); }
![Page 24: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/24.jpg)
How to speed up SmokeTests?
![Page 25: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/25.jpg)
Concurrent SmokeTests
SmokeTest Client
CI Server
Application Under Test
Production Server
https://www.my-application.com/baz
https://www.my-application.com/bar
https://www.my-application.com/foo
![Page 26: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/26.jpg)
Concurrent SmokeTests
https://www.my-application.com/bazSmokeTest
Client
CI Server
Application Under Test
Production Server
https://www.my-application.com/bar
https://www.my-application.com/foo
TTFB: 34ms
![Page 27: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/27.jpg)
Concurrent SmokeTests
https://www.my-application.com/foobazSmokeTest
Client
CI Server
Application Under Test
Production Server
https://www.my-application.com/bar
https://www.my-application.com/foo
![Page 28: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/28.jpg)
Concurrent SmokeTests
SmokeTest Client
CI Server
Application Under Test
Production Server
TTFB: 65ms
https://www.my-application.com/foobaz
https://www.my-application.com/bar
https://www.my-application.com/foo
![Page 29: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/29.jpg)
Concurrent SmokeTests
SmokeTest Client
CI Server
Application Under Test
Production Serverhttps://www.my-application.com/123
https://www.my-application.com/foobaz
https://www.my-application.com/bar
![Page 30: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/30.jpg)
Concurrent SmokeTests
SmokeTest Client
CI Server
Application Under Test
Production Server
TTFB: 620ms
https://www.my-application.com/123
https://www.my-application.com/foobaz
https://www.my-application.com/bar
![Page 31: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/31.jpg)
There is a Lib for SmokeTests
DjThossi/Smoke-Testing-PHP
![Page 32: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/32.jpg)
DataProvider
Test
Application
HTTP Requests
HTTP Responses
PHPUnit
Call
Result[]
Result
![Page 33: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/33.jpg)
class SmokeTest extends PHPUnit_Framework_TestCase { use SmokeTestTrait;
/** * @dataProvider myDataProvider */ public function testExample(Result $result) { $this->assertSuccess($result); $this->assertTimeToFirstByte(new TimeToFirstByte(100), $result); $this->assertBodyNotEmpty($result); $this->assertHeaderExists(Header::fromPrimitives(‘App-Server', ‘Fury’), $result); }
public function myDataProvider() { $urls = ['http://www.kartenmacherei.de', …]; $options = new SmokeTestOptions( UrlCollection::fromStrings($urls), new RequestTimeout(2), new FollowRedirects(true), new Concurrency(3), new BodyLength(500) );
return $this->runSmokeTests($options); }
![Page 34: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/34.jpg)
Server Architecture
![Page 35: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/35.jpg)
Webserver (Router)
Webserver
FURY Frontend
Server A
K/V StoreSearch
FURY Backend
Webserver
FURY Frontend
Server B
K/V StoreSearch
FURY Backend
![Page 36: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/36.jpg)
Webserver (Router)
Webserver
FURY Frontend
Server A
K/V StoreSearch
FURY Backend
Webserver
FURY Frontend
Server B
K/V StoreSearch
FURY Backend
active = A
![Page 37: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/37.jpg)
Webserver (Router)
Webserver
FURY Frontend
Server A
K/V StoreSearch
FURY Backend
Webserver
FURY Frontend
Server B
K/V StoreSearch
FURY Backend
active = B
![Page 38: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/38.jpg)
Webserver (Router)
Webserver
FURY Frontend
Server A
K/V StoreSearch
FURY Backend
active = B
![Page 39: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/39.jpg)
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StoreSearch
FURY Backend
Webserver (Router)
Build Server
Deploy Code
active = B
![Page 40: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/40.jpg)
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StoreSearch
FURY Backend
Webserver (Router)
Build Server
Deploy Code
Collect & Export
active = B
![Page 41: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/41.jpg)
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StoreSearch
FURY Backend
Webserver (Router)
Build Server
Deploy Code
Collect & Export
Smoke Tests
active = B
![Page 42: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/42.jpg)
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StoreSearch
FURY Backend
Webserver (Router)
Build Server
Deploy Code
Collect & Export
Smoke Tests
active = B
![Page 43: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/43.jpg)
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StoreSearch
FURY Backend
Webserver (Router)
Build Server
Deploy Code
Collect & Export
Smoke Tests
active = B
![Page 44: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/44.jpg)
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StoreSearch
FURY Backend
Webserver (Router)
Build Server
Deploy Code
Collect & Export
Smoke Tests
Switch to A
active = Bactive = A
![Page 45: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/45.jpg)
Conclusion• Write tests
• Get 100% coverage
• SmokeTest your Website
• Only activate server if it didn't start smoking
![Page 46: Smoke Tests @ DevOps-Hamburg 06.02.2017](https://reader034.vdocument.in/reader034/viewer/2022042907/58d06f7b1a28abc9788b4cc5/html5/thumbnails/46.jpg)
Q&A
https://www.facebook.com/kartenmacherei/
http://inside.kartenmacherei.de/job.html
https://tech.kartenmacherei.de/
@techdotkam
Comments & Feedback