pytest fixture功能學習

目錄

一、使用pytest.fixture入參測試代碼

二、 使用pytest.fixture入參,數據分離

三、使用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章