microservice teststrategie mit symfony2

75
Microservice-Teststrategie mit Symfony2 ein Vortrag von Per Bernhardt

Upload: per-bernhardt

Post on 16-Apr-2017

3.116 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Microservice Teststrategie mit Symfony2

Microservice-Teststrategiemit

Symfony2

ein Vortrag von Per Bernhardt

Page 2: Microservice Teststrategie mit Symfony2

Mein Name ist Perhttp://perprogramming.de

Ich bin ein Chefkochhttp://www.chefkoch.de

Page 3: Microservice Teststrategie mit Symfony2

Agenda• Worum geht es?

• Microservices

• Testarten

• Teststrategien

• Zusammenfassung

• Q & A

Page 4: Microservice Teststrategie mit Symfony2

Worum geht es?

Page 5: Microservice Teststrategie mit Symfony2

Erstmal vielen Dank an Toby Clemson!

http://martinfowler.com/articles/microservice-testing/

Page 6: Microservice Teststrategie mit Symfony2
Page 7: Microservice Teststrategie mit Symfony2

Microservices!

Page 8: Microservice Teststrategie mit Symfony2

Microservices!

Teststrategie!

Page 9: Microservice Teststrategie mit Symfony2

Microservices!

Teststrategie! ?

Page 10: Microservice Teststrategie mit Symfony2

Microservices!

Teststrategie! ?!

Page 11: Microservice Teststrategie mit Symfony2

Microservices!

Teststrategie! ?!

Page 12: Microservice Teststrategie mit Symfony2

Microservices!

Teststrategie! ?!@

Page 13: Microservice Teststrategie mit Symfony2

Microservices

Page 14: Microservice Teststrategie mit Symfony2

A microservice architecture is […] the single responsibility principle

at the architectural level.„ “Quelle: http://martinfowler.com/articles/microservice-testing/#definition

Page 15: Microservice Teststrategie mit Symfony2
Page 16: Microservice Teststrategie mit Symfony2

App

BundleBundleBundle

Page 17: Microservice Teststrategie mit Symfony2

App

BundleBundleBundle

AppBundle

AppBundle

AppBundle

Page 18: Microservice Teststrategie mit Symfony2
Page 19: Microservice Teststrategie mit Symfony2

@

Page 20: Microservice Teststrategie mit Symfony2

@

Page 21: Microservice Teststrategie mit Symfony2

Chefkoch

@

Page 22: Microservice Teststrategie mit Symfony2

Chefkoch

Recipe User CMS

Video Blog Image

@

Page 23: Microservice Teststrategie mit Symfony2

Quelle: http://martinfowler.com/articles/microservice-testing/#anatomy-modules

Page 24: Microservice Teststrategie mit Symfony2
Page 25: Microservice Teststrategie mit Symfony2

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

Page 26: Microservice Teststrategie mit Symfony2

Testarten

Page 27: Microservice Teststrategie mit Symfony2

Unit Tests

Page 28: Microservice Teststrategie mit Symfony2

Unit Tests

„“

Quelle: http://martinfowler.com/articles/microservice-testing/#testing-unit-diagram

Page 29: Microservice Teststrategie mit Symfony2

Unit Tests

Page 30: Microservice Teststrategie mit Symfony2

Unit Tests

Page 31: Microservice Teststrategie mit Symfony2

Unit Tests

Page 32: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 33: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 34: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 35: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 36: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 37: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 38: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 39: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 40: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 41: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 42: Microservice Teststrategie mit Symfony2

Unit Tests

Symfony

Service Layer

Entities

Repositories

Doctrine ORM

Gat

eway

s

Guz

zle

@

Page 43: Microservice Teststrategie mit Symfony2

Integration Tests

Page 44: Microservice Teststrategie mit Symfony2

Integration Tests

„“

Quelle: http://martinfowler.com/articles/microservice-testing/#testing-integration-diagram

Page 45: Microservice Teststrategie mit Symfony2

<?php$config = Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration( '/path/to/config/files'); $entityManager = Doctrine\ORM\EntityManager::create( [ 'driver' => 'pdo_mysql', 'host' => 'localhost', 'user' => 'root', 'password' => '', 'dbname' => 'recipe' ], $config); $repository = $entityManager->getRepository( 'Chefkoch\Recipe\Domain\Model\Recipe');

@

Page 46: Microservice Teststrategie mit Symfony2

<?php$config = Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration( '/path/to/config/files'); $entityManager = Doctrine\ORM\EntityManager::create( [ 'driver' => 'pdo_mysql', 'host' => 'localhost', 'user' => 'root', 'password' => '', 'dbname' => 'recipe' ], $config); $repository = $entityManager->getRepository( 'Chefkoch\Recipe\Domain\Model\Recipe');

@

Page 47: Microservice Teststrategie mit Symfony2

Component Tests

Page 48: Microservice Teststrategie mit Symfony2

Component Tests

„“

Quelle: http://martinfowler.com/articles/microservice-testing/#testing-component-in-process-diagram

