Pytes测试框架的前后置处理

pytes框架实现一些前后置(固件,夹具)的处理,常用三种

为什么要用这些功能?

比如在做web自动化时,在做一个测试时总要有一个先必做的动作,或者是结束后要关闭的动作等。

以及如有些函数需要连接数据库,可以把连接数据库和断开数据的操作放在,指定的函数里.

这样每次测试函数的时候,都调取这个链接数据库的函数就行

一、setup/teardown,setup_class/teardown_class

1、setup/teardown:在每个用例的前后都会执行一次。

如图下,设置之后,运行

Pytes测试框架的前后置处理_第1张图片
Pytes测试框架的前后置处理_第2张图片

setup_class/teardown_class:在所有用例前后总共各执行一次。

*模块级(setup_module/teardown_module):开始于模块始末,作用于全局(总用各执行一次。)

*函数级(setup_function/teardown_function):仅对函数用例生效(即不在类中,每个函数执行一次)

*类级(setup_class/teardown_class):只在类中前后运行一次(在类中)

*方法级(setup_method/teardown_method):开始于方法始末(在类中,每个方法执行一次)

如下

Pytes测试框架的前后置处理_第3张图片
Pytes测试框架的前后置处理_第4张图片


二、使用@pytest.fixture()装饰器来实现部分用例的前后置

1、首先要理解unittest中setup、teardown的作用,可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个测试类全局生效的

2、如果有以下场景:用例 1 需要先登录,用例 2 不需要登录,当每个测试用例的执行环境和条件都不一样时,显然无法用 setup 和 teardown 来实现

3、fixture可以使环境管理更灵活,每个测试用例可以有自己的fixture

装饰器

@pytest.fixture(scope="",params="",autouse="",ids="",name="")

---------------------------------------------------------------------------

(1)scope:表示的是被@pytes.fixture标记的方法的作用域

   function(默认),class,module,package/session

(2)params:参数化(支持,列表[],元祖(),字典列表[{},{},{}],字典元祖({},{},{}]) )

    测试用例参数化传入的参数被fixture调用,需要使用到request.param

Pytes测试框架的前后置处理_第5张图片
Pytes测试框架的前后置处理_第6张图片

params=['苹果','香蕉','梨'] 这里params是参数名,有s

    request.param这里是属性名,是没有s的

(3)autouse=True:自动使用,默认False

(4)ids:当使用params参数化时,给每一个值设置一个变量名,意义不大

(5)name:给表示的是被@pytes.fixture标记的方法取一个别名。同一模块的fixture相互调用建议写不同的name

    当取了别名之后,那么原来的名称就用不了了

测试用例如何调用fixture

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

2、加上装饰器:@pytest.fixtures()


Pytes测试框架的前后置处理_第7张图片
Pytes测试框架的前后置处理_第8张图片

fixture之yield实现teardown

用fixture实现teardown并不是一个独立的函数,而是用yield 关键字来开启teardown操作

注意

1、如果yield前面的代码,即setup部分已经抛出异常了,则不会执行yield后面的内容

2、如果测试用例抛出异常,yield后面的内容还是会正常执行

3、带有 yield 的函数在 Python 中被称之为 generator(生成器),生成器就是一边循环一边计算的机制,yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力

4、与return的区别:return后面的代码不会执行,yield后面的代码继续执行


调用时,可以使用usefixtures

usefixtures与传fixture区别

 如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。

当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。

如下,如果add方法加上“---------”+my_fixtrue,就会报错,不加就不会报错

Pytes测试框架的前后置处理_第9张图片
Pytes测试框架的前后置处理_第10张图片


三、通过conftest.py和@pytest.fixture()结合使用全局的前后置应用(如:项目的全局登录,模块的全局处理)

1、conftest.py文件是单独存放的一个夹具配置文件,名称是不能更改的

2、用处可以在不同的py文件中使用同一个fixture函数

3、原则上conftest.py需要和运行的用例放到统一层,并且不需要做任何的import导入的操作


总结:

1️⃣setup/teardown,setup_class/teardown_class 它的作用于所有的用例或者所有的类

2️⃣@pytest.fixture()它的作用是既可以部分也可以全局前后置

3️⃣conftest.py和@pytest.fixture()结合使用,作用于全局的前后置

你可能感兴趣的:(Pytes测试框架的前后置处理)