1. 程式人生 > 遊戲 >肉鴿策略遊戲《大橡樹》5月3日登陸Steam搶先體驗

肉鴿策略遊戲《大橡樹》5月3日登陸Steam搶先體驗

在unittest測試中,有引數化的概念,那麼在pytest中也有。

 

 如何理解引數化:

        當對一個測試函式進行測試時,通常會給函式傳遞多組引數。比如測試賬號登陸,我們需要模擬各種千奇百怪的賬號密碼。可以把這些引數寫在測試函式內部進行遍歷。不過雖然引數眾多,但仍然是一個測試,當某組引數導致斷言失敗。我們想要的是一個的失敗不影響其他的失敗。通過引數化的方式來管理組織。那麼我們看下pytest如何實現引數化的。

 

pytest.mark.parametrize(argnames, argvalues)

 

假設要測試密碼的長度必須大於8位且小於16位。設計了幾個密碼

['123','12345678','1234567890123456','12345678901234561']

 

我們看下如何使用

import pytest

@pytest.mark.parametrize('passwd',
                      ['123','12345678','1234567890123456','12345678901234561'])


def test_passwd_length(passwd):
    assert len(passwd) >= 8
    assert len(passwd)<=16

 正常應該執行四個測試用例

 

 失敗用例:

 

 

 

符合我們預期,可以看到用引數化的思路可以減少程式碼編寫。

如果我們要驗證使用者名稱和密碼呢,兩個引數如何實現呢。

import pytest


@pytest.mark.parametrize('user,passwd', [
    ('lowen', '123'), ('lowen', '12345678'),
    ('lowen', '1234567890123456'),
    ('lowenlowen', '12345678901234561')
])

def test_passwd_length(user, passwd):
    assert len(passwd) >= 8
    assert len(passwd) <= 16
    assert user == 'lowen'

  

 

 

 當然還可以給每組引數增加id

import pytest


@pytest.mark.parametrize('user,passwd',
                         [pytest.param('lowen', '123', id='User:lowen'),
                          pytest.param('lowen', '12345678', id='User:lowen'),
                          pytest.param('ll', '1234567890123456', id='User:ll'),
                          pytest.param('lowenlowen', '12345678901234561', id='User:lowenzishuoceshikwaifa')])

def test_passwd_length(user, passwd):
    assert len(passwd) >= 8
    assert len(passwd) <= 16
    assert user == 'lowen'

 

執行結果為:

 

 上面的都是寫固定的,但是,實際的工作中呢,很多時候的引數都是實時讀取的。這些引數資料都是動態讀取來的,那麼看下如何給引數動態傳遞呢,這裡獲取資料,寫了一個demo。

import pytest


def getparame() -> list:
    return [('lowen', '123'), ('lowen', '12345678'), ('ll', '1234567890123456'),
            ('lowenzishuoceshikaifa', '12345678901234561')]


@pytest.mark.parametrize('user,passwd',getparame())
def test_passwd_length(user, passwd):
    assert len(passwd) >= 8
    assert len(passwd) <= 16
    assert user == 'lowen'

 

執行結果為: