关于scope作用:
scope参数作用范围
控制fixture的作用范围:session>module>class>function
function:每一个函数或方法都会调用
class:每一个类调用一次,一个类中可以有多个方法
module:每一个.py文件调用一次,该文件内又有多个function和class
session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
conftest中的yield:
即用例开始前会执行yield前面的代码,用例结束后会执行yield后面的代码。
1、公共的conftest函数
'''
Create file time:2021/9/7 10:46
File ctreate by author: jingying.lu
创建一个前置conftest
'''
import pytest
@pytest.fixture(scope="function",name='loginfuntion') # function
def login():
print('用例开始执行,在函数开始前调用一次')
yield
print('用例执行结束用例,在函数结束后调用一次')
@pytest.fixture(scope='class',name='loginclass') # class
def login2():
print('用例开始执行,在类开始前调用一次')
yield
print('用例执行结束用例,在类结束后调用一次')
@pytest.fixture(scope='module',name='loginmodule') # module
def login3():
print('用例开始执行,在整个py开始前调用一次')
yield
print('用例执行结束用例,在整个py结束后调用一次')
@pytest.fixture(scope='session',name='loginsession') # session
def login4():
print('用例开始执行,在整个目录下开始前调用一次')
yield
print('用例执行结束用例,在目录下结束后调用一次')
2、验证funtion作用
'''
验证conftest的yield
'''
def test_funtion(loginfuntion):
print(loginfuntion)
==========================================================
test_funtion.py::test_funtion 用例开始执行,在函数开始前调用一次
PASSED [100%]None
用例执行结束用例,在函数结束后调用一次
3、验证class作用
class Test():
def test_class1(self,loginclass):
print('测试1')
def test_class2(self,loginclass):
print('测试2')
执行:
collecting ... collected 2 items
test_class.py::Test::test_class1 用例开始执行,在类开始前调用一次
PASSED [ 50%]测试1
test_class.py::Test::test_class2 PASSED [100%]测试2
用例执行结束用例,在类结束后调用一次
========================== 2 passed in 0.08 seconds ===========================
4、验证module作用
def test_01(loginmodule):
print(loginmodule)
class Test():
def test_02(self,loginmodule):
print(loginmodule)
def test_03(self,loginmodule):
print(loginmodule)
执行:
collecting ... collected 3 items
test_module.py::test_01 用例开始执行,在整个py开始前调用一次
PASSED [ 33%]None
test_module.py::Test::test_02 PASSED [ 66%]None
test_module.py::Test::test_03 PASSED [100%]None
用例执行结束用例,在整个py结束后调用一次
========================== 3 passed in 0.09 seconds ===========================
4、验证session作用
# test_01.py
def test_session(loginsession):
print(loginsession)
class TestSession():
def test_session02(self,loginsession):
print(loginsession)
def test_session03(self,loginsession):
print(loginsession)
# test_02.py
def test_session3(loginsession):
print(loginsession)
class TestSession():
def test_session04(self,loginsession):
print(loginsession)
def test_session05(self,loginsession):
print(loginsession)
执行以上2个文件
collecting ... collected 6 items
test_session.py::test_session 用例开始执行,在整个目录下开始前调用一次
PASSED [ 16%]None
test_session.py::TestSession::test_session02 PASSED [ 33%]None
test_session.py::TestSession::test_session03 PASSED [ 50%]None
test_session2.py::test_session3 PASSED [ 66%]None
test_session2.py::TestSession::test_session04 PASSED [ 83%]None
test_session2.py::TestSession::test_session05 PASSED [100%]None
用例执行结束用例,在目录下结束后调用一次
========================== 6 passed in 0.20 seconds ===========================