91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python基礎學習之 pytest

發布時間:2020-09-16 02:52:01 來源:網絡 閱讀:644 作者:ckllf 欄目:編程語言

  Pytest

  1.安裝

  首先使用pip3 install pytest安裝pytest

  pytest --version查看版本

  1.編寫規則

  測試文件以test_開頭或以_test結尾也可以

  測試函數以test_開頭

  測試類以Test開頭,并不能有__init__方法

  例如:test_pydemo.py文件

  def test_add():

  print("I am 1")

  assert add.add_test(1,3)==4

  print("I am 2")

  assert add.add_test(1, 2) == 6

  print("I am 3")

  assert add.add_test(1, 5) == 6

  2.pytest用法

  安裝第三方插件,可以使用pip install安裝或者pycharm中安裝,使用的時候導入import pytest

  在pycharm中,files-》settings-》tools=》python integrated tools=》設定default test runner

  2.1 pytest-參數化

  使用pip install pytest-parametrize安裝

  pytest.mark.parametrize(參數名,參數化元組的數組)

  代碼如下:

  import pytest

  @pytest.mark.parametrize("x,y",[

  (3+5, 8),

  (2+4, 6),

  (6*9, 42),

  ])

  def test_add_by_para(x,y):

  assert add.add_test(x,y)==x+y

  2.2 pytest-assume

  多個assert

  import pytest

  def test_add():

  print("I am 1")

  assert add.add_test(1,3)==4

  print("I am 2")

  assert add.add_test(1, 2) == 6

  print("I am 3")

  assert add.add_test(1, 5) == 6

  pytest-assume

  多個assert語句,當出現錯誤的時候,不會繼續往下執行,如果繼續執行,使用pytest-assume插件

  import pytest

  def test_add():

  print("I am 1")

  pytest.assume(add.add_test(1,3)==4)

  print("I am 2")

  pytest.assume(add.add_test(1, 2) == 5)

  print("I am 3")

  pytest.assume(add.add_test(1, 7) == 8)

  2.3 pytest-rerunfails

  當出錯誤時,會重復執行,run次數可以設置,pytest --reruns 5

  2.4 pytest-ordering

  按照order順序執行

  import pytest

  @pytest.mark.run(order=2)

  def test_add_order():

  print("i am 2")

  assert add.add_test(4,4)==8

  @pytest.mark.run(order=1)

  def test_add_order1():

  print("i am 1")

  assert add.add_test(6,4)==10

  2.5 pytest-sugar

  pytest-sugar改變了pytest的默認外觀,增加了一個進度條,并立即顯示失敗的測試

  2.6 pytest-cov

  pytest-cov增加了對pytest的覆蓋支持,以顯示哪些代碼行已經測試,哪些沒有。它還將包括項目的測試覆蓋率。

  3.pytest高級用法

  測試用例的執行之前而初始化一些數據及方法,相當于Unittest中的setUp,tearDown

  3.1 fixture參數

  fixture默認參數為function級別的,function:每一個函數或方法都會調用

  import pytest

  @pytest.fixture()

  def loginlogout():

  print("Before")

  yield

  print("After")

  class TestFixture():

  def test_fixture(self,loginlogout):

  assert add.add_test(2,3)==5

  def test_fixture2(self,loginlogout):

  assert add.add_test(5,3)==8

  class TestFixture1():

  def test_fixture3(self,loginlogout):

  assert add.add_test(2,3)==5

  def test_fixture4(self,loginlogout):

  assert add.add_test(5,3)==8

  以上結果執行4次loginlogout,默認為function級別,即:每個函數或方法執行一次

  3.2 fixture的scope用法

  使用scope設置級別,scope有以下級別:

  function:每一個函數或方法都會調用

  class:每一個類調用一次,一個類可以有多個方法

  module:每一個.py文件調用一次,該文件內又有多個function和class

  session:是多個文件調用一次,可以跨.py文件調用,每個.py文件就是module

  3.2.1 funtion級別

  作用范圍是每個測試用例來之前運行一次

  test_confest.py

  @pytest.fixture()

  def conftest():

  print("conftest")

  def test_confest1(conftest):

  print("conftest1")

  assert 1==1

  def test_confest2(conftest):

  print("conftest2")

  assert 2==2

  def test_confest3():

  assert 2 == 2

  if __name__ == "__main__":

  pytest.main(["-s", "test_confest.py"])

  以上結果,打印了兩個conftest,原因是兩個方法設置了fixture,默認為function

  test_confest.py conftest

  .conftest1

  conftest

  .conftest2

  3.2.2 class級別

  如果一個class里面有多個用例,都調用了此fixture,那么此fixture只在該class里所有用例開始前執行一次

  test_confest.py

  @pytest.fixture(scope="class")

  def conftest():

  print("conftest")

  class TestConftest():

  def test_confest1(self,conftest):

  print("conftest1")

  assert 1==1

  def test_confest2(self,conftest):

  print("conftest2")

  assert 2==2

  def test_confest3(self,conftest):

  assert 2==2

  if __name__ == "__main__":

  pytest.main(["-s", "test_confest.py"])

  以上結果為執行一次confest,原因是scope設置為class,而其中只有一個class,故只有一個confest

  3.2.3 module級別

  當前.py腳本里面所有用例開始前只執行一次

  @pytest.fixture(scope="module")

  def conftest():

  print("conftest")

  def test_confest1(conftest):

  print("conftest1")

  assert 1==1

  class TestConftest():

  def test_confest2(self,conftest):

  print("conftest2")

  assert 1==1

  if __name__ == "__main__":

  pytest.main(["-s", "test_confest.py"])

  測試結果:

  test_confest.py conftest

  .conftest1

  .conftest2

  3.2.4 session級別

  fixture為session級別是可以跨.py模塊調用的,也就是當我們有多個.py文件的用例時候,如果多個用例只需調用一次fixture,那就可以設置為scope=“session”,并且寫到conftest.py文件里

  conftest.py

  import pytest

  @pytest.fixture(scope="session")

  def first():

  print("session級別,每一個py文件執行一次")

  return 2

  test_conftest1.py

  import pytest

  def test_conftest1(first):

  '''用例傳fixture'''

  print("test_conftest1=%d" % first)

  assert 1 == 1

  if __name__ == "__main__":

  pytest.main(["-s", "test_conftest1.py"])

  test_conftest2.py

  import pytest

  def test_conftest_demo1(first):

  '''用例傳fixture'''

  print("test_conftest_demo1=%d" % first)

  assert 1 == 1

  def test_conftest_demo2(first):

  '''用例傳fixture'''

  print("test_conftest2_demo2=%d" % first)

  assert 1 == 1

  if __name__ == "__main__":

  pytest.main(["-s", "test_conftest2.py"])

  結果如下:無錫婦科醫院排行 http://www.0510bhyy.com/

  test_conftest1.py session級別,每一個py文件執行一次

  .test_conftest1=2

  test_conftest2.py session級別,每一個py文件執行一次

  .test_conftest_demo1=2

  .test_conftest2_demo2=2

  3.2.5 conftest

  conftest.py文件名稱是固定的,pytest會自動識別該文件。放到工程的根目錄下,就可以全局調用了,如果放到某個package包下,那就只在該package內有效

  3.3 fixture的usefixtures用法

  將定義在函數里面的放在外面,使用usefixtures

  import pytest

  @pytest.fixture(scope="class")

  def loginlogout():

  print("Before")

  yield

  print("After")

  class TestFixture():

  @pytest.mark.usefixtures("loginlogout")

  def test_fixture(self):

  assert add.add_test(2,3)==5

  @pytest.mark.usefixtures("loginlogout")

  def test_fixture2(self):

  assert add.add_test(5,3)==8

  3.4 fixture的autouse用法

  使用autouse設置是否自動使用fixtures

  import pytest

  pytest.fixture(scope="class",autouse=True)

  def loginlWogout():

  print("Before")

  yield

  print("After")

  class TestFixture():

  def test_fixture(self):

  assert add.add_test(2,3)==5

  def test_fixture2(self):

  assert add.add_test(5,3)==8


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

留坝县| 宁波市| 康定县| 盘锦市| 宜丰县| 休宁县| 安康市| 和田县| 新干县| 师宗县| 神农架林区| 瑞安市| 裕民县| 隆尧县| 海林市| 深水埗区| 德庆县| 察隅县| 满洲里市| 舟山市| 永川市| 四川省| 青铜峡市| 汽车| 潮安县| 石渠县| 许昌市| 萍乡市| 红河县| 耿马| 五河县| 宁陵县| 嵊泗县| 兰坪| 沙坪坝区| 安庆市| 精河县| 奉新县| 呼图壁县| 红安县| 永平县|