-getrieben. Wer treibt eigentlich die Test-Entwicklung?

28
getrieben Wer treibt eigentlich die Test Entwicklung? PyCon.DE 2013, 15. Oktober 2013, Köln Andi Albrecht

description

Vortrag vom 15. Oktober 2013, gehalten auf der PyCon.DE 2013 in Köln

Transcript of -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Page 1: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

­getriebenWer treibt eigentlich die Test­

Entwicklung?

PyCon.DE 2013, 15. Oktober 2013, Köln

Andi Albrecht

Page 2: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Andi Albrecht— @andialbrecht

Erster Python-Kontakt vor etwa 12 Jahren alsStudentische Hilfskraft bei der DFG

Aktuell: Anwendungsentwickler für Webapplikationenbei ProUnix in Bonn

Entwicklung und Pflege mittlerer und großer Systeme

OpenSource: Rietveld Code Review Tool, python-sqlparse, CrunchyFrog/RunSQLRun, …

Page 3: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Test-Driven DevelopmentFür wen eigentlich?

Page 4: -getrieben. Wer treibt eigentlich die Test-Entwicklung?
Page 5: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

NoPyramid

Page 6: -getrieben. Wer treibt eigentlich die Test-Entwicklung?
Page 7: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Separation of ConcernsTest-Driven Development Behavior-Dr iven Development Robot

Framework UnitTests Feature-Dr iven Development py.test

Selenium System Tests Documentat ion-Dr iven Development

Coverage Component Tests Integration Tests

Page 8: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

DurchgängigeQualität

Page 9: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Was treibt

michzum Testen an?

Page 10: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Der EntwicklerKritischer Blick auf fremden

Code

Page 11: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Die Tools...und deren Ausgaben

Page 12: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Die Ausgaben...und wann es nicht mehr

hilfreich ist

import unittestdef mysum(a,b): return a + b

class MySumTestCase(unittest.TestCase):

def test_is12(self): self.assertEqual(mysum(7, 5), 12) def test_allows_none(self): self.assertEqual(mysum(3, None), 0)

if __name__ == '__main__': unittest.main()

Page 13: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Die AusgabenAlles gut...

Page 14: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Python's UnitTestUnd wenn nicht?

Page 15: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

py.testMehr Info, bitte!

Page 16: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

py.test, mit PEP8-Pluginuh, wait...

Page 17: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

UnitTests / Integration Tests→ für uns Entwickler

✔ richtige Wahl der Tests

✔ richtige Wahl des Test-Runners

✔ praktikable Konfiguration der Ausgaben

gezielte Tests der Code-Basis

Nachweis, dass unser Code funktioniert

zuverlässige Basis für andere Entwickler und QS

Page 18: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Der Tester...den interessiert das erstmal

nichtNah beim Kunden

Page 19: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Akzeptanz

Page 20: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Robot Framework*** Settings ***Documentation A test suite with […]...... This test has a workflow that […]Resource resource.txt

*** Test Cases ***Valid Login Open Browser To Login Page Input Username demo Input Password mode Submit Credentials Welcome Page Should Be Open [Teardown] Close Browser

Page 21: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Robot FrameworkOpen Browser To Login Page[resource.txt]*** Settings ***Library Selenium2Library

*** Keywords ***Open Browser To Login Page Open Browser ${LOGIN URL} ${BROWSER} Maximize Browser Window Login Page Should Be Open

Page 22: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Robot FrameworkOpen Browser ${LOGIN URL} ${BROWSER}[Library: Selenium2Library]class _BrowserManagementKeywords(KeywordGroup):

def open_browser(self, url, browser='firefox', […]): """Opens a new browser instance to given URL.""" […] browser_name = browser browser = self._make_browser(browser_name,desired_capabilities, ff_profile_dir,remote_url) browser.get(url)

Page 23: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Die AusgabenIm Detail

Page 24: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Die Ausgaben...und als Testbericht

Page 25: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Documentation-DrivenDevelopment

Ein kleiner Exkurs

”If the implementation is easy to explain, it may be a goodidea.“

The Zen of Python, by Tim Peters

Page 26: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

sphinx-doc.org

Page 27: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Wir wollen alle QualitätEntwickler will stabilen Code

Tester will "runde" Anwendung

Der Endanwender will einfach nur, dass esfunktioniert

Page 28: -getrieben. Wer treibt eigentlich die Test-Entwicklung?

Danke!

E-Mail

Twitter

Homepage

[email protected]

@andialbrecht

http://andialbrecht.de

prounix.de