fixture的单独使用、fixture与fixture的相互调用

1、fixture的定义方法
fixture:即我们通常所说的前置操作。
格式:
def fixture(scope="function", params=None, autouse=False, ids=None, name=None):
定义fixture:在函数声明之前加上“@pytest.fixture(scope='')"

(1)scope:scope=''
funtion:当前函数调用
class:当前类调用
module:全部py模块调用
session:当前包下的py用例都调用

(2)params:默认为None(讲解在另一篇博客)

当不为None时,params里面的每个值,fixture都会调用一次

(3)name设置为别名(讲解在另一篇博客)



3、conftest的使用
一般将fixture写入到coonftest.py配置文件
conftest.py配置需要注意以下几点:

☆ conftest.py配置脚本名称是固定的,不能改名称;

☆ conftest.py与运行的用例要在同一个目录下,并且有__init__.py文件;

☆ 不需要import导入 conftest.py,用例会自动查找。



4、文件结构

在这里插入图片描述
在这里插入图片描述


5、fixture单个调用
# conftest.py
@pytest.fixture()
def user():
    user='aaa'
    return user

# test_a.py
def test_a(user):
    print(user)
结果:
 test_a.py .aaa  

6、fixture多个调用
# conftest.py
@pytest.fixture()
def user():
    user='aaa'
    return user

@pytest.fixture()
def user2():
    user2='bbb'
    return user2

# test_a.py
def test_a(user,user2):
    print(user,user2)
结果:
 test_a.py .aaa bbb




7、fixture中调用fixture
# conftest.py
@pytest.fixture()
def user():
    user='aaa'
    return user

#在psw2中调用另一个fixture:user,当参数传入即可。
@pytest.fixture()
def psw2(user):
    usr=user
    psw=123
    return user,psw

# test_a.py
def test_c(psw2):
    print(psw2)
结果:('aaa', 123)




8、在fixture下的函数下同时传参:
# # 在fixture中多参数的传递(通过被调用函数传参)
# funtion_a.py
def funtion_a(test_input1,test_input2):
    test_input1=test_input1
    test_input2=test_input2
    # print(test_input1,test_input2)
    return test_input1,test_input2

if __name__=='__main__':
    funtion_a('aaa','bbb')

# conftest.py
from funtion_a import *
@pytest.fixture()
def psw(user):
    usr=user
    funtion_a('in','out')
    #返回一个list
    return [usr,funtion_a('in','out')]

# test_a.py
def test_login(psw):
   # 相应的赋值一个list,数量对应2个
    [usr,(inout)]=psw
    print('结果为:%s'% [usr,(inout)])

结果:
结果为:['aaa', ('in', 'out')]





9、parametsize与fixture同时使用
# conftest.py
# paramesize与fixture的结合使用
@pytest.fixture(scope="function")
def test_setup():
    a='前置操作返回值'
    return a


# test_a.py
import pytest
test_data=['a','b','c']
@pytest.mark.parametrize('test_in',test_data)
def test_input_test(test_setup,test_in):
    print(test_setup)
    test_input=test_in
    print(test_input)

test_input.py 
.前置操作返回值
a
.前置操作返回值
b
.前置操作返回值
c
                                                        [100%]

========================== 3 passed in 0.05 seconds ===========================

10、在fixture中存储testcase的返回值
# conftest.py
@pytest.fixture(scope="function")
def add(request):
    yield
    print('开始存数据')
    print('存的数据为 %s' % request.config.s)


#test_a.py
# 验证在fixture后存用例的返回值
def test_sava(add,request):
    request.config.s='aaa'

结果:
test_a.py .开始存数据
存的数据为 aaa




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值