700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python自动化测试框架之Pytest相关用法-Fixture(2)

Python自动化测试框架之Pytest相关用法-Fixture(2)

时间:2021-08-12 00:27:54

相关推荐

Python自动化测试框架之Pytest相关用法-Fixture(2)

1、setup和teardown

和unittest一样,pytest也有自己的前置后置条件:setup、teardown。但不同的是,pytest的类型比较多,多达10种,根据不同的生效范围分别为以下级别类型

模块级别:setup_module、teardown_module

函数级别:setup_function、teardown_function,不在类中的方法

类级别:setup_class、teardown_class

方法级别:setup_method、teardown_method

方法细化级别:setup、teardown

首先来看类级别以下的前置后置条件的使用

class Test_Case:def setup_class(self):print('-----setup_class')def teardown_class(self):print('-----teardown_class')def setup_method(self):print('-----setup_method')def teardown_method(self):print('-----teardown_method')def setup(self):print('-----setup')def teardown(self):print('-----teardown')def test_case1(self):print('这是---用例1')def test_case2(self):print('这是---用例2')if __name__ == '__main__':pytest.main(['./test_demo1.py', '-s'])

输出:

可以看到,先后顺序是类级别>方法级别>方法细化级别。但是这三个级别的方法都是在同一个类中生效的。剩余的模块级别则是全局的,在模块运行前后执行。而函数级别则是将不在类中的方法前后执行。

为了更方便理解,融入场景说明各个条件的作用

不过相比之下,除了类级别、方法级别的条件使用较频繁外,其他并不经常使用。此外,比使用更频繁的是pytest的"外壳函数"-fixture,能够对某条用例单独设置前后置条件。

2、fixture

Fixture是pytest的核心功能,也是亮点功能,是一个装饰器函数,是用于将测试前后进行预备、清理工作的代码分离出核心测试逻辑的一种机制。作为pytest的 “外壳函数”,他可以当作参数传入,也可以返回值,而fixture机制的存在,也是pytest比unittest灵活的原因之一。

1、基本用法

在方法头前添加"@pytest.fixture(参数)",那么该方法就是个fixture函数了。而且fixture还可以配合“yield”完成后置条件的操作。

而调用fixture函数也有三种方法

1、用例前添加装饰器:@pytest.mark.usefixtures("fixture函数名")

2、fixture作为参数传入用例中

3、fixture使用autouse参数

@pytest.fixture()def work():print('fixture:开始')yield 4print('fixture:结束')class Test_Case:def test_case1(self, work):print('fixture的返回值为:', work)print('这是---用例1')def test_case2(self):print('这是---用例2')if __name__ == '__main__':pytest.main(['./test_demo1.py', '-s'])

输出:

2、参数

此外,还可以添加scope、autouse等参数,用来表示fixture的作用域等,scope参数代表fixture的作用域,有4个作用范围:function、class、module、session

function:每个函数或方法都会调用(未填写默认为function级别)

class:每个类只调用1次

module:每个模块只调用1次

session:多个模块调用1次,通常写在conftest中

autouse参数表示在scope作用域中的用例无需填写fixture参数,默认为自动调用

3、其他

此外,fixture还支持相互调用,例如first作为scond的“前置条件”

@pytest.fixture()def first():print('这是第一层fixture')@pytest.fixture()def second(first):print('这是第二层fixture')class Test_Case:def test_case1(self, second):print('这是---用例1')if __name__ == '__main__':pytest.main(['./test_demo1.py', '-s'])

输出:

3、conftest.py

说简单点,其实就是fixture函数的集中管理,如果所有用例的前置条件都一样,那在每个用例文件中都创建fixture就很不方便,所以就要用到conftest.py的全局作用,conftest.py有以下特点:

1、与pytest.ini一样,文件名、文件类型固定。可以创建多个不同目录的conftest.py

2、pytest会默认读取conftest.py中的fixture函数

3、用例文件无需导入conftest.py,直接调用fixture即可

4、conftest.py只对同一目录下的所有用例生效

例如以下文件结构

最外层的conftest会对test_case和test_case2文件夹下的所有用例生效,一般用来生成driver、关闭浏览器、生成测试报告等配置,而test_case和test_case2中的conftest就针对不同需求配置不同fixture函数了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。