【Pytest学习2】 pytest用例设计规则,terminal中使用常见命令行参数,pycharm中使用常见的命令行参数

pytest用例设计规则

  • 测试文件以test_开头(以_test结尾也可以)
  • 测试类以Test开头,并且不能带有 __init__ 方法
  • 测试函数以test_开头
  • 断言使用assert
  • 所有的包pakege必须要有__init__.py文件

pytest常见的命令行参数

命令行参数  pytest -h 可以看帮助

在 terminal 使用命令行参数

运行代码如下:

第一部分

def add(a):
    return a+1
def test_x():
    assert add(2)==3
def test_y():
    assert add(3)==5

第二部分

import pytest
class TestDemo:
    @pytest.mark.mark1
    def test_one(self):
        assert True
    def test_two(self):
        assert True
    def test_three(self):
        assert True

 

通过标记表达式执行
pytest -m demo
这条命令会执行被装饰器@pytest.mark.demo装饰的所有测试用例

生成html报告:
pytest -m demo --html=Report/report.html

生成xml报告:
pytest -m demo --junitxml=Report/report.xml

运行指定模块:
pytest -m demo --html=Report/report.html TestCases/test_pytest.py

运行指定测试目录
pytest -m demo --html=Report/report.html TestCases/

通过节点id来运行:
pytest TestCases/test_pytest.py::TestDemo::test_demo01

通过关键字表达式过滤执行
pytest -k "MyClass and not method"
这条命令会匹配文件名、类名、方法名匹配表达式的用例

获取用例执行性能数据
获取最慢的10个用例的执行耗时
pytest --durations=10

  

--collect only   收集要运行的测试用例,当前文件夹所有的可运行方法

(LearnPytest) C:UsersCXMPycharmProjectsLearnPytest>pytest --collect-only testcase
========================================== test session starts ==========================================
platform win32 -- Python 3.7.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:UsersCXMPycharmProjectsLearnPytest
collected 5 items                                                                                        

<Module testcase/test_1.py>
  <Function test_x>
  <Function test_y>
<Module testcase/test_demo.py>
  <Class TestDemo>
      <Function test_one>
      <Function test_two>
      <Function test_three>

-k     匹配要运行的函数表达式

(LearnPytest) C:UsersCXMPycharmProjectsLearnPytest>pytest -k "test_one or test_two" --collect-only  testcase
======================================================= test session starts =======================================================
platform win32 -- Python 3.7.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:UsersCXMPycharmProjectsLearnPytest
collected 5 items / 3 deselected / 2 selected                                                                                      

<Module testcase/test_demo.py>
  <Class TestDemo>
      <Function test_one>
      <Function test_two>

=========================================== 2/5 tests collected (3 deselected) in 0.02s ===========================================

-m   自定义标记执行,只执行被mark的自定义参数标记的这个函数

(LearnPytest) C:UsersCXMPycharmProjectsLearnPytest>pytest -m mark1 testcase
======================================================= test session starts =======================================================
platform win32 -- Python 3.7.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:UsersCXMPycharmProjectsLearnPytest
collected 5 items / 4 deselected / 1 selected                                                                                      

testcase	est_demo.py .                                                                                                      [100%]

======================================================== warnings summary =========================================================
testcase	est_demo.py:3
  C:UsersCXMPycharmProjectsLearnPytest	estcase	est_demo.py:3: PytestUnknownMarkWarning: Unknown pytest.mark.mark1 - is this a
typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
    @pytest.mark.mark1

-x       有失败的用例就立马结束,失败就马上停止运行

testcase	est_demo.py:3
  C:UsersCXMPycharmProjectsLearnPytest	estcase	est_demo.py:3: PytestUnknownMarkWarning: Unknown pytest.mark.mark1 - is this a
typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
    @pytest.mark.mark1

