zoukankan      html  css  js  c++  java
  • pytest_使用自定义标记mark

    前言

    pytest可以支持自定义标记,自定义标记可以把一个web项目划分多个模块,然后指定模块名称执行。app自动化的时候,如果想android和ios公用一套代码时,
    也可以使用标记功能,标明哪些是ios用例,哪些是android的,运行代码时候指定mark名称运行就可以

    mark标记

    1.以下用例,标记test_send_http()为webtest

    import pytest
    
    @pytest.mark.webtest
    def test_send_http():
        print("890")# perform some webtest test for your app
    
    def test_something_quick():
        print("123")
    
    def test_another():
        print("456")
    
    class TestClass:
        def test_merhed(self):
            print("678")
    
    if __name__ == '__main__':
        pytest.main(['-s', 'mark_01.py', "-m=webtest"])

    只运行用webtest标记的测试,cmd运行的时候,加个-m 参数,指定参数值webtest

    $ pytest -v -m webtest

    ============================= test session starts =============================
    platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
    rootdir: E:YOYOse, inifile:
    plugins: metadata-1.7.0, html-1.19.0
    collected 4 items / 3 deselected
    
    mark_01.py 890
    .
    =================== 1 passed, 3 deselected in 0.10 seconds ====================

    如果不想执行标记webtest的用例,那就用"not webtest"

    $ pytest -v -m "not webtest"

    import pytest
    
    @pytest.mark.webtest
    def test_send_http():
        print("890")# perform some webtest test for your app
    
    def test_something_quick():
        print("123")
    
    def test_another():
        print("456")
    
    class TestClass:
        def test_merhed(self):
            print("678")
    
    if __name__ == '__main__':
        pytest.main(['-s', 'mark_02.py', "-m='not webtest'"])

    运行结果

    ============================= test session starts =============================
    platform win32 -- Python 3.6.2, pytest-3.7.4, py-1.6.0, pluggy-0.7.1
    rootdir: D:python_autos14pytest_learn, inifile:
    collected 4 items
    
    mark_02.py 890
    .123
    .456
    .678
    .
    
    ========================== 4 passed in 0.02 seconds ===========================

    -v 指定的函数节点id

    如果想指定运行某个.py模块下,类里面的一个用例,如:TestClass里面test_method用例
    每个test_开头(或_test结尾)的用例,函数(或方法)的名称就是用例的节点id,指定节点id运行用-v 参数

    $ pytest -v test_server.py::TestClass::test_method

    pycharm运行代码

    if __name__ == "__main__":
        pytest.main(["-v", "test_server.py::TestClass::test_method"])

    运行结果

    ============================= test session starts =============================
    platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0 -- E:python36python.exe
    cachedir: .pytest_cache
    metadata: {'Python': '3.6.0', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.6.3', 'py': '1.5.4', 'pluggy': '0.6.0'}, 'Plugins': {'metadata': '1.7.0', 'html': '1.19.0'}, 'JAVA_HOME': 'D:\java\jdk17'}
    rootdir: E:YOYOse, inifile:
    plugins: metadata-1.7.0, html-1.19.0
    collecting ... collected 1 item
    
    test_server.py::TestClass::test_method PASSED                            [100%]
    
    ========================== 1 passed in 0.06 seconds ===========================

    当然也能选择运行整个class

    $ pytest -v test_server.py::TestClass

    也能选择多个节点运行,多个节点中间空格隔开

    $ pytest -v test_server.py::TestClass test_server.py::test_send_http

    pycharm运行参考

    if __name__ == "__main__":
        pytest.main(["-v", "test_server.py::TestClass", "test_server.py::test_send_http"])

    -k 匹配用例名称

    可以使用-k命令行选项指定在匹配用例名称的表达式

    $ pytest -v -k http

    $ pytest -v -k http # running with the above defined example module
    =========================== test session starts ============================
    platform linux -- Python 3.x.y, pytest-3.x.y, py-1.x.y, pluggy-0.x.y -- $PYTHON_
    ˓→PREFIX/bin/python3.5
    cachedir: .pytest_cache
    rootdir: $REGENDOC_TMPDIR, inifile:
    collecting ... collected 4 items / 3 deselected
    test_server.py::test_send_http PASSED [100%]
    ================== 1 passed, 3 deselected in 0.12 seconds ==================

    您也可以运行所有的测试,根据用例名称排除掉某些用例:

    $ pytest -k "not send_http" -v

    =========================== test session starts ============================
    platform linux -- Python 3.x.y, pytest-3.x.y, py-1.x.y, pluggy-0.x.y -- $PYTHON_
    ˓→PREFIX/bin/python3.5
    cachedir: .pytest_cache
    rootdir: $REGENDOC_TMPDIR, inifile:
    collecting ... collected 4 items / 1 deselected
    test_server.py::test_something_quick PASSED [ 33%]
    test_server.py::test_another PASSED [ 66%]
    test_server.py::TestClass::test_method PASSED [100%]
    ================== 3 passed, 1 deselected in 0.12 seconds ==================

    也可以同时选择匹配 “http” 和“quick”

    $ pytest -k "http or quick" -v

    =========================== test session starts ============================
    platform linux -- Python 3.x.y, pytest-3.x.y, py-1.x.y, pluggy-0.x.y -- $PYTHON_
    ˓→PREFIX/bin/python3.5
    cachedir: .pytest_cache
    rootdir: $REGENDOC_TMPDIR, inifile:
    collecting ... collected 4 items / 2 deselected
    test_server.py::test_send_http PASSED [ 50%]
    test_server.py::test_something_quick PASSED [100%]
    ================== 2 passed, 2 deselected in 0.12 seconds ==================
  • 相关阅读:
    积水路面Wet Road Materials 2.3
    门控时钟问题
    饮料机问题
    Codeforces Round #340 (Div. 2) E. XOR and Favorite Number (莫队)
    Educational Codeforces Round 82 (Rated for Div. 2)部分题解
    Educational Codeforces Round 86 (Rated for Div. 2)部分题解
    Grakn Forces 2020部分题解
    2020 年百度之星·程序设计大赛
    POJ Nearest Common Ancestors (RMQ+树上dfs序求LCA)
    算法竞赛进阶指南 聚会 (LCA)
  • 原文地址:https://www.cnblogs.com/lixy-88428977/p/9697881.html
Copyright © 2011-2022 走看看