1fixture的scope

在@pytest.fixture(scope='xxx')中,scope的可选值有5个,以下是官网的描述

2 function级别的scope

添加如下代码到pytest.ini,便于输出日志



新建conftest.py文件,把fixture函数写入其中,便于后面fixture可以在多个py文件中的test函数中引用

conftest.py



pytest的fixture默认级别就是 funtion,因此可以不写scope参数

test_fixture.py

执行结果

注意,两个test函数中,list对象的id是不同的,虽然他们的内容都是相同的,这说明在这两个test函数中,他们各自独立地执行了一次fixture,拿到了各自的list对象



the default scope, the fixture is destroyed at the end of the test

3 class级别的scope

执行



注意,每个class里面都有2个test函数,同一个class里面的test函数,输出的list对象是相同的,

说明他们拿到的都是同一个list对象,生产list对象的fixture只执行了一次

不同的class的test函数,输出的list对象的id是不同的,说明在执行第2个class时,fixture又执行了一次,生成一个新的list对象



class: the fixture is destroyed during teardown of the last test in the class.

4 module级别的scope

test_fixture.py

test_fixture_2.py



执行



可以看到,同一个py文件里面,所有的test输出的list对象id是相同的,说明这些test共享了一个list对象

不同的py文件,test输出的id对象是不同的,说明不同的py文件各自独立执行了fixture,拿到了各自独立的list对象

5 session级别的scope



test_fixture.py test_fixture_2.py内容不变

执行



可以看到,不同py文件的test函数,都输出相同id的list对象,说明不同py文件的test,都共享了同一个list对象,fixture在整个测试绘画期间只执行了一次



the fixture is destroyed at the end of the test session

6 package级别的scope

首先我的目录结构如下



两个conftest文件的内容都是相同的



注意,每个目录下添加文件__init__.py,内容不用写。所谓package,就是包含__init__.py文件的目录

test_fixture_2.py test_fixyure.py内容与之前相同

test02目录下test_fixture_03.py



在test01 test02 同级目录下执行 pytest -k "fixture" -s -v

执行结果



可以看到 test01目录下所有的test输出id是相同的,test02目录下的test输出的id是不同的

这事,其他内容不变,把test02目录下的conftest.py删除,把test01下的conftest.py移动到test01 test02的同级目录中

再来执行



这时,你会看到所有的输出id都是相同的

这就有意思了,这里牵涉到一个conftest.py的范围的问题,conftest.py放在不同的目录下,它能影响的范围也是不同的

pytes中fixture的scope: 决定可以在什么范围内共享fixture的更多相关文章

  1. angularjs中的directive scope配置

    angularjs中的directive scope配置 定义directive其中重要的一环就是定义scope,scope有三种形式: 默认的scope,DOM元素上原有的scope scope: ...

  2. 聊一下JS中的作用域scope和闭包closure

    聊一下JS中的作用域scope和闭包closure scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解,closure就不一样了.我就被这个概念困扰了很久 ...

  3. 【Transact-SQL】统计某字段中的值第一次出现后的2小时内出现的次数

    原文:[Transact-SQL]统计某字段中的值第一次出现后的2小时内出现的次数 table1 name createdate a 2011-03-01 10:00:00 a 2011-03-01 ...

  4. Spring中bean的scope详解

    如何使用spring的作用域: <bean id="role" class="spring.chapter2.maryGame.Role" scope=& ...

  5. 用AngularJS开发的过程中如何查看Scope内容

    scope的继承就好比JS的原型链继承,深入理解Scope:http://www.lovelucy.info/understanding-scopes-in-angularjs.html 通过查看官网 ...

  6. Spring中bean的scope

    Spring容器中的bean具备不同的scope,最开始只有singleton和prototype,但是在2.0之后,又引入了三种类型:request.session和global session,不 ...

  7. spring中bean的scope属性理解

    bean的scope属性有prototype,singleton,request, session几个属性 spring和struts2整合的时候,struts2的action要配置成scope=&q ...

  8. angularjs中directive声明scope对象的用法

    总的来说用法 分三种: >1: scope: false  --> 继承父域,实现 双向数据绑定 示例代码 可自测: <!DOCTYPE html> <html lang ...

  9. (转)Maven POM中的各种scope的行为总结

    原地址:https://blog.csdn.net/cnweike/article/details/52221410 compile:默认的scope.任何定义在compile scope下的依赖将会 ...

  10. Spring_2_Spring中lazy-init和scope属性

    1)springTest类: public class springTest { @Test public void instanceSpring() { AbstractApplicationCon ...

随机推荐

  1. 1.3Dmax界面_试图操作

    一.初始界面 1.菜单栏(软件的核心) 2.工具栏 3.石墨工具 4.命令板块 5.场景大纲 tools--> new Scene Explorer 创建的物体信息就会从出现在这里 6.视图窗口 ...

  2. Kong网关安装自定义插件

    安装自定义插件需要注意kong网关的版本要求!! 下面以安装Skywalking插件为例,要求Kong网关是2.2及以上版本,https://github.com/apache/skywalking- ...

  3. MySql 入门——日期计算

    MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等 SELECT TIMESTAMPDIFF( ...

  4. [复现]2021DASCTF实战精英夏令营暨DASCTF July X CBCTF-PWN

    EasyHeap 想可执行的地方写入orw的shellcode,利用tcachebin的df进行劫持malloc_hook 然后调用add来触发. from pwn import * context. ...

  5. 火狐浏览器调试eval源码

    火狐浏览器调试eval源码 firefox浏览器在网页调试上,有一个没法和chrome一比高下的功能,就是eval脚本的调试,有时前端架构使用了基于eval的方式,有时候可能是自己一个多行函数,每每遇 ...

  6. nginx 代理路径

    反向代理被代理url没有截取 /report/api/ /report/api/bussinessRisk/zhucai/creditInquiry 应该是/bussinessRisk/zhucai/ ...

  7. 什么是Placement new ?

    1. 什么是placementNew placement new的作用就是:创建对象(调用该类的构造函数)但是不分配内存,而是在已有的内存块上面创建对象.用于需要反复创建并删除的对象上,可以降低分配释 ...

  8. VUE+.NET应用系统的国际化-多语言词条服务

    上篇文章我们介绍了 VUE+.NET应用系统的国际化-整体设计思路 系统国际化改造整体设计思路如下: 提供一个工具,识别前后端代码中的中文,形成多语言词条,按语言.界面.模块统一管理多有的多语言词条 ...

  9. .NET/C#操作Redis的简单方法

    本文属于Redis初级应用,只起初步引路作用,高手们可略过. 支持.Net Core(2.0及以上)/.Net Framework(4.5及以上),可以部署在Docker, Windows, Linu ...

  10. mysql根据多列去除重复数据bing 并保留id最小的一项

    首先我的数剧是这样的: 我想根据name1.relation和name2判断如果重复的话删除重复的数据且保留id最小的一条数据,于是写了下面的sql语句 DELETE FROM star_relati ...