跳转到主要内容

扩展Hypothesis以添加对类型注解函数的完全自动测试

项目描述

hypothesis-auto - Fully Automatic Tests for Type Annotated Functions Using Hypothesis.


PyPI version Build Status codecov Join the chat at https://gitter.im/timothycrosley/hypothesis-auto License Downloads


阅读最新文档 - 浏览GitHub代码库


hypothesis-autoHypothesis 项目的扩展,它能够为类型注解函数提供完全自动的测试。

Hypothesis Pytest Auto Example

关键特性

  • 类型注解驱动:利用你函数现有的类型注解自动构建数十个测试用例。
  • 低门槛:以可能最低的门槛开始使用基于属性的测试。只需运行 auto_test(FUNCTION) 即可运行数十个测试。
  • pytest兼容:与Hypothesis本身一样,hypothesis-auto内置了对流行的 pytest 测试框架的兼容性。这意味着你可以通过一行代码将自动生成的测试用例转换为单个pytest测试用例。
  • 可扩展:当你发现自己需要自定义auto_test测试用例时,可以轻松利用包括按参数自定义策略在内的所有 Hypothesis 功能。

安装

要开始使用 - 将 hypothesis-auto 安装到你的项目虚拟环境中

pip3 install hypothesis-auto

poetry add hypothesis-auto

pipenv install hypothesis-auto

使用示例

!!! 注意 在旧的示例中,您将看到以 _ 前缀的参数,例如 _auto_verify=。这样做是为了避免与现有函数参数冲突。根据社区反馈,项目已切换到 _ 后缀,例如 auto_verify_=,以降低冲突的可能性,同时避免将它们视为私有参数的暗示。

框架独立的使用

基本 auto_test 使用

from hypothesis_auto import auto_test


def add(number_1: int, number_2: int = 1) -> int:
    return number_1 + number_2


auto_test(add)  # 50 property based scenarios are generated and ran against add
auto_test(add, auto_runs_=1_000)  # Let's make that 1,000

添加允许的异常

from hypothesis_auto import auto_test


def divide(number_1: int, number_2: int) -> int:
    return number_1 / number_2

auto_test(divide)

-> 1012                     raise the_error_hypothesis_found
   1013
   1014         for attrib in dir(test):

<ipython-input-2-65a3aa66e9f9> in divide(number_1, number_2)
      1 def divide(number_1: int, number_2: int) -> int:
----> 2     return number_1 / number_2
      3

0/0

ZeroDivisionError: division by zero


auto_test(divide, auto_allow_exceptions_=(ZeroDivisionError, ))

使用自定义验证方法与 auto_test

from hypothesis_auto import Scenario, auto_test


def add(number_1: int, number_2: int = 1) -> int:
    return number_1 + number_2


def my_custom_verifier(scenario: Scenario):
    if scenario.kwargs["number_1"] > 0 and scenario.kwargs["number_2"] > 0:
        assert scenario.result > scenario.kwargs["number_1"]
        assert scenario.result > scenario.kwargs["number_2"]
    elif scenario.kwargs["number_1"] < 0 and scenario.kwargs["number_2"] < 0:
        assert scenario.result < scenario.kwargs["number_1"]
        assert scenario.result < scenario.kwargs["number_2"]
    else:
        assert scenario.result >= min(scenario.kwargs.values())
        assert scenario.result <= max(scenario.kwargs.values())


auto_test(add, auto_verify_=my_custom_verifier)

自定义验证方法应接受单个 场景 并抛出异常以表示错误。

有关可传递给 auto_test 的完整参数集,请参阅其 API 参考文档

pytest 使用

使用 auto_pytest_magic 自动生成数十个 pytest 测试用例

from hypothesis_auto import auto_pytest_magic


def add(number_1: int, number_2: int = 1) -> int:
    return number_1 + number_2


auto_pytest_magic(add)

使用 auto_pytest 在临时目录中运行数十个测试用例

from hypothesis_auto import auto_pytest


def add(number_1: int, number_2: int = 1) -> int:
    return number_1 + number_2


@auto_pytest()
def test_add(test_case, tmpdir):
    tmpdir.mkdir().chdir()
    test_case()

使用 auto_pytest_magic 与自定义验证方法

from hypothesis_auto import Scenario, auto_pytest


def add(number_1: int, number_2: int = 1) -> int:
    return number_1 + number_2


def my_custom_verifier(scenario: Scenario):
    if scenario.kwargs["number_1"] > 0 and scenario.kwargs["number_2"] > 0:
        assert scenario.result > scenario.kwargs["number_1"]
        assert scenario.result > scenario.kwargs["number_2"]
    elif scenario.kwargs["number_1"] < 0 and scenario.kwargs["number_2"] < 0:
        assert scenario.result < scenario.kwargs["number_1"]
        assert scenario.result < scenario.kwargs["number_2"]
    else:
        assert scenario.result >= min(scenario.kwargs.values())
        assert scenario.result <= max(scenario.kwargs.values())


auto_pytest_magic(add, auto_verify_=my_custom_verifier)

自定义验证方法应接受单个 场景 并抛出异常以表示错误。

有关 pytest 集成的完整 API 参考,请参阅 API 参考文档

为什么创建 hypothesis-auto?

我希望以无/低阻力方式开始在项目中整合属性测试。这样的解决方案还鼓励使用类型提示,对我来说是双赢。

希望你也觉得 hypothesis-auto 有用!

~Timothy Crosley

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

hypothesis_auto-1.1.5.tar.gz (9.4 kB 查看哈希值)

上传

构建分发

hypothesis_auto-1.1.5-py3-none-any.whl (7.9 kB 查看哈希值)

上传 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面