zoukankan      html  css  js  c++  java
  • 代码示例: pytest的简单用法

    demo文件目录结构:

    demo_project/

    |----------- __init__.py

    |----------- demo_test.py

    |----------- test_dbversion.py

    |----------- serialize.py

    |----------- readme.txt

    说明:

    执行结果中包含print输出。需要注意的是,在pytest中,print输出不能直接使用print("xxx")的方式,因为会被pytest模块归入capsys中。

    因为对于pytest而言,print属于sys.stdout,即输出结果的类型。类似的,assert属于sys.stderr的类型

    具体的捕获方式参考: https://docs.pytest.org/en/latest/capture.html#capturing-of-the-stdout-stderr-output

    简单贴一下官方示例代码:

    1 def test_myoutput(capsys):  # or use "capfd" for fd-level
    2     print("hello")
    3     sys.stderr.write("world
    ")
    4     captured = capsys.readouterr()
    5     assert captured.out == "hello
    "
    6     assert captured.err == "world
    "
    7     print("next")
    8     captured = capsys.readouterr()
    9     assert captured.out == "next
    "

    因此,在我的示例代码中,使用with通过上下文管理,临时关闭capsys,使得print的结果能被打印出来,具体效果参见最后的执行结果示例

    各文件代码如下:

    __init__.py

     1 #

    demo_test.py

     1 import pytest
     2 
     3 
     4 @pytest.mark.test
     5 def test_demo(capsys):
     6     with capsys.disabled():
     7         print(host_info_call_data())
     8     assert host_info_call_data() == '''hostname	platform	cpus    cores	sockets	memory(GB)
     9 rac1    Linux x86 64-bit    2    2    2    7.69    '''
    10     return 1
    11 
    12 
    13 def host_info_call_data():
    14     data = '''hostname    platform    cpus    cores    sockets    memory(GB)
    15 rac1    Linux x86 64-bit    2    2    2    7.69    '''
    16     return data

    test_dbversion.py

     1 import pytest
     2 
     3 from .serialize import serialize
     4 
     5 
     6 def script_data(num):
     7     data = {
     8         1: '''rdbms_version	cluster_version
     9 11.2.0.4.0	11.2.0.4.0
    10 ''',
    11         2: '''rdbms_version	cluster_version
    12 11.2.0.4.0    -
    13 '''
    14     }
    15     return data[num]
    16 
    17 
    18 @pytest.mark.test
    19 @pytest.mark.shells
    20 def test_all_version_exist(capsys):
    21     data = script_data(1)
    22     row, column, data = serialize(data)
    23     with capsys.disabled():
    24         print(data)
    25     assert data == [['rdbms_version', 'cluster_version'],
    26                     ['11.2.0.4.0', '11.2.0.4.0']]

    serialize.py

     1 def serialize(data):
     2     if isinstance(data, list):
     3         data = str(data)
     4     data = data.split('
    ')
     5     if data[-1] == '':
     6         data = data[:-1]
     7     data = [i.split('	') for i in data if isinstance(i, str)]
     8     row = len(data)
     9     column = len(data[0])
    10     return row, column, data

    执行结果示例:

  • 相关阅读:
    jQuery 源码解析(二十四) DOM操作模块 包裹元素 详解
    jQuery 源码解析(二十三) DOM操作模块 替换元素 详解
    jQuery 源码解析(二十二) DOM操作模块 复制元素 详解
    jQuery 源码分析(二十一) DOM操作模块 删除元素 详解
    jQuery 源码分析(二十) DOM操作模块 插入元素 详解
    jQuery 源码分析(十九) DOM遍历模块详解
    python 简单工厂模式
    python 爬虫-协程 采集博客园
    vue 自定义image组件
    微信小程序 image组件坑
  • 原文地址:https://www.cnblogs.com/ranyuu/p/9290893.html
Copyright © 2011-2022 走看看