1、函数传参数
- 当前置用例函数需要传参
import pytest
test_login_data = [("admin","admin"),("user","123456")]
def login(user, pwd):
print(f"登录用户名:{user}")
print(f"登录密码:{pwd}")
if pwd == "admin":
return True
else:
return False
@pytest.mark.parametrize("user, pwd",test_login_data)
def test_login(user, pwd):
result = login(user, pwd)
assert result == True, "失败原因:密码不正确"
if __name__ == '__main__':
pytest.main(["-s", "test_fixture_request.py"])
执行结果:有2个用例,一个测试通过,一个测试失败了,互不影响
test_fixture_request.py
.登录用户名:admin
登录密码:admin
F登录用户名:user
登录密码:123456
AssertionError: 失败原因:密码不正确
2、request传参
- 如果想把登录操作放到前置操作里,也就是用到@pytest.fixture装饰器,传参就用默认的request参数
user = request.param 这一步是接收传入的参数,本案例是传一个参数情况
import pytest
test_login_data = ["admin","12345"]
@pytest.fixture(scope="module")
def login(request):
user = request.param
print(f"登录用户名:{user}")
return user
@pytest.mark.parametrize("login", test_login_data,indirect=True)
def test_login(login):
a = login
print(f"测试用李中login的返回值{a}")
assert a != ""
if __name__ == '__main__':
pytest.main(["-s", "test_fixture_request2.py"])
添加indirect=True参数是为了把login当成一个函数去执行,而不是一个参数
执行结果:
test_fixture_request2.py
登录用户名:admin
.测试用李中login的返回值admin
登录用户名:12345
.测试用李中login的返回值12345
3、request传2个参数
import pytest
test_login_data = [{
"user":"admin","pwd":"1111"},{
"user":"user","pwd":"123456"}]
@pytest.fixture(scope="module")
def login(request):
user = request.param["user"]
pwd = request.param["pwd"]
print(f"登录用户名:{user}")
print(f"登录密码:{pwd}")
if pwd == "123456":
return True
else:
return False
@pytest.mark.parametrize("login", test_login_data,indirect=True)
def test_login(login):
a = login
print(f"测试用李中login的返回值{a}")
assert a ,"失败原因:密码错误"
if __name__ == '__main__':
pytest.main(["-s", "test_fixture_request3.py"])
执行结果:
test_fixture_request3.py 登录用户名:admin
登录密码:1111
F测试用李中login的返回值False
test_fixture_request3.py:24: AssertionError
test_fixture_request3.py 登录用户名:admin
登录密码:1111
F测试用李中login的返回值False```
# 4、自定义mark标记
```python
import pytest
@pytest.mark.add
def test_mark01():
print("执行mark01用例。。。")
@pytest.mark.add
def test_mark02():
print("执行mark02用例。。。")
def test_mark03():
print("执行mark03用例。。。")
def test_mark04():
print("执行mark04用例。。。")
运行add标记的用例
pytest -m "add" -s
不运行add标记的用例
pytest -m "not add" -s