<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文關於fixture的內容如下:
fixture有個params引數,允許我們傳遞資料。
語法格式:
# conftest.py檔案 # fixture的params引數 # 取value1時,會把依賴此fixture的用例執行一遍。 # 取value2時,會把依賴此fixture的用例執行一遍。 # 取value3時,會把依賴此fixture的用例執行一遍。 # params有幾個引數,就會將依賴此fixture的用例執行幾遍。 @pytest.fixture(params=[value1, value2, value3..]) def fix_name(): # do something
當我們需要多次呼叫fixture時,則可以用到fixture的引數化功能。
但它並不是並行的,是序列執行的。
比如,測試物件有多種設定方式,那麼引數化可以幫我們在多種設定方式下執行用例。
接下來,以網頁自動化為案例。
需求:要在google、firefox瀏覽器下執行測試用例,用例為開啟百度搜尋pytest。
1)先在conftest.py當中,定義fixture,並設定params=["google", "firefox"]
# conftest.py # params設定為google和firefox @pytest.fixture(params=["google", "firefox"]) def browser_fix(request): if request.param == "google": driver = webdriver.Chrome() elif request.param == "firefox": driver = webdriver.Firefox() else: driver = None yield driver if driver: driver.quit()
2)在測試用例檔案test_baidu_action.py中,編寫測試用例,並呼叫browser_fix
# test_baidu_action.py @pytest.mark.usefixtures("browser_fix") def test_baidu(browser_fix): driver = browser_fix driver.get("https://www.baidu.com/") driver.find_element(By.ID, "kw").send_keys("pytest", Keys.ENTER) loc = (By.XPATH, '//h3') WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc)) driver.find_element(*loc).click()
3)執行2)中的用例,會依次在google瀏覽器中執行完成,然後在firefox瀏覽器中執行完成。一共是2條測試用例。
當我們在一個用例當中,需要多次呼叫fixture時,就可以使用fixture工廠
利用的是裝飾器的方式
在fixture內部,定義一個函數。fixture返回的是函數。
以下案例來自官網:
@pytest.fixture def make_customer_record(): def _make_customer_record(name): return {"name": name, "orders": []} return _make_customer_record # 用例內部,多次呼叫了fixture. def test_customer_records(make_customer_record): customer_1 = make_customer_record("Lisa") # 第1次呼叫 customer_2 = make_customer_record("Mike") # 第2次呼叫 customer_3 = make_customer_record("Meredith") # 第3次呼叫
如果工廠建立的資料需要管理,那麼fixtue可以如下處理:
@pytest.fixture def make_customer_record(): # 管理工廠的資料。在前置中建立。在後置中銷燬 created_records = [] def _make_customer_record(name): record = models.Customer(name=name, orders=[]) # 前置中新增資料 created_records.append(record) return record yield _make_customer_record # 返回內部函數 # 銷燬資料 for record in created_records: record.destroy() # 測試用例 def test_customer_records(make_customer_record): customer_1 = make_customer_record("Lisa") customer_2 = make_customer_record("Mike") customer_3 = make_customer_record("Meredith")
pytest內建的名為requests的fixture,主要功能: 提供請求fixture的測試用例/測試類的資訊的。
我們定義fixture之後,通常都是測試用例/測試類,來請求fixture。
而request fixture就會記錄 測試用例/測試類 相關資訊。
request fixture是通過FixtureRequest來實現的,有以下屬性(列舉部分)可以使用:
更多的請查閱官網:https://docs.pytest.org/en/stable/reference.html
既然requests是fixture,那麼我們定義的fixture,就可以直接把requests作為函數引數來用。
下面,以簡單案例來演示。
定義一個fixture,將requests作為引數。
import pytest @pytest.fixture(params=[1,2]) def init(request): print("用例名稱:", request.function) print("fix引數 ", request.param) print("fix的作用域 ", request.scope) print("用例所在的類 ", request.cls)
定義一個測試類,直接請求名為init的fixture:
@pytest.mark.usefixtures("init") class TestABC: def test_hello(self): print("-------------------------")
執行結果如下:
到此這篇關於Pytest框架之fixture的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45