pytest--運行指定的測試和參數化


 mark

pytest提供了標記機制,允許你使用marker對測試函數做標記,一個測試函數可以有多個marker,一個marker也可以用來標記多個測試函數

比如我們需要進行冒煙測試,不可能把所有的用例都跑一遍,我們可以挑選一些重要的用例進行冒煙測試,為了把選定的測試加入冒煙測試,可以對他們添加@pytest.mark.smoke裝飾器。我們有兩個文件,里面分別放了兩個測試用例

test_demo.py

import pytest


@pytest.mark.get
def test_demo3():
    print('我是tets demo 3')


@pytest.mark.smoke
@pytest.mark.get
def test_demo4():
    print('我是tets demo 4')

test_mark.py

import pytest


@pytest.mark.get
def test_demo1():
    print('我是tets demo 1')


@pytest.mark.smoke
@pytest.mark.get
def test_demo2():
    print('我是tets demo 2')

我們可以看到,冒煙測試兩個文件里面各有一個,來使用-m參數執行一下,這樣我們標記的smoke的用例就被執行了,其他的沒有被執行

-m后面也可以使用表達式,可以在標記之間添加and,or,not關鍵字

 

跳過測試

要跳過某個測試,只需要簡單的在測試函數上方添加@pytest.mark.skip()裝飾器即可
比如下面的兩個測試用例,我們只想執行test_demo2,則我們可以給test_demo1加上裝飾器
import pytest

@pytest.mark.skip()
def test_demo1():
    print('我是tets demo 1')


def test_demo2():
    print('我是tets demo 2')

skipif

我們可以給要跳過的測試添加理由和條件,這時應當使用skipif來替代skip

import pytest

@pytest.mark.skipif(3<5, reason='版本不匹配')
def test_demo1():
    print('我是tets demo 1')


def test_demo2():
    print('我是tets demo 2')

前面的是個條件,可以是python的表達式,表達式的值為True時跳過,為false時執行。后面的是原因,在來執行一次

但我們仍然看不到跳過的原因,這時可以使用-rs

運行測試子集

 運行測試有很多方式,不但可以選擇運行某個測試目錄、文件、類中的測試,還可以選擇運行某一個測試用例

運行單個目錄

運行單個目錄下的所有測試,以目錄作為pytest的參數即可

比如我testpytest目錄下有兩個測試文件,分別是test_demo.py和test_mark.py

運行單個測試文件

運行單個文件里的全部測試,以路徑名加文件名作為pytest參數即可

比如我們只想運行testpytest目錄下的test_demo.py文件

運行單個測試函數

運行單個測試函數,只需要在文件名后添加::符號和函數名

比如我們只想運行testpytest目錄下的test_demo.py文件里的test_demo3這個函數

運行單個測試類

與運行單個函數類似,只需要在文件名后面加上::符號和類名

import pytest


class Test1():
    def test_demo3(self):
        print('我是tets demo 3')

    def test_demo4(self):
        print('我是tets demo 4')


class Test2():
    def test_demo1(self):
        print('我是tets demo 1')

    def test_demo2(self):
        print('我是tets demo 2')

比如我們只想運行Test2的類

運行單個測試類中的測試方法

如果不希望運行測試類中的所有測試,只想指定運行其中一個,則在類名后面再加上::符號和方法名

 

 用測試名划分測試集合

 -k選項允許用一個表達式指定需要運行的測試,該表達式可以匹配測試名(或者子串)。表達式中可以包含and,or,not

def test_demo1():
    print('我是tets demo 1')


def test_demo2():
    print('我是tets demo 2')


def test_demo3():
    print('我是tets demo 3')


def test_parm():
    print('我是tets parm')

如上代碼我們只想運行測試函數里面有demo的所有用例

參數化

可以使用 @pytest.mark.parametrize(argnames, argvalues) 裝飾器達到批量傳送參數的目的

parametrize()的第一個參數是用逗號分割的字符串列表,第二個參數是一個值列表

import pytest


@pytest.mark.parametrize("a,b,c",
                         [(1, 2, 3),
                          (3, 2, 5),
                          (4, 5, 9)])
def test_add(a, b, c):
    assert a + b == c

 


免責聲明!

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



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