本文主要介绍pytest的两种传参方式:
@pytest.mark.parametrize
和@pytest.fixture
-
@pytest.mark.parametrize
通过在函数上方加上@pytest.mark.parametrize(参数,参数值)实现,使用时通过定义的参数取值。
参数与参数值一一对应
# test_login.py
import pytest
data1 = [('demo1', 'hello'), ('demo2', 'world')]
@pytest.mark.parametrize("name,password", data1)
def test_demo(name, password):
print(name, password)
if __name__ == '__main__':
pytest.main(['-s', 'test_login.py'])
>>>执行结果
demo1 hello
.demo2 world
只有一个参数接收数据
import pytest
data1 = [('demo1', 'hello'), ('demo2', 'world')]
# 只有一个参数接收数据
@pytest.mark.parametrize("login", data1)
def test_demo(login):
print(login)
if __name__ == '__main__':
pytest.main(['-s', 'test_login.py'])
>>>执行结果
('demo1', 'hello')
.('demo2', 'world')
装饰多个时,参数相乘。
# test_login.py
import pytest
data1 = ['demo1', 'demo2']
data2 = ['hello', 'world']
@pytest.mark.parametrize("name1", data1)
@pytest.mark.parametrize("name2", data2)
def test_demo(name1, name2):
print(name1, name2)
if __name__ == '__main__':
pytest.main(['-s', 'test_login.py'])
>>>执行结过
demo1 hello
.demo2 hello
.demo1 world
.demo2 world
-
@pytest.fixture
通过在函数上方加上@pytest.fixture()
实现,使用时通过request
用字典的方式取值。
# test_01.py
import pytest
test_user_data = [{"user":"admin1"}, {"user":"admin2"}]
@pytest.fixture(params=test_user_data)
def login(request):
user = request.param
print("登录账户:%s"%user['user'])
return user
def test_login(login):
login
if __name__ == "__main__":
pytest.main(["-s", "test_01.py"])
>>>执行结果
登录账户:admin1
.登录账户:admin2
request接收参数, indirect=True 声明login是函数
import pytest
test_user_data = [{"user":"admin1"}, {"user":"admin2"}]
@pytest.fixture()
def login(request):
user = request.param
print("登录账户:%s"%user['user'])
return user
# indirect=True 声明login是函数
@pytest.mark.parametrize("login", test_user_data, indirect=True)
def test_login(login):
a = login
print(a)
if __name__ == "__main__":
pytest.main(["-s", "test.py"])
>>>执行结果
登录账户:admin1
{'user': 'admin1'}
.登录账户:admin2
{'user': 'admin2'}
网友评论