【pytest-05】pytest.mark.parametrize的使用
阿新 • • 發佈:2022-03-23
-
一、前言
-
Pytest中裝飾器@pytest.mark.parametrize('引數名',list)可以實現測試用例引數化
-
-
二、如何使用
- 第一個引數是字串,多個引數中間用逗號隔開
- 第二個引數是list,多組資料用元祖型別;傳三個或更多引數也是這樣傳。list的每個元素都是一個元組,元組裡的每個元素和按引數順序一一對應
- 傳一個引數 @pytest.mark.parametrize('引數名',list) 進行引數化
- 傳兩個引數@pytest.mark.parametrize('引數名1,引數名2',[(引數1_data[0], 引數2_data[0]),(引數1_data[1], 引數2_data[1])]) 進行引數化
1、單引數資料驅動-1個引數1個值
示例程式碼:test_pytest.py
import pytest # 一個引數一個值 @pytest.mark.parametrize("number", [0,1]) def test_case1(number): assert number==1 if __name__ == '__main__': pytest.main(["-s", "-v", "-k","test_pytest.py"])
執行結果如下圖:
2、多引數驅動-多引數多個值
示例程式碼:
import pytest import time @pytest.mark.baidu class TestBaidu : def setup_method(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.base_url = "http://www.baidu.com/" @pytest.mark.parametrize('search_string,expect_string',[('iTesting','iTesting'),('helloqa.com','iTesting')]) def test_baidu_search(self,search_string,expect_string): driver = self.driver driver.get(self.base_url + './') driver.find_element_by_id("kw").send_keys(search_string) driver.find_element_by_id("su").click() time.sleep(2) search_results=driver.find_element_by_xpath('//*[@id="1"]/h3/a').get_attribute('innerHTML') assert (expect_string in search_results) is True def teardown_method(self): self.driver.quit() if __name__ == '__main__': pytest.main(["-m","baidu","-s", "-v", "-k","test_baidu.py"])
執行結果如圖:
3、多個引數的混合使用
有點類似笛卡爾積的意思,示例程式碼如下:
import pytest data1 = [1, 2] data2 = ["小蘋果", "小菠蘿"] data3 = ["風", "之", "翼", "測", "試","筆",'記'] @pytest.mark.parametrize("a", data1) @pytest.mark.parametrize("b", data2) @pytest.mark.parametrize("c", data3) def test_case3(a, b, c): print(f"生成新的資料組合為:[{a} {b} {c}]") if __name__ == '__main__': pytest.main(["-s", "-v", "-k","test_pytest.py"])
執行結果如果所示: