目錄
三、使用pytest.mark.parametrize 入參測試代碼
被測試代碼:is_leap_year.py
def is_leap_year(year):
# 先判斷year是不是整型
if isinstance(year, int) is not True:
raise TypeError("傳入的參數不是整數")
elif year == 0:
raise ValueError("公元元年是從公元一年開始!!")
elif abs(year) != year:
raise ValueError("傳入的參數不是正整數")
elif (year % 4 ==0 and year % 100 != 0) or year % 400 == 0:
print("%d年是閏年" % year)
return True
else:
print("%d年不是閏年" % year)
return False
一、使用pytest.fixture入參測試代碼
import sys
sys.path.append('.')
import is_leap_year
import pytest
class TestPara():
# 準備測試數據
is_leap = [4, 40, 400, 800, 1996, 2996]
is_not_leap = [1, 100, 500, 1000, 1999, 3000]
is_valueerror = [0, -4, -100, -400, -1996, -2000]
is_typeerror = ['-4', '4', '100', 'ins', '**', '中文']
# params中需要傳入list
@pytest.fixture(params=is_leap)
def is_leap_y(self,request):
print("XXXX",request.param)
return request.param
@pytest.fixture(params=is_typeerror)
def is_type_error(self,request):
return request.param
def test_is_leap(self, is_leap_y):
assert is_leap_year.is_leap_year(is_leap_y) == True
def test_is_typeerror(self, is_type_error):
with pytest.raises(TypeError):
is_leap_year.is_leap_year(is_type_error)
二、 使用pytest.fixture入參,數據分離
1.數據模塊conftest.py(通過conftest.py 共享fixture,pytest裏面默認讀取conftest.py裏面的配置,此文件名不可隨意取)
import pytest
# 準備測試數據
is_leap = [4, 40, 400, 800, 1996, 2996]
is_not_leap = [1, 100, 500, 1000, 1999, 3000]
is_valueerror = [0, -4, -100, -400, -1996, -2000]
is_typeerror = ['-4', '4', '100', 'ins', '**', '中文']
# params中需要傳入list
@pytest.fixture(params=is_leap)
def is_leap_y(request):
return request.param
@pytest.fixture(params=is_typeerror)
def is_type_error(request):
return request.param #使用request.param接受用例參數化的數據
2.測試代碼test_con.py
import sys
sys.path.append('.')
import is_leap_year
import pytest
class TestPara():
def test_is_leap(self, is_leap_y):
assert is_leap_year.is_leap_year(is_leap_y) == True
def test_is_typeerror(self, is_type_error):
with pytest.raises(TypeError):
is_leap_year.is_leap_year(is_type_error)
三、使用pytest.mark.parametrize 入參測試代碼
import sys
sys.path.append('.')
import is_leap_year
import pytest
class TestPara():
# 參數傳入year中
@pytest.mark.parametrize('year, expected',
[(1, False),
(4, True),
(100, False),
(400, True),
(500, True)])
def test_is_leap(self, year, expected):
assert is_leap_year.is_leap_year(year) == expected
@pytest.mark.parametrize('year, expected',
[(0, ValueError),
('-4', TypeError),
(-4, ValueError),
('ss', TypeError),
(-100, ValueError)])
def test_is_typeerror(self, year, expected):
if expected == ValueError:
with pytest.raises(ValueError) as excinfo:
is_leap_year.is_leap_year(year)
assert excinfo.type == expected
else:
with pytest.raises(TypeError) as excinfo:
is_leap_year.is_leap_year(year)
assert excinfo.type == expected