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