pytest之收集用例规则与运行指定用例

上篇文章相信大家已经了解了pytest在cmd下结合各种命令行参数如何运行测试用例,并输出我们想要看到的信息。那么今天会讲解一下pytest是如何收集我们写好的用例?我们又有哪些方式来运行单个用例或者批量运行用例呢?下面将为大家一一解答!

pytest收集用例原理分析
首先我们按照如下目录结构新建我们的项目

[pyttest搜索测试用例的规则]
    |[测试用例目录1]
    |    |__init__.py
    |    |test_测试模块1.py
    |    |test_测试模块2.py
    |[测试用例目录2]
    |    |__init__.py
    |    |test_测试用例1.py
    |    |测试用例.py
    |test_测试模块.py
    |测试用例2.py    
代码实例
# test_测试模块1.py
def test_testFunc1():
    print('\n我是一个测试用例! in test_testFunc1')
    assert 1 == 1

def func1():
    print('我不是一个测试用例')
    assert 1 == 1
# test_测试模块2.py
class TestClass1(object):

    def test_class_func1(self):
        print('\n 我是一个类里面的测试用例 in test_class_func1')
        assert 1 == 1

    def class_func1(self):
        print('我是类里面的一个普通函数!')
# test_测试用例1.py

class TestClass2(object):

    def test_class_func2(self):

        print('\n 我是一个类里面的测试用例 in test_class_func2',)
        assert 1 == 1

    def class_func2(self):
        print('我是类里面的一个普通函数!')


def test_testFunc2():
    print('\n我是一个测试用例 in test_testFunc2!')
    assert 1 == 1


def func2():
    print('我不是一个测试用例')
    assert 1 == 1
# 测试用例.py

def test_testFunc3():
    print('\n我是一个测试用例! in 测试用例.py')
    assert 1 == 1


def func3():
    print('我不是一个测试用例')
    assert 1 == 1
# test_测试模块3.py

def test_testFunc4():
    print('\n我是一个测试用例! in test_testFunc4')
    assert 1 == 1


def func4():
    print('我不是一个测试用例')
    assert 1 == 1


class TestClass3(object):

    def test_class_func3(self):
        print('\n 我是一个类里面的测试用例 in test_class_func3')
        assert 1 == 1

    def class_func3(self):
        print('我是类里面的一个普通函数!')
# 测试用例2.py

def test_testFunc5():
    print('\n我是一个测试用例! in test_testFunc5')
    assert 1 == 1

def func5():
    print('我不是一个测试用例')
    assert 1 == 1
下面我们使用cmd命令来执行一下这个项目,看一下究竟会有多少条用例是有效的用例?打开cmd 切换到项目的根目录执行命令 pytest -v

D:\pytest搜索测试用例规则>pytest -v
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'}
rootdir: D:\pytest搜索测试用例规则, inifile:
plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10
collected 6 items

test_测试模块3.py::test_testFunc4 PASSED                                 [ 16%]
test_测试模块3.py::TestClass3::test_class_func3 PASSED                   [ 33%]
测试用例目录1/test_测试模块1.py::test_testFunc1 PASSED                   [ 50%]
测试用例目录1/test_测试模块2.py::TestClass1::test_class_func1 PASSED     [ 66%]
测试用例目录2/test_测试用例1.py::TestClass2::test_class_func2 PASSED     [ 83%]
测试用例目录2/test_测试用例1.py::test_testFunc2 PASSED                   [100%]

========================== 6 passed in 0.59 seconds ===========================
 运行结果可以看到一共有6条用例passed,且详细的列出了是哪6条,那么按照我们上面编写的用例其实并不止6条,那么为什么会只运行了6条呢?综合以上的代码结构和我们的执行结果对比,我们应该能发现这样的规律

pytets会从我们当前运行的目录开始查找所有目录,查找以test_开头的文件且文件中所有以test_开头的函数和以Test开头的类和类里面以test_开头的函数为测试用例。这就是为什么上面之运行了6条测试用例!

pytest运行指定测试用例
我们仍然使用上面的项目作为演示(cdm切换到项目的根目录)

1.运行指定目录下的所有用例
我们指定运行测试用例目录1里面的所有用例(pytest -v 测试用例目录1)