Page 49: Microservice Teststrategie mit Symfony2

Component Tests

Page 50: Microservice Teststrategie mit Symfony2

Component Tests

Page 51: Microservice Teststrategie mit Symfony2

Component Tests

WebTestCase!

Page 52: Microservice Teststrategie mit Symfony2

Component Tests

WebTestCase!

SQLite

Page 53: Microservice Teststrategie mit Symfony2

Component Tests

WebTestCase!

SQLite Mock Handler

Page 54: Microservice Teststrategie mit Symfony2

<?phpnamespace Chefkoch\Bundle\RecipeBundle\Tests\Controller;use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;class RecipeStartpageControllerTest extends WebTestCase{ public function testRecipeStartpage() { $client = self::createClient(); $client->request('GET', '/rezepte'); $this->assertContains('Rezepte', $client->getResponse()->getContent()); }}

@

Page 55: Microservice Teststrategie mit Symfony2

# config_test.ymldoctrine: dbal: driver: pdo_sqlite memory: true

<?phpnamespace Chefkoch\Bundle\RecipeBundle\Test\Controller;use Symfony\Bundle\FrameworkBundle\Test\WebTestCase as BaseWebTestCase;use Doctrine\ORM\EntityManager;use Doctrine\ORM\Tools\SchemaTool;abstract class WebTestCase extends BaseWebTestCase{ public function setUp() { $entityManager = self::getClient()->getContainer()->get( 'doctrine.orm.default_entity_manager' ); $schemaTool = new SchemaTool($entityManager); $schemaTool->createSchema( $entityManager->getMetadataFactory()->getAllMetadata() ); }}

Page 56: Microservice Teststrategie mit Symfony2

<?phpuse GuzzleHttp\Client;use GuzzleHttp\Handler\MockHandler;use GuzzleHttp\HandlerStack;use GuzzleHttp\Psr7\Response;$mock = new MockHandler([ new Response( 200, ['Content-Type' => 'application/json'], '{"id": "1", "title": "Suppe"}' ) ]);$handler = HandlerStack::create($mock);$client = new Client( ['handler' => $handler] );

Page 57: Microservice Teststrategie mit Symfony2

Component Tests

„“

Quelle: http://martinfowler.com/articles/microservice-testing/#testing-component-out-of-process-diagram

„Out of Process“

Page 58: Microservice Teststrategie mit Symfony2

@

Page 59: Microservice Teststrategie mit Symfony2

@var casper = require('casper').create();casper.test.begin('Teste Rezeptsuche', 2, function suite(test) { casper.start("http://api/v2/recipes", function() { test.assertHttpStatus(200); test.assertEquals(10, JSON.parse(this.getPageContent()).results.length); }); casper.run(function() { test.done(); });});

Page 60: Microservice Teststrategie mit Symfony2

Contract Tests

Page 61: Microservice Teststrategie mit Symfony2

Contract Tests

„“

Quelle: http://martinfowler.com/articles/microservice-testing/#testing-contract-diagram

Page 62: Microservice Teststrategie mit Symfony2

End-To-End Tests

Page 63: Microservice Teststrategie mit Symfony2

End-To-End Tests

„“

Quelle: http://martinfowler.com/articles/microservice-testing/#testing-end-to-end-diagram

Page 64: Microservice Teststrategie mit Symfony2

@

Page 65: Microservice Teststrategie mit Symfony2

@

Page 66: Microservice Teststrategie mit Symfony2

@

Page 67: Microservice Teststrategie mit Symfony2

@

/

Page 68: Microservice Teststrategie mit Symfony2

@Feature: Admin Integration Als Salesmitarbeiter möchte ich das Wettbewerbsbackend über den normalen Admin verwenden können @mink:selenium2 Scenario: Login über Admin Given A sales user "admin" with password "tester" Given I am on "https://admin-local/rezeptwettbewerbe/admin" Then I should see "Benutzername:" When I fill in "Benutzername:" with "admin" When I fill in "Passwort:" with "tester" When I press "Einloggen!" Then I should see "Liste der Rezeptwettbewerbe" And I should see "Logout" And I should see "Hallo admin!"

Page 69: Microservice Teststrategie mit Symfony2

Teststrategien

Page 70: Microservice Teststrategie mit Symfony2

„“

Quelle: http://martinfowler.com/articles/microservice-testing/#conclusion-test-pyramid

Page 71: Microservice Teststrategie mit Symfony2

„“

Quelle: http://martinfowler.com/articles/microservice-testing/#conclusion-options

Page 72: Microservice Teststrategie mit Symfony2

Zusammenfassung

Page 73: Microservice Teststrategie mit Symfony2

Zusammenfassung

„“

Quelle: http://martinfowler.com/articles/microservice-testing/#conclusion-summary

Page 74: Microservice Teststrategie mit Symfony2

VielenDank !

Page 75: Microservice Teststrategie mit Symfony2

?Fragenhttp://chefkoch.jobs - We are hiring ;)

http://perprogramming.de [email protected]