Pytest装饰器: fixture

一、 fixture可以成为测试的装置,脚手架

         fixture修饰器来标记固定的工厂函数,在其他函数,模块,类或整个工程调用时,它会被激活并优先执行,通常会被用于完成预置处理和重复操作

          --对于测试用例准备性工作,挪出测试代码

          --对于重复性的代码,使用函数进行重用

          --这样的工作就应该给fixture来完成

二、作用

  •      在测试执行之前,自动化转呗相关的测试环境
  •      在测试执行之后,将相关的内容进行销毁

        标记工厂函数: @pytest.fixture()

             1.参数引用:写在测试函数的参数内

             2.函数引用:@pytest.mark.usefixtures(“工厂函数名”)

1).标记测试类:每个测试方法都会运行一次
2).标记测试函数:只有测试函数会运行

举例:

  •   访问baidu.com 标题中应该有“百度”
    •   打开浏览器
    •   输入 https://baidu.com
    •  获取标题
    •  断言“百度”出现在标题中
  •   访问aliyun.com ,标题中应该有“阿里”
    •   打开浏览器
    •   输入 https://aliyun.com
    •  获取标题
    •  断言“阿里”出现在标题中
  •  访问qq.com,标题中应该有“腾讯”
    •   打开浏览器
    •   输入 https://qq.com
    •  获取标题
    •  断言“腾讯”出现在标题中

 

 

问题:

      1. 同一文件下,不同测试用例间怎么共享fixtrue ?  通过scope 参数

          pytest.fixture(scope="function", params=None, autouse=False,ids=None,name=None)

               scope:被标记方法的作用域(从上到下范围逐渐变大):有5个作用范围

function(默认值):作用于每个测试方法,测试类内部每个方法运行前都会调用一次;

                              作用最小,同一个函数中的测试用例
class: 作用于同一个类,每个class的所有test只运行一次
module: 作用于同一个模块(文件),每个module的所有test只运行一次
package: 作用于同一个包(文件夹),中的测试用例
session: 作用于整个session(慎用),每个session只运行一次, 在整个测试框架内pytest 来控制启动和关闭

2. 不同的文件如何共享fixtrue?

   在pytest启动时,会自动加载的文件有两种:            

-- pytest.ini文件
-- conftest.py 文件:  可以写python代码,可以写fixtrue(被@pytest.fixture装饰的python代码就叫fixture)

                                 该文件会比测试用例先执行
                                所以建议,把fixture定义在conftest.py 文件中
                                这里定义fixtures可以被任何一个文件中的任何用例使用
          也可以不把fixture定义在conftest.py 文件中,比如直接定义在abc.py中,然后手动import 导入要使用的文件中
   
     还有那些应该定义在conftest.py 文件中呢?
                          -- stup
                          --  常量
                          --  初始化
                         --  pytest 的插件 /配置信息

3. 测试代码可以共享吗?怎么共享?

    可以通过参数化测试; 

                 数据驱动测试= 数据管理+参数化
                                          数据管理:从excel , yaml,数据库等地方拿到数据放到fixture就可以了

    一份代码,传递参数,执行多个测试用例;

  fixture支持参数化,可以进行参数化测试;

   

 

posted @ 2022-09-12 16:34  嘿豆粒  阅读(329)  评论(0编辑  收藏  举报