-- Docs: https://docs.pytest.org/en/stable/warnings.html
===================================================== short test summary info =====================================================
FAILED testcase/test_1.py::test_y - assert 4 == 5
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
============================================= 1 failed, 1 passed, 1 warning in 0.09s ==============================================

-v                        执行的详细信息,比如说哪个失败哪个成功

--maxfail=num    当用例错误个数达到指定数量时,停止测试

(LearnPytest) C:UsersCXMPycharmProjectsLearnPytest>pytest --maxfail=1
=================================== test session starts ====================================
platform win32 -- Python 3.7.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:UsersCXMPycharmProjectsLearnPytest
collected 5 items                                                                           

testcase	est_1.py .F

========================================= FAILURES =========================================
__________________________________________ test_y __________________________________________

    def test_y():
>       assert add(3)==5
E       assert 4 == 5
E        +  where 4 = add(3)

testcase	est_1.py:6: AssertionError
===================================== warnings summary =====================================
testcase	est_demo.py:3
  C:UsersCXMPycharmProjectsLearnPytest	estcase	est_demo.py:3: PytestUnknownMarkWarning:
 Unknown pytest.mark.mark1 - is this a typo?  You can register custom marks to avoid this war
ning - for details, see https://docs.pytest.org/en/stable/mark.html
    @pytest.mark.mark1

-- Docs: https://docs.pytest.org/en/stable/warnings.html
================================= short test summary info ==================================
FAILED testcase/test_1.py::test_y - assert 4 == 5
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
========================== 1 failed, 1 passed, 1 warning in 0.05s ==========================

-s 代码中打印输出

(LearnPytest) C:UsersCXMPycharmProjectsLearnPytest>pytest -s testcase
================================================================= test session starts =================================================================
platform win32 -- Python 3.7.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:UsersCXMPycharmProjectsLearnPytest
collected 5 items                                                                                                                                      

testcase	est_1.py .F
testcase	est_demo.py ...

====================================================================== FAILURES =======================================================================
_______________________________________________________________________ test_y ________________________________________________________________________

    def test_y():
>       assert add(3)==5
E       assert 4 == 5
E        +  where 4 = add(3)

testcase	est_1.py:6: AssertionError
================================================================== warnings summary ===================================================================
testcase	est_demo.py:3
  C:UsersCXMPycharmProjectsLearnPytest	estcase	est_demo.py:3: PytestUnknownMarkWarning: Unknown pytest.mark.mark1 - is this a typo?  You can regis
ter custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
    @pytest.mark.mark1

-- Docs: https://docs.pytest.org/en/stable/warnings.html
=============================================================== short test summary info ===============================================================
FAILED testcase/test_1.py::test_y - assert 4 == 5
======================================================= 1 failed, 4 passed, 1 warning in 0.05s ========================================================

--lf    只显示失败的内容

(LearnPytest) C:UsersCXMPycharmProjectsLearnPytest>pytest --lf testcase
================================================ test session starts ================================================
platform win32 -- Python 3.7.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:UsersCXMPycharmProjectsLearnPytest
collected 1 item                                                                                                     
run-last-failure: rerun previous 1 failure (skipped 1 file)

testcase	est_1.py F                                                                                           [100%]

===================================================== FAILURES ======================================================
______________________________________________________ test_y _______________________________________________________

    def test_y():
>       assert add(3)==5
E       assert 4 == 5
E        +  where 4 = add(3)

testcase	est_1.py:6: AssertionError
============================================== short test summary info ==============================================
FAILED testcase/test_1.py::test_y - assert 4 == 5
================================================= 1 failed in 0.04s =================================================

(LearnPytest) C:UsersCXMPycharmProjectsLearnPytest>

--ff   pass的和fail都显示出来

(LearnPytest) C:UsersCXMPycharmProjectsLearnPytest>pytest --ff testcase
================================================================= test session starts =================================================================
platform win32 -- Python 3.7.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:UsersCXMPycharmProjectsLearnPytest
collected 5 items                                                                                                                                      
run-last-failure: rerun previous 1 failure first

