Pytest学习(四) - fixture的使用 (2)

fixture为class级别的时候,如果一个class里面有多个用例,都调用了此fixture,那么此fixture只在此class里所有用例开始前执行一次。
示例代码如下:

# -*- coding: utf-8 -*- # @Time : 2020/10/24 19:15 # @Author : longrong.lang # @FileName: test_fixture_scopeClass.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang ''' scope="class"示例 ''' import pytest @pytest.fixture(scope='class') def data(): # 这是测试数据 print('这是我的数据源,优先准备着哈') return [1, 2, 3, 4, 5] class TestClass(object): def test1(self, data): # self可以理解为它自己的,英译汉我就是这么学的哈哈 print('\n输出我的数据源:' + str(data)) if __name__ == '__main__': pytest.main(["-q", "test_fixture_scopeClass.py"]) 输出结果:

Pytest学习(四) - fixture的使用

3、scope="module"

fixture为module时,在当前.py脚本里面所有用例开始前只执行一次。
示例代码如下:

# -*- coding: utf-8 -*- # @Time : 2020/10/24 19:27 # @Author : longrong.lang # @FileName: test_scopeModule.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang ''' fixture为module示例 ''' import pytest @pytest.fixture(scope='module') def data(): return '\nscope为module' def test1(data): print(data) class TestClass(object): def text2(self, data): print('我在类中了哦,' + data) if __name__ == '__main__': pytest.main(["-q", "test_scopeModule.py"]) 输出结果:

Pytest学习(四) - fixture的使用

4、scope="session"

fixture为session,允许跨.py模块调用,通过conftest.py 共享fixture
也就是当我们有多个.py文件的用例的时候,如果多个用例只需调用一次fixture也是可以实现的。
必须以conftest.py命名,才会被pytest自动识别该文件。放到项目的根目录下就可以全局调用了,如果放到某个package下,那就在该package内有效。
文件目录结构如下:

Pytest学习(四) - fixture的使用

创建公共数据,命名为conftest.py,示例代码如下:

# -*- coding: utf-8 -*- # @Time : 2020/10/24 19:37 # @Author : longrong.lang # @FileName: conftest.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang import pytest @pytest.fixture(scope='session') def commonData(): str = ' 通过conftest.py 共享fixture' print('获取到%s' % str) return str

创建测试脚本test_scope1.py,示例代码如下:

# -*- coding: utf-8 -*- # @Time : 2020/10/24 19:45 # @Author : longrong.lang # @FileName: test_scope1.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang import pytest def testScope1(commonData): print(commonData) assert commonData == ' 通过conftest.py 共享fixture' if __name__ == '__main__': pytest.main(["-q", "test_scope1.py"])

创建测试脚本test_scope2.py,示例代码如下:

# -*- coding: utf-8 -*- # @Time : 2020/10/24 19:45 # @Author : longrong.lang # @FileName: test_scope1.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang import pytest def testScope2(commonData): print(commonData) assert commonData == ' 通过conftest.py 共享fixture' if __name__ == '__main__': pytest.main(["-q", "test_scope2.py"])

然后同时执行两个文件,cmd到脚本所在目录,输入命令

pytest -s test_scope2.py test_scope1.py 输出结果:

Pytest学习(四) - fixture的使用

知识点:

一个工程下可以有多个conftest.py的文件,在工程根目录下设置的conftest文件起到全局作用。在不同子目录下也可以放conftest.py的文件,作用范围只能在改层级以及以下目录生效,另conftest是不能跨模块调用的。

fixture的调用

将fixture名作为测试用例函数的输入参数

测试用例加上装饰器:@pytest.mark.usefixtures(fixture_name)

fixture设置autouse=True

示例代码如下:

# -*- coding: utf-8 -*- # @Time : 2020/10/24 20:10 # @Author : longrong.lang # @FileName: test_fixtureCall.py # @Software: PyCharm # @Cnblogs :https://www.cnblogs.com/longronglang ''' fixture调用示例 ''' import pytest # 调用方式一 @pytest.fixture def login1(): print('第一种调用') # 传login def test_case1(login1): print("\n测试用例1") # 不传login def test_case2(): print("\n测试用例2") # 调用方式二 @pytest.fixture def login2(): print("第二种调用") @pytest.mark.usefixtures("login2", "login1") def test_case3(): print("\n测试用例3") # 调用方式三 @pytest.fixture(autouse=True) def login3(): print("\n第三种调用") # 不是test开头,加了装饰器也不会执行fixture @pytest.mark.usefixtures("login2") def loginss(): print(123) if __name__ == '__main__': pytest.main(["-q", "test_fixtureCall.py"]) 输出结果:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygyfj.html