D:\pytest搜索测试用例规则>pytest -v 测试用例目录1
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'}
rootdir: D:\pytest搜索测试用例规则, inifile:
plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10
collected 2 items

测试用例目录1/test_测试模块1.py::test_testFunc1 PASSED                   [ 50%]
测试用例目录1/test_测试模块2.py::TestClass1::test_class_func1 PASSED     [100%]

========================== 2 passed in 0.05 seconds ===========================
# 这样就会只搜索和指定指定目录下面所有的用
2.运行指定文件中的所有用例
我们指定运行test_测试模块1.py(pytest -v 测试用例目录1/test_测试模块1.py )

D:\pytest搜索测试用例规则>pytest -v 测试用例目录1/test_测试模块1.py
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0,www.17093.cn py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', www.18037.cn'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'}
rootdir: D:\pytest搜索测试用例规则, inifile:
plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10
collected 1 item

测试用例目录1/test_测试模块1.py:www.yigouyule2.cn/:test_testFunc1 PASSED                   [100%]

========================== 1 passed in 0.09 seconds ===========================
# 运行指定文件下的所有用例
3.运行指定文件中的测试类
我们指定运行test_测试模块2.py中的测试类Testclass1(pytest -v 测试用例目录1/test_测试模块2.py::TestClass1)

D:\pytest搜索测试用例规则>pytest -v 测试用例目录1/test_测试模块2.py::TestClass1
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Windows-www.yanweian.cn 10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'}
rootdir: D:\pytest搜索测试用例规则, inifile:
plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10
collected 1 item

测试用例目录1/test_测试模块2.py::TestClass1::test_class_func1 PASSED     [100%]

========================== 1 passed in 0.05 seconds ===========================
# 运行指定的测试类中的所有测试用
4.运行指定的测试用例函数
我们指定运行test_testFunc1(pytest -v 测试用例目录1/test_测试模块1.py::test_testFunc1)

D:\pytest搜索测试用例规则>pytest -v 测试用例目录1/test_测试模块1.py::test_testFunc1
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Windows-www.60910.cn10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', www.yisengyule.com 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'}
rootdir: D:\pytest搜索测试用例规则, inifile:
plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10
collected 1 item

测试用例目录1/test_测试模块1.py::test_testFunc1 PASSED                   [100%]

========================== 1 passed in 0.03 seconds ===========================
总结
收集用例规则:搜索所有以test_开头的测试文件,以Test开头的测试类,以test_开头的测试函数

执行用例规则:从-v 参数输出的执行信息我们就应该能发现,运行指定的目录下用例 使用命令 pytest 目录/目录 即可;运行指定文件使用 pytest 目录/文件 即可;运行指定类或者函数 使用命令 pytest 目录/文件::类名::函数名 或者 pytest 目录/文件::函数名

搜索用例规则也是我们命名用例文件,测试类,测试函数的规则;执行指定测试用例记住规则即可

真的勇士, 敢于直面惨淡的warning、 敢于正视淋漓的error

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest源码是一个用于收集和执行测试用例的工具。它可以通过指定相关配置和命令来定制测试的收集过程。在给定的引用中,我们可以看到一些关于如何收集用例的配置。 在中,pytest.ini文件中的addopts选项指定了一些命令行选项,如"-vs"表示输出详细信息,"-m"后面的"smoke"表示只运行标记为"smoke"的测试用例。testpaths指定了测试用例的路径,python_files、python_classes和python_functions则分别指定了测试文件、测试类和测试函数的命名规则。 在中,我们看到了一个示例测试用例函数test_new(),它用于测试一个加法操作。在这个例子中,我们可以看到使用了pytest.main()函数来执行测试用例,并通过传递命令行参数来定制测试执行过程。 所以,根据给定的引用内容,pytest源码可以根据配置文件和命令行参数来收集和执行测试用例。通过配置文件中的相关选项,可以指定收集的测试文件、类和函数的命名规则,并可以通过命令行参数来进一步定制测试执行的方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Pytest框架测试用例规则运行方式](https://blog.csdn.net/weixin_37600187/article/details/128332154)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【温故知新】pytest框架执行用例并打印日志和报告](https://blog.csdn.net/qq_17195161/article/details/126322450)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值