@pytest.fixture装饰器用来做测试用例的预置条件,相当于unittest中的setup函数,如果要在预置条件中传参数,该如何进行呢?

1.传参就用默认的request参数

2.接收参数用request.param

#!usr/bin/python
# -*- coding: utf-8 -*-
import pytest
@pytest.fixture(scope="module")
def login(request):
    username=request.param #从request中取传递过来的参数
    print(username)
    return username
test_data=["username1","username2"]
@pytest.mark.parametrize("login",test_data,indirect=True)添加indirect=True参数是为了把login当成一个函数去执行,而不是一个参数
def test_login(login):
    a = login            返回值接收
    print(a)
    assert a

传递多个参数:接收到的参数时一个字典,可以用request,param[’username‘]形式接收

@pytest.fixture(scope="module")
def login2(request):
    username=request.param["username"]
    pwd=request.param["password"]
    print(username)
    print(pwd)
    return username,pwd
test_data=[{"username":"username1","password":"123"},{"username":"username2","password":"456"}]#参数填写成字典形式
@pytest.mark.parametrize("login2",test_data,indirect=True)
def test_login2(login2):
    a = login2
    print(a)
    assert a

fixture叠加:

import pytest

# 测试账号数据
test_user = ["admin1", "admin2"]
test_psw = ["11111", "22222"]


@pytest.fixture(scope="module")
def input_user(request):
    user = request.param
    print("登录账户:%s" % user)
    return user


@pytest.fixture(scope="module")
def input_psw(request):
    psw = request.param
    print("登录密码:%s" % psw)
    return psw



@pytest.mark.parametrize("input_user", test_user, indirect=True)
@pytest.mark.parametrize("input_psw", test_psw, indirect=True)
def test_login(input_user, input_psw):
    '''登录用例'''
    a = input_user
    b = input_psw
    print("测试数据a-> %s, b-> %s" % (a,b))
    assert b

if __name__ == "__main__":
    pytest.main(["-s", "test_04.py"])

运行结果

============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO\par, inifile:
plugins: metadata-1.7.0, html-1.19.0
collected 4 items

test_04.py 登录账户:admin1
登录密码:11111
测试数据a-> admin1, b-> 11111
.登录账户:admin2
测试数据a-> admin2, b-> 11111
.登录密码:22222
测试数据a-> admin2, b-> 22222
.登录账户:admin1
测试数据a-> admin1, b-> 22222
.

========================== 4 passed in 0.05 seconds ===========================

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