【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])]) 进行参数化
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"])
运行结果如果所示:

本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/16047240.html

浙公网安备 33010602011771号