lemoncheesecake: Test Storytelling

lemoncheesecake is an end-to-end test framework for Python that brings trust around test results. It allows test developers to be very explicit about what their tests really do with logging, matchers, file attachments, etc..

Here is a test example:

# suites/suite.py

import json
import requests

import lemoncheesecake.api as lcc
from lemoncheesecake.matching import *

    "description": "Github tests"

@lcc.test("Test Organization end-point")
def organization():
    lcc.set_step("Get lemoncheesecake organization information")
    lcc.log_info("GET https://api.github.com/orgs/lemoncheesecake")
    resp = requests.get("https://api.github.com/orgs/lemoncheesecake")
    require_that("HTTP code", resp.status_code, is_(200))
    data = resp.json()
    lcc.log_info("Response\n%s" % json.dumps(data, indent=4))

    lcc.set_step("Check API response")
        "type", is_("Organization"),
        "id", is_integer(),
        "description", is_not_none(),
        "login", is_(present()),
        "created_at", match_pattern(r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$"),
        "has_organization_projects", is_true(),
        "followers", is_(greater_than_or_equal_to(0)),
        "following", is_(greater_than_or_equal_to(0)),
        "repos_url", ends_with("/repos"),
        "issues_url", ends_with("/issues"),
        "events_url", ends_with("/events"),
        "hooks_url", ends_with("/hooks"),
        "members_url", ends_with("/members{/member}"),
        "public_members_url", ends_with("/public_members{/member}")

And here are the corresponding test results:



In real test code, you’d better use lemoncheesecake-requests when doing HTTP / REST API testing.

See Getting Started to create your first test project.


  • Advanced test hierarchies using suites, tests and nested suites

  • Test description and metadata: tags, properties (key=value associations) and links

  • Support for test filtering

  • Multiple reporting flavors built-in: HTML, JSON, XML, JUnit, ReportPortal, Slack notifications

  • Fixtures, parametrized tests

  • BDD support using behave

  • Test parallelization

  • Rich CLI toolbox

lemoncheesecake is compatible with Python 3.8-3.12.


The Changelog will tell you about features, improvements and fixes of each version.

Installation and configuration

Writing tests

The lemoncheesecake ecosystem


Bugs and improvement ideas are welcomed in tickets.

A Google Groups forum is also available for discussions about lemoncheesecake: https://groups.google.com/forum/#!forum/lemoncheesecake .


lemoncheesecake is licensed under the Apache License