testcase	est_1.py F.                                                                                                                            [ 40%]
testcase	est_demo.py ...                                                                                                                        [100%]

====================================================================== FAILURES =======================================================================
_______________________________________________________________________ test_y ________________________________________________________________________

    def test_y():
>       assert add(3)==5
E       assert 4 == 5
E        +  where 4 = add(3)

testcase	est_1.py:6: AssertionError
================================================================== warnings summary ===================================================================
testcase	est_demo.py:3
  C:UsersCXMPycharmProjectsLearnPytest	estcase	est_demo.py:3: PytestUnknownMarkWarning: Unknown pytest.mark.mark1 - is this a typo?  You can regis
ter custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
    @pytest.mark.mark1

-- Docs: https://docs.pytest.org/en/stable/warnings.html
=============================================================== short test summary info ===============================================================
FAILED testcase/test_1.py::test_y - assert 4 == 5
======================================================= 1 failed, 4 passed, 1 warning in 0.05s ========================================================

-s -v --tb=no  不显示具体的失败信息,只是显示哪一条错误

(LearnPytest) C:UsersCXMPycharmProjectsLearnPytest>pytest -s -v --tb=no testcase
================================================================= test session starts =================================================================
platform win32 -- Python 3.7.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1 -- d:program filespythonlearnpytestscriptspython.exe
cachedir: .pytest_cache
rootdir: C:UsersCXMPycharmProjectsLearnPytest
collected 5 items                                                                                                                                      

testcase/test_1.py::test_x PASSED
testcase/test_1.py::test_y FAILED
testcase/test_demo.py::TestDemo::test_one PASSED
testcase/test_demo.py::TestDemo::test_two PASSED
testcase/test_demo.py::TestDemo::test_three PASSED

================================================================== warnings summary ===================================================================
testcase	est_demo.py:3
  C:UsersCXMPycharmProjectsLearnPytest	estcase	est_demo.py:3: PytestUnknownMarkWarning: Unknown pytest.mark.mark1 - is this a typo?  You can regis
ter custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
    @pytest.mark.mark1

-- Docs: https://docs.pytest.org/en/stable/warnings.html
=============================================================== short test summary info ===============================================================
FAILED testcase/test_1.py::test_y - assert 4 == 5
======================================================= 1 failed, 4 passed, 1 warning in 0.04s ========================================================

--duration=N:表示把最耗时间的用例展示出来,N表示最慢的N个

pycharm执行命令行参数

在前面有介绍到pycharm执行pytest的时候需要修改下项目中的执行内容,从unittests框架变成pytest框架。然后我们进行编写代码

复制代码
import pytest
class Test_01:

    def test_001(self):
        print('Test_01下的用例001')
        assert  1 == 1

    def test_002(self):
        print('Test_01下的用例002')
        assert  1 == 2

    def test_003(self):
        print('Test_01下的用例003')
        assert 3 == 3

if __name__ == '__main__':
    pytest.main()
复制代码

这个时候直接右键运行是可以的,那么如果想要加入命令行的参数应该怎么做呢?

大家可以直接通过在 pytest.main()中直接添加

举个小栗子,例如我们想要打印详细内容

复制代码
import pytest
class Test_01:

    def test_001(self):
        print('Test_01下的用例001')
        assert  1 == 1

    def test_002(self):
        print('Test_01下的用例002')
        assert  1 == 2

    def test_003(self):
        print('Test_01下的用例003')
        assert 3 == 3

if __name__ == '__main__':
    pytest.main(['-s'])
复制代码

这里发现已经把详细内容都打印出来了。

 

 

 命令行多个参数

--tb=no加上-s来举例,可以通过下图看出来,错误信息没有打印,还有用例执行的详细内容

  

  

声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/ 如出现转载未声明 将追究法律责任~谢谢合作
原文地址:https://www.cnblogs.com/chenxiaomeng/p/14814601.html