Fork me on GitHub



Release date:in development
Tested on:CPython 2.5 - 2.7 and 3.1 - 3.2, PyPy 1.5


Release date:2011-04-19
Tested on:CPython 2.5 - 2.7 and 3.1, PyPy 1.4.1

Bugs fixed:

  • 0.5 requires progressbar 2.3; version requirement for dependency added.
  • The setuptools-git plugin wasn’t working well with Attest as a test dependency with test, so it has been dropped in favour of a file.
  • Calls and attributes are now evaluated by the assert hook. The previous behaviour was intentional, but turned out to be less helpful.
  • The assert hook now injects explicit calls to globals() and locals() rather than relying on stack frame inspection. This fixes a bug on CPython 2.5 where inspect.stack() tried to read lines from the source file, based on the line numbers from the generated source, which could end fatally when the line number exceeded the number of lines in the source file.
  • Assertions are now correctly counted when tests are run more than once in the same process.


Release date:2011-03-25
Tested on:CPython 2.5 - 2.7 and 3.1, PyPy 1.4.1

Bugs fixed:

  • The assert hook failed to evaluate list comprehensions and similar constructs because the loop variable was treated as a variable to be looked up in the symbol table.
  • Variables referencing objects implementing __name__ not returning a string caused an exception to exit early, if used with the assert hook in a failing condition.


Code name:Ghost Writer
Release date:2011-03-08
Tested on:CPython 2.5 - 2.7 and 3.1, PyPy 1.4.1
  • Support for evaluated testing with the assert statement by means of an import hook using the _ast module.
  • Assertions of all kinds now run with python -O.
  • Deprecated the Assert class in favor of the import hook.
  • Deprecated Loader in favor of a test_loader attribute on reporters.
  • Added the QuickFixReporter for testing from Vim and other editors.
  • Test functions now get as many context arguments as their signature asks for.
  • Organized the code into modules in a package, but everything can still be imported directly from the attest package.
  • Added runnable modules for running test suites by dotted name, python -mattest on Python 2.7 or newer, python on older versions.


Release date:2011-01-08
Tested on:CPython 2.5 - 2.7 and 3.1, PyPy 1.4.1
  • Support for Python 3.1 and PyPy (besides existing support for 2.5-2.7).
  • Reporters are now loaded via setuptools entry points, allowing third-party packages to register themselves automatically. The get_all_reporters() function was added to complement this extensibility.
  • TestResult was introduced and is now passed to reporters instead of the more limited set of arguments that were previously passed. This change is not backwards-compatible if you have custom reporters.
  • Conditional test registration: Tests.test_if(), Tests.register_if(), test_if().
  • Many new Assert methods:
    • isinstance() and not_isinstance()
    • issubclass() and not_issubclass()
    • json(), css() and xpath()
    • attr() and passed_to()
  • Import fallbacks can be tested using disable_imports().
  • The Tests constructor now accepts an iterable of contexts.
  • Passing Assert objects to the Assert constructor no-longer wraps multiple levels.
  • Test names now include the class name for class-based test.
  • Test registration via dotted name now handles unicode.


Release date:2010-11-27
Tested on:CPython 2.6
  • None if yielded from a context is no-longer passed as arguments to tests.
  • Assert.is_() and Assert.is_not(), if passed an Assert instance, will unwrap it and test against the original object.


Release date:2010-11-26
Tested on:CPython 2.6
  • Functional tests can now have multiple contexts.
  • Tests can be registered by dotted name (import path as string).
  • Collections have a command-line interface via Tests.main().


Release date:2010-11-25
Tested on:CPython 2.6