python-pytest學習(十四)配置文件pytest.ini


一、前言

  pytest配置文件可以改變pytest的運行方式,它是一個固定的文件pytest.ini文件,讀取配置信息,按指定的方式去執行。

二、ini配置文件

  pytest里面有些文件是非test文件

  (1)pytest.ini pytest的主配置文件,可以改變pytest的默認行為

  (2)conftest.py測試用例的一些fixture配置

  (3)init.py識別該文件夾為python的package包

  (4)tox.ini與pytest.ini類似,用tox工具時候才有用

  (5)setup.cfg也是ini格式文件,影響setup.py的行為

ini文件基本格式

# 保存為pytest.ini文件

[pytest]
addopts = -rsxX
xfail_strict = true

使用pytest --help指令可以查看pytest.ini的設置選項

[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found:

  markers (linelist)       markers for test functions
  empty_parameter_set_mark (string) default marker for empty parametersets
  norecursedirs (args)     directory patterns to avoid for recursion
  testpaths (args)         directories to search for tests when no files or dire

  console_output_style (string) console output: classic or with additional progr

  usefixtures (args)       list of default fixtures to be used with this project

  python_files (args)      glob-style file patterns for Python test module disco

  python_classes (args)    prefixes or glob names for Python test class discover

  python_functions (args)  prefixes or glob names for Python test function and m

  xfail_strict (bool)      default for the strict parameter of 
  addopts (args)           extra command line options
  minversion (string)      minimally required pytest version

--rsxX表示pytest報告所有測試用例被跳過、預計失敗、預計失敗但實際被通過的原因

 

三、mark標記

如下案例,使用了2個標簽:webtest和hello,使用mark標記功能對於以后分類測試非常有用處

import pytest

@pytest.mark.webtest
def test_send_http():
    print("mark web test")

def test_something_quick():
    pass

def test_another():
    pass

@pytest.mark.hello
class TestClass:
    def test_01(self):
        print("hello:")

    def test_02(self):
        print("hello world!")

if __name__=="__main__":
    pytest.main(["-v","test_mark.py","-m=hello"])

運行結果:

============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0 -- D:\soft\python3.6\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.0', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '3.6.3', 'py': '1.5.4', 'pluggy': '0.6.0'}, 'Plugins': {'metadata': '1.7.0', 'html': '1.19.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'D:\\soft\\jdk18\\jdk18v'}
rootdir: D:\YOYO, inifile:
plugins: metadata-1.7.0, html-1.19.0, allure-adaptor-1.7.10
collecting ... collected 5 items / 3 deselected

test_mark.py::TestClass::test_01 PASSED                                  [ 50%]
test_mark.py::TestClass::test_02 PASSED                                  [100%]

=================== 2 passed, 3 deselected in 0.11 seconds ====================

  有時候標簽多了,不容易記住,為了方便后續執行指令的時候能准確使用mark的標簽,可以寫入到pytest.ini文件

# pytest.ini
[pytest]

markers = 
    webtest: Run the webtest case
    hello: Run the hello case

  標記好之后,可以使用pytest --markers查看到

pytest --markers

 

四、禁用xpass

  設置xfail_strict = true可以讓那些標記為@pytest.mark.xfail但實際通過的測試用例被報告為失敗,什么叫標記為@pytest.mark.xfail但實際通過,這個比較繞腦,看以下案例

import pytest

def test_hello():
    print("hello world!")
    assert 1

@pytest.mark.xfail()
def test_01():
    a = "hello"
    b = "hello world"
    assert a == b

@pytest.mark.xfail()
def test_02():
    a = "hello"
    b = "hello world"
    assert a != b

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

  運行結果:

collecting ... collected 3 items

test_xpass.py::test_hello PASSED    [ 33%]
test_xpass.py::test_01 xfail     [ 66%]
test_xpass.py::test_02 XPASS     [100%]

=============== 1 passed, 1 xfailed, 1 xpassed in 0.27 seconds ================

  test_01和test_02這2個用例一個是a == b一個是a != b,兩個都標記失敗了,我們希望兩個用例不用執行全部顯示xfail。實際上最后一個卻顯示xpass。為了讓兩個都顯示xfail,那就加個配置xfail_strict = true

# pytest.ini
[pytest]

markers = 
    webtest:    Run the webtest case
    hello:   Run the hello case

xfail_strict = true

運行結果:

collecting ... collected 3 items

test_xpass.py::test_hello PASSED        [ 33%]
test_xpass.py::test_01 xfail         [ 66%]
test_xpass.py::test_02 FAILED        [100%]

================================== FAILURES ===================================
_________________________________ test_yoyo2 __________________________________
[XPASS(strict)] 
================ 1 failed, 1 passed, 1 xfailed in 0.05 seconds ================

 

 

參考文章:https://www.jianshu.com/p/a613a3a4d030


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM