跳转到主要内容

Pytest插件,可以直接从Markdown文件运行测试

项目描述

markdown-pytest

markdown-pytest插件是一个pytest插件,允许您直接从Markdown文件运行测试。

使用此插件,您可以在Markdown文件中编写测试,使文档示例易于阅读、理解和维护。测试的执行方式与其他Pytest测试相同。

Markdown文件内容示例

<!-- name: test_assert_true -->
```python
assert True
```
将显示为
assert True

限制

由于Markdown中没有添加属性到代码块的方法,此模块仅运行带有特殊注释的测试。

此注释的一般格式如下:由分号分隔的部分是冒号分隔的键值对,最后一个分号是可选的,不包含冒号的部分将被忽略。

示例

<!-- key1: value1; key2: value2 -->

多行示例

<!-- 
    key1: value1; 
    key2: value2;
-->

此注释应放置在代码块之前,正好位于反引号上方,例如

<!-- name: test_name -->
```python
```

需要 name 键,不包含此键的块将被忽略。

一些 Markdown 解析器支持注释周围有两条或三条破折号,此模块支持两种变体。可选的 case 参数可能用于子测试,请参阅“代码拆分”部分。

此外,可以在注释块内放置代码块以隐藏一些初始化信息,不让读者看到。

<!-- name: test_name
```python
init_some_variable = 123
```
-->
```python
assert init_some_variable == 123
```

常见解析规则

此模块使用自己的非常简单的 Markdown 解析器,它只支持代码块解析。通常,文件的解析行为遵循以下规则

  • 没有 <!-- name: test_name --> 注释的代码将不会执行。

  • 注释符号允许有两条或三条破折号

    例如以下行将被解析为相同的内容

    <!--  name: test_name -->
    <!--- name: test_name --->
    <!--  name: test_name --->
    <!--- name: test_name -->
    
  • 具有相同名称的代码块将被合并为一个代码块并执行一次

  • 可选的注释参数 case 将执行该块作为子测试。

  • 缩进的代码块将被向左移动。

    例如

        <!-- name: test_name -->
        ```python
        assert True
        ```
    

    等同于

    <!-- name: test_name -->
    ```python
    assert True
    ```
    

代码拆分

您可以将测试拆分为多个具有相同测试名称的块

Markdown

This block performs import:

<!-- name: test_example -->
```python
from itertools import chain
```

`chain` usage example:

<!-- name: test_example -->
```python
assert list(chain(range(2), range(2))) == [0, 1, 0, 1]
```
将显示为

此块执行导入

from itertools import chain

chain 使用示例

assert list(chain(range(2), range(2))) == [0, 1, 0, 1]

子测试支持

当然,您可以通过在 Markdown 注释中添加 case: case_name 来简单地分解测试为子测试。

<!-- name: test_counter -->
```python
from collections import Counter
```

<!-- 
    name: test_counter;
    case: initialize_counter
-->
```python
counter = Counter()
```

<!-- 
    name: test_counter;
    case: assign_counter_value
-->
```python
counter["foo"] += 1

assert counter["foo"] == 1
```
将显示为
from collections import Counter
counter = Counter()
counter["foo"] += 1

assert counter["foo"] == 1

虚构代码示例

没有 <!-- name: test_name --> 注释的代码将不会执行。

```python
from universe import antigravity, WrongPlanet

try:
    antigravity()
except WrongPlanet:
    print("You are on the wrong planet.")
    exit(1)
```
将显示为
from universe import antigravity, WrongPlanet

try:
    antigravity()
except WrongPlanet:
    print("You are on the wrong planet.")
    exit(1)

使用示例

此 README.md 文件可以像这样进行测试

$ pytest -v README.md
======================= test session starts =======================
plugins: subtests, markdown-pytest
collected 3 items

README.md::test_assert_true PASSED                           [ 33%]
README.md::test_example PASSED                               [ 66%]
README.md::test_counter SUBPASS                              [100%]
README.md::test_counter SUBPASS                              [100%]
README.md::test_counter PASSED                               [100%]

项目详情


下载文件

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

源分发

markdown_pytest-0.3.2.tar.gz (8.9 kB 查看哈希值)

上传时间

构建分发

markdown_pytest-0.3.2-py3-none-any.whl (9.5 kB 查看哈希值)

上传时间 Python 3

支持者

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