<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pytest之fixture

          共 4583字,需瀏覽 10分鐘

           ·

          2020-08-10 19:47

          VOL 148

          10

          2020-08

          今天距2021年143天

          這是ITester軟件測(cè)試小棧第148次推文

          點(diǎn)擊上方藍(lán)字“ITester軟件測(cè)試小棧“關(guān)注我,每周一、五早上?07:30準(zhǔn)時(shí)推送。


          微信公眾號(hào)后臺(tái)回復(fù)“資源測(cè)試工具包”領(lǐng)取測(cè)試資源,回復(fù)“微信群”一起進(jìn)群打怪。


          本文4143字,閱讀約需11分鐘





          在上一篇Pytest系列文章:Pytest之?dāng)嘌?/a>,主要介紹常用斷言方法及異常斷言。

          以下主要介紹fixture的介紹、調(diào)用方式及作用域。


          fixture基本介紹



          1

          fixture概念

          fixturepytest 用于將測(cè)試前后進(jìn)行預(yù)備、清理工作的代碼處理機(jī)制。


          2

          fixture優(yōu)勢(shì)

          fixture相對(duì)于unittest中的setup和teardown來(lái)說(shuō)有以下幾點(diǎn)優(yōu)勢(shì):



          3

          fixture語(yǔ)法

          語(yǔ)法如下:
          fixture(callable_or_scope=None,?*args,?scope="function",?params=None,?autouse=False,?ids=None,?name=None)



          4

          定義fixture

          定義fixture,在函數(shù)上添加@pytest.fixture即可。
          @pytest.fixture()
          def?fixture_demo():
          ????print("這是fixture")


          5

          如何區(qū)分前后置

          在pytest中,用yield區(qū)分前后置,即yield前面代碼為前置,后面代碼為后置。
          from?selenium?import?webdriver
          @pytest.fixture()
          def?open_browser_init():
          ????#?前置
          ????driver?=?webdriver.Chrome()
          ????driver.get("https://www.baidu.com")
          ????yield?driver
          ????#?后置
          ????driver.quit()


          fixture調(diào)用


          調(diào)用fixture的三種方式。


          1

          在測(cè)試用例中直接調(diào)用

          將fixture名稱作為參數(shù)傳入測(cè)試用例,如果fixture有返回值,那么測(cè)試用例將會(huì)接收返回值。
          import?pytest
          from?selenium?import?webdriver
          @pytest.fixture()
          def?open_browser_init():
          ????driver?=?webdriver.Chrome()
          ????driver.get("https://www.baidu.com")
          ????yield?driver
          ????driver.quit()
          def?test_input(open_browser_init):
          ????open_browser_init.find_element_by_id("kw").send_keys("ITester")


          2

          pytest裝飾器調(diào)用fixture

          在測(cè)試用例或測(cè)試類上方加上@pytest.mark.usefixtures("fixture名稱")。
          import?pytest
          from?selenium?import?webdriver
          @pytest.fixture()
          def?open_browser_init():
          ????driver?=?webdriver.Chrome()
          ????driver.get("https://www.baidu.com")
          ????yield?driver?#返回driver
          ????driver.quit()
          @pytest.mark.usefixtures("open_browser_init")
          def?test_input(open_browser_init):??#?fixture名稱作為參數(shù)傳入
          ????open_browser_init.find_element_by_id("kw").send_keys("ITester")


          3

          autouse調(diào)用fixture

          fixture有個(gè)參數(shù)autouse,默認(rèn)為False。

          autouse為True時(shí),同一個(gè)作用域的所有測(cè)試用例都會(huì)調(diào)用這個(gè)fixture。

          autouse為False時(shí),需要手動(dòng)調(diào)用fixture。

          import?pytest

          @pytest.fixture(autouse=True)
          def?fixture_auto():
          ????print("這是fixture_auto")

          def?test_demo01():
          ????print("運(yùn)行test_demo01")

          def?test_demo02():
          ????print("運(yùn)行test_demo02")


          運(yùn)行結(jié)果為:



          fixture作用域


          fixture里面有個(gè)scope參數(shù)可以控制fixture的作用范圍,scope參數(shù)可以是session, module,class,function, 默認(rèn)為function。



          1

          function級(jí)別范圍


          每個(gè)測(cè)試用例之前運(yùn)行一次:

          @pytest.fixture()
          def?test_fixture():
          ????a?=?"hello"
          ????print("每個(gè)測(cè)試用例之前運(yùn)行一次")
          ????yield?a
          def?test_01(test_fixture):
          ????print("這是test_01")
          ????assert?"e"?in?test_fixture
          def?test_02(test_fixture):
          ????print("這是test_02")
          ????assert?"h"?in?test_fixture


          運(yùn)行結(jié)果為:



          2

          class級(jí)別范圍


          如果一個(gè)class里面有多個(gè)用例,都調(diào)用了此fixture,那么fixture只在此class里所有用例開始前執(zhí)行一次。

          import?pytest
          @pytest.fixture(scope="class")
          def?test_fixture():
          ????a?=?"hello"
          ????yield?a
          @pytest.mark.usefixtures("test_fixture")
          class?TestDemo:
          ????def?test_demo01(self,test_fixture):
          ????????assert?"h"?in?test_fixture
          ????def?test_demo02(self,test_fixture):
          ????????assert?"o"?in?test_fixture


          運(yùn)行結(jié)果為:




          3

          module級(jí)別范圍


          在當(dāng)前.py腳本里面所有用例開始前只執(zhí)行一次。

          import?pytest
          @pytest.fixture(scope="module")
          def?test_fixture():
          ????a?=?"hello"
          ????print("在當(dāng)前文件下執(zhí)行一次")
          ????yield?a
          def?test_01(test_fixture):
          ????print("這是test_01")
          ????assert?"e"?in?test_fixture
          @pytest.mark.usefixtures("test_fixture")
          class?TestDemo:
          ????def?test_demo01(self,test_fixture):
          ????????print("這是test_demo01")
          ????????assert?"h"?in?test_fixture
          ????def?test_demo02(self,test_fixture):
          ????????print("這是test_demo02")
          ????????assert?"o"?in?test_fixture

          運(yùn)行結(jié)果為:



          4

          session級(jí)別范圍


          session級(jí)別是可以跨模塊調(diào)用的,多個(gè)模塊下的用例只需調(diào)用一次fixture,那就可以設(shè)置為scope="session",并且寫到conftest.py文件里。

          conftest.py作用域:放到項(xiàng)目的根目錄下就可以全局調(diào)用了,如果放到某個(gè)package下,那就在改package內(nèi)有效。

          conftest.py的fixture調(diào)用方式,無(wú)需導(dǎo)入,直接使用。


          conftest.py

          import?pytest
          @pytest.fixture()
          def?test_fixture():
          ????a?=?"hello"
          ????print("這是conftest")
          ????yield?a


          test_demo01.py

          def?test_01(test_fixture):
          ????print("這是test_01")
          ????assert?"e"?in?test_fixture


          test_demo02.py

          def?test_02(test_fixture):
          ????print("這是test_02")
          ????assert?"h"?in?test_fixture


          命令行輸入:pytest -v

          輸出結(jié)果如下:


          以上
          That‘s all
          更多系列文章
          敬請(qǐng)期待

          ITester軟件測(cè)試小棧
          往期內(nèi)容寵幸


          1.Python接口自動(dòng)化-接口基礎(chǔ)(一)

          2.Python接口自動(dòng)化-接口基礎(chǔ)(二)


          3.Python接口自動(dòng)化-requests模塊之get請(qǐng)求


          4.Python接口自動(dòng)化-requests模塊之post請(qǐng)求

          5.Python接口自動(dòng)化之cookie、session應(yīng)用


          6.Python接口自動(dòng)化之Token詳解及應(yīng)用


          7.Python接口自動(dòng)化之requests請(qǐng)求封裝


          8.Python接口自動(dòng)化之pymysql數(shù)據(jù)庫(kù)操作


          9.Python接口自動(dòng)化之logging日志


          10.Python接口自動(dòng)化之logging封裝及實(shí)戰(zhàn)

          想獲取更多最新干貨內(nèi)容
          快來(lái)星標(biāo) 置頂 關(guān)注
          每周一、三、五 07:30見

          << ?滑動(dòng)查看下一張圖片 ?>>



          ?后臺(tái)?回復(fù)"資源"取干貨
          回復(fù)"微信群"一起打怪升級(jí)

          測(cè)試交流Q群:727998947

          點(diǎn)亮一下在看,你更好看
          瀏覽 105
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  九一九国产 | 黄色的网站久久 | 美女全裸网站91网视麻豆 | 免费avapp | 欧美高清中文字幕精品日韩不卡国产在线一区 |