参数化parametrize
import pytest
@pytest.mark.parametrize('input, result',[('5-0',5),("2+3",5),])
def test_01(input, result):
assert eval(input) == result
@pytest.mark.parametrize('x',[1,2,3,])
@pytest.mark.parametrize('y',[4,5,6,])
def test_02(x,y):
print('x => %s,y => %s' % (x,y))
test_para.py ...x => 1,y => 4
.x => 2,y => 4
.x => 3,y => 4
.x => 1,y => 5
.x => 2,y => 5
.x => 3,y => 5
.x => 1,y => 6
.x => 2,y => 6
.x => 3,y => 6
通过编写的小案例发现:
parametrize参数化,第一种写法是对应的,第二种写法会将所有组合都跑一遍
自定义标记mark
# test_para.py
import pytest
@pytest.mark.web
@pytest.mark.parametrize('input, result',[('5-0',5),("2+3",5),])
def test_01(input, result):
assert eval(input) == result
print('断言通过')
@pytest.mark.parametrize('x',[1,2,3,])
@pytest.mark.parametrize('y',[4,5,6,])
def test_02(x,y):
print('x => %s,y => %s' % (x,y))
# test_class.py
import pytest
import time
@pytest.mark.web
def test_1(driver,start):
print('搜索python')
driver.find_element_by_id('kw').send_keys('python')
driver.find_element_by_id('su').click()
time.sleep(5)
def test_2(driver,start):
print('搜索地图')
driver.find_element_by_id('kw').send_keys('地图')
driver.find_element_by_id('su').click()
time.sleep(5)
上述几个case我们标记 web,然后我们在文件目录中运行命令行, > pytest -m web
pytest就回自动运行 test_para.py/test_01和test_class/test_1 两条用例,别的case都会跳过不运行
如果相同时运行多个标记case,那么标记名之间用 or 相连, > pytest -m "web or webtest"
这时会运行所有标记为 web和webtest 的case
mark标记也可以用在类上,cmd运行类上的标记时,会运行类下的所有case