Tools of Interest: Hypothesis and Pydantic for Property-based Testing

405 views
Skip to first unread message

David Szent-Györgyi

unread,
Apr 25, 2021, 8:18:57 AM4/25/21
to leo-editor
These links might be of interest to Edward and others developing Python code, including Leo. 

First, a praise of property-based testing, with examples that differentiate it from example-based testing. 

Second, Hypothesis, «a Python library for creating unit tests which are simpler to write and more powerful when run, finding edge cases in your code you wouldn’t have thought to look for. It is stable, powerful and easy to add to any existing test suite.

It works by letting you write tests that assert that something should be true for every case, not just the ones you happen to think of.»

Third, Pydantic, «Data validation and settings management using python type annotations. pydantic enforces type hints at runtime, and provides user friendly errors when data is invalid. Define how data should be in pure, canonical python; validate it with pydantic.» This includes support for "custom" (user-defined) types. Pydantic uses type hinting from Versions 3.6 and later of Python. 

A plug-in for Pydantic supports Hypothesis. Used together, Pydantic 1.8 and Hypothesis v5.29.0 allow Hypothesis to automatically load support for custom types like PaymentCardNumber (a credit-card number) and PositiveFloat. Current releases are Pydantic 1.8.1 and Hypothesis 6.10.0. 

Documentation for Hypothesis on Read the Docs
Hypothesis on PyPi
Installing Hypothesis from source

Documentation for Pydantic on Help Manual
Documentation for Pydantic's Hypothesis plug-in
Pydantic on PyPi
Pydantic on GitHub

Message has been deleted
Message has been deleted

David Szent-Györgyi

unread,
Apr 25, 2021, 8:24:56 AM4/25/21
to leo-editor

The Overview page for Pydantic offers the following Rationale, which makes me think that it might be of interest to Leo's users and Leo's developers: 

«So pydantic uses some cool new language features, but why should I actually go and use it?

plays nicely with your IDE/linter/brain There's no new schema definition micro-language to learn. If you know how to use python type hints, you know how to use pydantic. Data structures are just instances of classes you define with type annotations, so auto-completion, linting, mypy, IDEs (especially PyCharm), and your intuition should all work properly with your validated data.

dual use pydantic's BaseSettings class allows pydantic to be used in both a "validate this request data" context and in a "load my system settings" context. The main differences are that system settings can be read from environment variables, and more complex objects like DSNs and python objects are often required.

fast In benchmarks pydantic is faster than all other tested libraries.

validate complex structures use of recursive pydantic models, typing's standard types (e.g. List, Tuple, Dictetc.) and validators allow complex data schemas to be clearly and easily defined, validated, and parsed.

extensible pydantic allows custom data types to be defined or you can extend validation with methods on a model decorated with the validator decorator.

dataclasses integration As well as BaseModel, pydantic provides a dataclass decorator which creates (almost) vanilla python dataclasses with input data parsing and validation.»  

Edward K. Ream

unread,
Apr 26, 2021, 8:03:03 AM4/26/21
to leo-editor
On Sun, Apr 25, 2021 at 7:18 AM David Szent-Györgyi <das...@gmail.com> wrote:

These links might be of interest to Edward and others developing Python code, including Leo. 

First, a praise of property-based testing, with examples that differentiate it from example-based testing. 

Thanks for these links. I'll take a look at Hypothesis and Pedantic soon.

The links are timely because #1766 will be a defining feature of Leo 6.5.

Edward
Reply all
Reply to author
Forward
0 new messages