<> /!\ Em processo de tradução. Sinta-se à vontade para traduzir os trechos inacabados. Entre para a lista de discussões sobre [[http://lists.idyll.org/listinfo/testing-in-python|Testing In Python TDD (Test-Driven-Development) em Python]] para esclarecer suas dúvidas sobre as ferramentas abaixo. == Testes Unitários (Unit Testing) == ||'''Ferramenta'''||'''Categoria'''||'''Autor'''||'''Parte de'''||'''Descrição'''|| || [[http://pyunit.sourceforge.net/pyunit.html|unittest]] || unit testing || [[http://www.pythonconsulting.com/|Steve Purcell]] || [[http://docs.python.org/lib/module-unittest.html|Python standard lib]]|| primeiro ''framework'' para testes unitários a ser incluída na biblioteca padrão da linguagem Python; fácil de usar por pessoas familiarizadas com os frameworks xUnit; suporte para organização dos testes e reuso via suites de testes || || [[http://docs.python.org/lib/module-doctest.html|doctest]] || unit testing || [[http://www.python.org/peps/pep-0020.html|Tim Peters]] || [[http://docs.python.org/lib/module-doctest.html|Python standard lib]]|| copy and paste output from shell session; [[http://agiletesting.blogspot.com/2005/02/agile-documentation-with-doctest-and.html|"Agile Documentation"]]: unit tests themselves can serve as documentation when combined with epydoc; also see [[http://agiletesting.blogspot.com/2005/08/agile-documentation-in-django-project.html|Django's approach]] || || [[http://codespeak.net/py/current/doc/test.html|py.test]] || unit testing || [[http://codespeak.net/|Holger Krekel]] || [[http://codespeak.net/py/current/doc/home.html|py lib]] || no API!;automatic collection of tests; simple asserts; strong support for test fixture/state management via setup/teardown hooks; strong debugging support via customized traceback || || [[http://testoob.sourceforge.net/|TestOOB]] || unittest extensions || [[http://freshmeat.net/~oripel/|Ori Peleg]] || || unittest enhancements; test filtering via regex/glob patterns; reporting in XML/HTML; colorized output; runs pdb on failing tests; run in parallel in threads/processes; verbose asserts; report failures immediately; and a little more; || || [[http://somethingaboutorange.com/mrl/projects/nose/|nose]] || unittest extensions || [[http://somethingaboutorange.com/mrl/|Jason Pellerin]] || || unit test framework, used most notably by [[http://www.turbogears.org/|TurboGears]]; provides an alternate test discovery and running process for unittest, one that is intended to mimic the behavior of py.test as much as is reasonably possible without resorting to too much magic. More friendly with unittest.TestCase-based tests than py.test. || || [[http://twistedmatrix.com/trac/wiki/TwistedTrial|Trial]] || unittest extensions || [[http://mumak.net/wiki|Jonathan Lange]] || [[http://www.twistedmatrix.com|Twisted]] || Extension of unittest to support writing asynchronous unit tests using Deferreds and new result types ('skip' and 'todo'). Includes a command-line program that does test discovery and integrates with doctest and coverage. || || [[http://www.robertcollins.net/unittest/subunit|subunit]] || unittest extensions || [[http://www.robertcollins.net/|Robert Collins]] || || Transparently adds support for running unittest test cases/suites in a separate process: prevents system wide changes by a test destabilising the test runner. It also allows reporting from tests in another process into the unittest framework, giving a single integrated test environment. || || [[http://www.robertcollins.net/unittest/testresources|testresources]] || unittest extensions || [[http://www.robertcollins.net/|Robert Collins]] || || Provides a mechanism for managing 'resources' - expensive bits of infrastructure - that are needed by multiple tests. Resources are constructed and free on demand, but with an optional TestSuite, the test run order is optimised to reduce the number of resource constructions and releases needed. Compatible with unittest. || || [[http://www.mems-exchange.org/software/sancho/|Sancho]] || unit testing || [[http://www.mems-exchange.org|MEMS and Nanotechnology Exchange]] || [[http://www.mems-exchange.org/software/|MEMS Exchange tools]] || Sancho 2.1 runs tests, and provides output for tests that fail; Sancho 2.1 does not count tests passed or failed; targets projects that do not maintain failing tests || || [[http://sourceforge.net/projects/pyunitperf|pyUnitPerf]] || performance-based unit testing || [[http://agiletesting.blogspot.com|Grig Gheorghiu]] || || port of [[http://www.clarkware.com/software/JUnitPerf.html|JUnitPerf]]; transparently adds [[http://agiletesting.blogspot.com/2004/12/performance-testing-with-pyunitperf.html|performance testing capabilities]] to existing unitttest-based test suites || || [[http://www.accesscom.com/~darius/software/clickcheck.html|Peckcheck]] || specification-based unit testing || [[http://www.accesscom.com/~darius/personal/contact.html|Darius Bacon]] || || like the unittest module, except that test methods may take arguments; you declare each argument with a default value which names a test-data generator and the peckcheck module will peck at your test methods with a bunch of generated values || || [[http://projects.edgewall.com/qunittest/|qunittest]] || unit testing || [[http://www.edgewall.com/|Edgewall]] || || Easy-to-use (!PyQt) GUI framework and application for use with the Python unit testing framework. It can be used to conveniently execute unit tests and suites, and then display the results in a useful fashion. || || [[http://www.zetadev.com/software/testosterone/|testosterone]] || unit testing || [[http://www.zetadev.com/|Chad Whitacre]] || || A manly test runner; command-line and curses(3) interfaces; the iPod of test runners. (More seriously, makes it easier to browse and inspect your test failures) || || [[http://cheeseshop.python.org/pypi/zope.testing|zope.testing]] || unit testing || Zope3 community || || Powerful test runner that includes support for post-mortem debugging of test failures. Also includes profiling and coverage reporting. This is a standalone package that has no dependencies on Zope and works just fine with projects that don't use Zope. || == Ferramentas para "Mock Test" == ||'''Tool'''||'''Category'''||'''Author'''||'''Claim to fame'''|| || [[http://python-mock.sourceforge.net/|Python Mock]] || mock testing || [[http://www.thedeveloperscoach.com|Dave Kirby]] || Python Mock enables the easy creation of mock objects that can be used to emulate the behaviour of any class that the code under test depends on. You can set up expectations about the calls that are made to the mock object, and examine the history of calls made. This makes it easier to unit test classes in isolation. [[http://sourceforge.net/projects/python-mock/|Download it here.]] || || [[http://theblobshop.com/pymock|PyMock]] || mock testing || [[http://theblobshop.com/|Jeff Younker]] || !PyMock is based on the Java [[http://www.easymock.org|easymock]] package. It uses a recording and replay model rather than using a specification language. Easymock lives up to its name compared to other mocking packages. !PyMock takes advantage of python's dynamic nature for futher improvements.|| || [[http://pmock.sourceforge.net/|pMock]] || mock testing || Graham Carlyle || Inspired by the Java [[http://www.jmock.org/|jMock]] library, pMock makes the writing of unit tests using mock object techniques easier || || [[http://blog.ianbicking.org/minimock.html|minimock]] || mock testing || [[http://blog.ianbicking.org/|Ian Bicking]] || Embeds mock testing constructs inside doctest tests. || || [[http://oakwinter.com/code/svnmock/|svnmock]] || mock testing || [[http://oakwinter.com/code/|Collin Winter]] || enables easier testing of Python programs that make use of [[http://subversion.tigris.org|Subversion's]] Python bindings || || [[http://www.reahl.org/project?name=stubble|Stubble]] || stub testing || [[http://www.reahl.org|Iwan Vosloo]] ||Stubble allows you to write arbitrary classes for use as stubs instead of read classes while testing. Stubble lets you link a stub class loosely to the real class which it is a stub for. This information is then used to ensure that tests will break if there is a discrepancy between the interface supported by your stub class and that of the real class it stands in for. || == Fuzz Testing Tools == According to Wikipedia, [[http://en.wikipedia.org/wiki/Fuzz_testing|"fuzz testing" (or "fuzzing")]] is a software testing technique whose basic idea is to attach the inputs of a program to a source of random data ("fuzz"). If the program fails (for example, by crashing, or by failing built-in code assertions), then there are defects to correct. The great advantage of fuzz testing is that the test design is extremely simple, and free of preconceptions about system behavior. ||'''Tool'''||'''Author'''||'''Claim to fame'''|| || [[http://jester.sourceforge.net/|Pester]] || Ivan Moore || Tests your tests by mutating source code and finding tests that don't fail! || || [[http://peachfuzz.sourceforge.net/|Peach Fuzzer Framework]] || Michael Eddington || Peach can fuzz just about anything from .NET, COM/ActiveX, SQL, shared libraries/DLL's, network applications, web, you name it. || || [[http://antiparser.sourceforge.net/|antiparser]] || dmckinney || The purpose of antiparser is to provide an API that can be used to model network protocols and file formats by their composite data types. Once a model has been created, the antiparser has various methods for creating random sets of data that deviates in ways that will ideally trigger software bugs or security vulnerabilities. || || [[http://sourceforge.net/projects/taof|Taof (The Art Of Fuzzing)]] || rodrigomarcos || Taof is a GUI cross-platform Python generic network protocol fuzzer. It has been designed for minimizing set-up time during fuzzing sessions and it is specially useful for fast testing of proprietary or undocumented protocols. || == Web Testing Tools == First, let's define some categories of Web testing tools: * '''Browser simulation''' tools: simulate browsers by implementing the HTTP request/response protocol and by parsing the resulting HTML * '''Browser automation''' tools: automate browsers by driving them for example via COM calls in the case of Internet Explorer, or XPCOM in the case of Mozilla * '''In-process''' or unit-test-type tools (definition [[http://blog.ianbicking.org/best-of-the-web-app-test-frameworks-comment-13.html|courtesy of Ian Bicking]]): call an application in the same process, instead of generating an HTTP request; so an exception in the application would go all the way up to the command runner (py.test, unittest, etc). ||'''Tool'''||'''Category'''||'''Author'''||'''Part of'''||'''Claim to fame'''|| || [[http://www.idyll.org/~t/www-tools/twill/|twill]] || Browser simulation & In-process || [[http://www.advogato.org/person/titus/|Titus Brown]] |||| offers simple commands for navigating Web pages, posting forms and asserting conditions; can be used as shell script or Python module; can be used for [[http://www.idyll.org/%7Et/www-tools/twill.html#unit-testing|unit-testing your own Web app]]; stress-test functionality; port of [[http://pbp.berlios.de/|PBP]]; uses John J. Lee's [[http://wwwsearch.sf.net/|mechanize]] || || [[http://mechanicalcat.net/tech/webunit/|webunit]] || Browser simulation || [[http://www.mechanicalcat.net/richard/log|Richard Jones]] |||| HTTP, HTTPS, GET, POST, basic auth all handled; control over expected status codes; uses unittest as the underlying framework|| || [[http://funkload.nuxeo.org/|FunkLoad]] || Browser simulation || Benoit Delbosc / [[http://www.nuxeo.com/|Nuxeo]] |||| functional/performance/load/stress testing for Web applications; easy test creation using [[http://hathawaymix.org/Software/TCPWatch/|TCPWatch]] as proxy recorder; reporting capabilities; based on [[http://mechanicalcat.net/tech/webunit/|webunit]] || || [[http://cheeseshop.python.org/pypi?:action=display&name=zope.testbrowser|zope.testbrowser]] || Browser simulation || [[http://www.benjiyork.com/|Benji York]] || [[http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/FrontPage|Zope 3]] || designed to be used in doctests that mirror user actions (see the README.txt for [[http://svn.zope.org/*checkout*/Zope3/trunk/src/zope/testbrowser/README.txt|examples]]); can also be used as standalone Web testing tool outside of Zope 3|| || [[http://www.cherrypy.org/file/trunk/cherrypy/test/webtest.py|webtest]] || Browser simulation || [[http://www.aminus.org/blogs/index.php/fumanchu|Robert Brewer]] || [[http://www.cherrypy.org/|CherryPy]] || extensions to unittest for web frameworks; uses http://docs.python.org/lib/module-httplib.html httplib] || || [[http://pamie.sourceforge.net/|PAMIE]] || Browser automation || Robert Marchetti |||| automates Internet Explorer by manipulating IE's Document Object Model via COM || || [[http://kb.mozillazine.org/PyXPCOM|PyXPCOM]] || Browser automation || [[http://starship.python.net/crew/mhammond/|Mark Hammond]] |||| provides Python XPCOM bindings for automating Mozilla browsers || || [[http://pythonpaste.org/testing-applications.html|paste.test.fixture]] || In-process || [[http://blog.ianbicking.org|Ian Bicking]] || [[http://pythonpaste.org/|Paste]] || lets you test your [[http://www.python.org/peps/pep-0333.html|WSGI]] applications without a server; similar in feel to zope.testbrowser || || [[http://simon.bofh.ms/cgi-bin/trac-django-projects.cgi/wiki/DjangoTesting|DjangoTesting]] || In-process || [[http://hugo.muensterland.org/|Georg Bauer]] || [[http://simon.bofh.ms/cgi-bin/trac-django-projects.cgi/wiki/DjangoStuff|DjangoStuff]] || very simple and small testing framework for [[http://www.djangoproject.com/|Django]] applications, based on the ideas of the [[http://www.rubyonrails.org/|Ruby on Rails]] testing framework; fully based on unittest, so you don't need anything beside Django and Python to make use of it || || [[http://ibofobi.dk/blog/archive/2005/11/08/django-doctest/|ibofobi.utils.test]] || In-process || [[http://ibofobi.dk/blog/|Sune Kirkeby]] |||| testing framwework for [[http://www.djangoproject.com/|Django]] applications; built on top of doctest instead of unittest; fixtures are written in YAML not Python code; implemented simple request/response tests on top of [[http://www.crummy.com/software/BeautifulSoup/|Beautiful Soup]] || '''Note''': Although not a Python-specific testing tool, [[http://openqa.org/selenium|Selenium]] is nevertheless an important addition to any tester's arsenal. It relates to Python in that it can use a Twisted-based server to run tests against Web applications. Read a [[http://agiletesting.blogspot.com/2005/03/web-app-testing-with-python-part-2.html|tutorial]] about it, followed by a [[http://agiletesting.blogspot.com/2005/03/quick-update-on-selenium-in-twisted.html|quick update]]. With [[http://joker.linuxstuff.pl/documentation/make_selenium|make_selenium.py]] script you can write Selenium tests in Python. == Acceptance/Business Logic Testing Tools == ||'''Tool'''||'''Author'''||'''Claim to fame'''|| || [[http://fitnesse.org/FitServers.PythonFit|PyFIT]] || John Roth || port of [[http://fit.c2.com/|FIT]]; supports both FIT and [[http://fitnesse.org|FitNesse]]; acceptance tests for business logic written as HTML or Wiki tables || || [[http://texttest.org/|TextTest]] || Geoff Bache || works by comparing plain text logged by programs with a previous 'gold standard' version of that text; the tool itself is written in Python but it can be used to test programs written in any language; comes with extensive self tests which serve as examples of how to use it, i.e. how to test a non-trivial application with a pyGTK GUI. || || [[http://svn.colorstudy.com/FitLoader/trunk/|FitLoader]] || Ian Bicking || A (rather alpha-ish) library for loading tests from Excel or CSV files; not really a framework, but useful for acceptance tests written by non-programmers || == GUI Testing Tools == ||'''Tool'''||'''Author'''||'''Claim to fame'''|| || [[http://gintas.pov.lt/guitest/|guitest]] || [[http://gintasm.blogspot.com/|Gintautas Miliauskas]] || Python helper library for testing Python GUI applications, with [[http://www.pygtk.org/|pyGTK support]] being the most mature || || [[http://sourceforge.net/projects/pyguiunit/|pyGUIUnit]] || [[http://pydev.blogspot.com/|Fabio Zadrozny]] || aims to be a gui unittesting library for python; initially provided solely for [[http://www.riverbankcomputing.co.uk/pyqt/|PyQt]], but it may be extended in the future || || [[http://people.redhat.com/zcerza/dogtail/|dogtail]] || [[http://people.redhat.com/zcerza/|Zack Cerza]] || Created by Redhat engineers on linux. Uses the X11 accessability framework (AT-SPI) to drive applications so works well with the gnome desktop on Unixes. Has [[http://people.redhat.com/zcerza/dogtail/media.html|flash movies]] || || [[http://gnomebangalore.org/ldtp/index.php/Main_Page|ldtp]] || [[http://gnomebangalore.org/ldtp/index.php/Team_members|team members]] || Also uses the X11 accessability framework (AT-SPI) to drive applications so works well with the gnome desktop on Unixes. Has extensive tests for the evolution groupware client. || || [[http://sourceforge.net/projects/pywinauto/|pywinauto]] || Mark !McMahon || Simple Windows (NT/2K/XP) GUI automation with Python. There are tests included for Localization testing but there is no limitation to this. Most of the code at the moment is for recovering information from Windows windows and performing actions on those controls. The idea is to have high level methods for standard controls rather then rely on Sending keystrokes to the applications.|| || [[http://sourceforge.net/project/showfiles.php?group_id=65529|pyAA]] || [[http://www.cs.unc.edu/~parente/|Peter Parente]] || pyAA is an object oriented Python wrapper around the client-side functionality in the Microsoft Active Accessibility (MSAA) library. MSAA is a library for the Windows platform that allows client applications inspect, control, and monitor events and controls in graphical user interfaces (GUIs) and server applications to expose runtime information about their user interfaces. See the [[http://www.cs.unc.edu/~parente/tech/tr09.shtml|User interface automation with pyAA]] tutorial for more info. || ||[[http://www.tizmoi.net/watsup/intro.html|WATSUP]] || Dr Tim Couper || Windows Application Test System Using Python - another Windows GUI automation tool. || || [[http://www.brunningonline.net/simon/blog/archives/winGuiAuto.py.html|winGuiAuto]] || Simon Brunning || Low-level library for Windows GUI automation used by PAMIE and WATSUP. || || [[http://www.async.com.br/projects/kiwi/|kiwi ui testing]] || Johan Dahlin || PyGTK UI Testing framework, recording and playback system. || == Source Code Checking Tools == ||'''Tool'''||'''Author'''||'''Claim to fame'''|| || [[http://pychecker.sourceforge.net/|PyChecker]] || [[http://sourceforge.net/users/ericnewton/|Eric Newton]] and [[http://nnorwitz.blogspot.com/|Neal Norwitz]] || finds problems that are typically caught by a compiler for less dynamic languages; imports each module before checking it || || [[http://www.logilab.org/projects/pylint|Pylint]] || Sylvain Thénault / [[http://www.logilab.org/categories/python|Logilab]] || includes [[http://pychecker.sourceforge.net/|PyChecker]] checks, plus more features, like checking line-code's length, checking if variable names are well-formed according to your coding standard, or checking if declared interfaces are truly implemented || || [[http://divmod.org/projects/pyflakes|Pyflakes]] || Phil Frost / [[http://divmod.org/trac|Divmod]] || similar to [[http://pychecker.sourceforge.net/|PyChecker]]; focused on identifying common errors quickly without executing Python code; its primary advantage over [[http://pychecker.sourceforge.net/|PyChecker]] is that it is fast: it runs on most large projects in only a few seconds || == Code Coverage Tools == ||'''Tool'''||'''Author'''||'''Claim to fame'''|| || [[http://www.nedbatchelder.com/code/modules/coverage.html|coverage]] || [[http://www.nedbatchelder.com/blog/index.html|Ned Batchelder]] || measures code coverage during Python execution; uses the code analysis tools and tracing hooks provided in the Python standard library to determine which lines are executable, and which have been executed || || [[http://darcs.idyll.org/~t/projects/figleaf/README.html|figleaf]] || [[http://ivory.idyll.org/blog/|Titus Brown]] || figleaf is a Python code coverage analysis tool, built somewhat on the model of Ned Batchelder's fantastic coverage module. The goals of figleaf are to be a minimal replacement of 'coverage.py' that supports more configurable coverage gathering and reporting; figleaf is useful for situations where you are recording code coverage in multiple execution ru