🕰 Changelog

All notable changes to this project are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.


  • Release date: 2020-06-18 10:00
  • Diff.


Generated locustfiles now support both current major versions of Locust (<1 and ~1).


Please note that this support will most likely be only temporary, so all users of Transformer are kindly encouraged to upgrade their Locust (or tell us what’s blocking them from upgrading).

Since Transformer follows semantic versioning, dropping support for some versions of Locust will only be done in a major Transformer version, most likely 2.0 (not yet planned). If you rely on a pre-1.0 Locust, you can therefore continue upgrading Transformer by following its minor updates (e.g. pip install -U har-transformer=~1).


  • Release date: 2020-06-03 10:42
  • Diff.


Feeding a Transformer-generated locustfile to a version of Locust more recent than 0.99 (May 16, 2020) now displays a more helpful error message suggesting to use a supported version of Locust. Previously, users only saw Locust crash on a now-invalid import from the locustfile. Thank you @TimSC for reporting this issue! (#70)


  • Release date: 2019-10-18 14:09
  • Diff.

Any valid plugins that are in a current directory can be used by Transformer without previous installation. Thank you @jredrejo for your contribution! (#63)


  • Release date: 2019-09-02 12:00
  • Diff.


The generated scenario classes always inherit from TaskSequence (instead of a TaskSet) when they use the @seq_task decorator. Thank you @kbrowns for reporting this! (#62)


  • Release date: 2019-05-17 15:46
  • Diff.


No functional changes in Transformer! Moved tests away from the Transformer package and refactored them to use common fixtures.


  • Release date: 2019-05-03 16:03
  • Diff.


No functional changes in Transformer! Fixed: pushing tagged releases to Github.


  • Release date: 2019-05-03 10:45
  • Diff.


No functional changes in Transformer! Fixed the formatting of this Changelog and configured Travis to automatically push tagged releases to GitHub.


  • Release date: 2019-05-02 17:02
  • Diff.


Added support for http PATCH method.


  • Release date: 2019-05-02 11:52
  • Diff.


Request’s headers are now stored in a case-insensitive dictionary, making the implementation compatible with the requests library (used by Locust).


  • Release date: 2019-04-26 16:44
  • Diff.


Blacklisting mechanism now opens the .urlignore file once per execution of the program, instead of once per Request.


  • Release date: 2019-04-25 14:49
  • Diff.


This new read-only property contains the entry as recorded in a HAR file, corresponding to the specific Request object. As requested by @xinke2411 (#35)


  • Release date: 2019-03-11 16:03
  • Diff.


A header in all generated HAR files now contains the version of Transformer and its new repository’s URL.


  • Release date: 2019-03-06 17:06
  • Diff.


Controls Locust’s URL grouping. Its default value is url, which usually does the right thing and ensures retrocompatibility. Thank you @xinke2411 for this addition! (#34)
An Expression that wraps a non-Expression (e.g. a Request instance), similarly to how Standalone is a Statement that wraps an Expression. Helps manipulating non-syntax tree objects as part of the syntax tree. (#33)
Functional test suite
A functional test suite in functional-tests/ (with only one simple test for starting). It is part of make test and can be run alone with make functest. (#37)


  • When processing HAR requests with the application/json MIME type, Transformer no longer uses the params field as a replacement for a missing text field. This was a mitigation for a bug in a different, Zalando-internal tool. (#33)
  • The documentation has migrated: from Markdown files (some in the repository, some in the GitHub wiki) and loosely Markdown-formatted docstrings in the code, to a Sphinx site under docs/ and rich docstrings. Most Markdown files have been converted to reStructuredText in the process, including this changelog. (#38)
  • The documentation is no longer accessible from the GitHub wiki, but is now hosted by Read The Docs at https://transformer.readthedocs.io. (#43)
  • The release process has changed: A new PyPI release is now published for each commit to the master branch. This should prevent situations where the documentation advertises features not yet released. (#46)


  • A bug in the conversion between Task and Task2 makes Transformer ignore all changes made by plugins to request. Thank you @xinke2411 for reporting this! (#33)
  • Lack of functional tests made us miss the fact that Transformer started crashing when run on the HAR files from the examples/ directory. Transformer was fixed and the appropriate unit and functional tests were added. (#44)



As part of the merge between Task and Task2 (#11).

as_locust_action() generates locustfile code as a string, which is made obsolete by the transformer.python syntax tree framework. (#33)

Unused API for combining a boolean (the decision itself) with a string (a user-friendly explanation for that decision). (#36)


  • Release date: 2019-02-22 11:38 CET
  • Diff.


transformer.dump() & transformer.dumps()

Named by analogy with json.dump() and json.dumps(), these high-level functions should be all most users need to know about the Transformer API. They convert lists of scenario paths and plugins into a locustfile.

They will replace transform(), which requires more familiarity with Transformer’s internals. (#14)


Similar to locustfile() but returns an Iterator str over lines, instead of a unique string containing the full locustfile contents.

This design allows for more flexibility in dump()/dumps() and should result in smaller memory usage for huge locustfiles. (#14)

Hooks for OnTask, OnScenario, OnPythonProgram
Preliminary support for new-generation plugins. (#25)


  • The dump(), dumps(), and transform() functions by default use the Sanitize Headers plugin, even if users don’t provide it in the plugin list.

    This is because the resulting locustfile would almost certainly be broken without this plugin. Users can still opt-out from default plugins by passing the with_default_plugins=False keyword-argument to these functions. (#14)


Replaced with dump() and dumps(), see above. (#14)
Replaced with locustfile_lines(), see above. (#14)


  • Release date: 2019-02-12 13:20 CET
  • Diff.


  • Fix a crash of the transformer command-line tool due to a missing version identifier. (#17)
  • Publish development releases to PyPI for every merge in the master branch. (#17)


  • Release date: 2019-02-12 10:30 CET
  • Diff.


har-transformer on PyPI
It looks like the package name transformer is already taken, unsurprisingly. (#3)
Command-line entrypoint
Transformer can now be called using the transformer script installed by pip, or via python -m transformer. (#7)
Specification of OnTask, OnScenario, OnPythonProgram
Aiming at eventually deprecating OnTaskSequence.
Represents an instantiated plugin.


  • This project is open-sourced in https://github.com/zalando-incubator. The git history prior that is removed per company policy.
  • transformer.plugins.Plugin is renamed transformer.plugins.contracts.OnTaskSequence.


In favor of Poetry.