1. 程式人生 > 其它 >【pytest-05】pytest.mark.parametrize的使用

【pytest-05】pytest.mark.parametrize的使用

  • 一、前言

    • 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])]) 進行引數化
    引數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"])

執行結果如果所示: