一、fixture里面有个参数scope,通过scope可以控制fixture的作用范围,根据作用范围大小划分:session>module>class>function,具体作用范围如下:

1.function 函数或者方法级别都会被调用

2.class 类级别调用一次

3.module 模块级别调用一次

4.session 是个多文件调用一次(可以跨 .py 文件调用,每个.py文件就是 module)

例如整个模块有多条测试用例,需要在全部用例执行之前打开浏览器,全部执行完之后去关闭浏览器,打开和关闭操作只执行一次,如果每次都要重新执行打开操作,会非常占用系统资源,这种场景除了 setup——module,teardown_module 可以实现,还可以通过设置模块级别的 fixture装饰器【@pytst.fixture(scope="module")】来实现

scope='module'

fixture 参数 scope=‘module’ ,module作用是整个模块都会生效

  1. #!/usr/bin/env python
  2. # _*_coding: utf-8 _*_
  3. import pytest
  4.  
  5. @pytest.fixture(scope='module')
  6. def open():
  7. print("打开浏览器")
  8. yield
  9.  
  10. print("执行teardown !")
  11. print("最后关闭浏览器")
  12.  
  13. @pytest.mark.usefixtures("open")
  14. def test_search1():
  15. print("test_search1")
  16. raise NameError
  17. pass
  18.  
  19. def test_search2():
  20. print("test_search2")
  21. pass
  22.  
  23. def test_search3():
  24. print("test_search3")
  25. pass

代码解析:@pytest.fixture()如果不写参数,参数默认scope=‘function’。当scope='module'时,在当前 .py脚本里面所有的用例开始前只执行一次。scope巧妙与yield组合使用,相当于setup和teardown方法。还可以使用@pytest.mark.usefixtures装饰器,传入前置函数名作为参数

运行结果如下:

  1. Testing started at 12:03 ...
  2. C:\Python\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1\helpers\pycharm\_jb_pytest_runner.py" --path C:/Users/wanwen/PycharmProjects/vigo/xuexi/20210123/test_fixture_scope.py
  3. Launching pytest with arguments C:/Users/wanwen/PycharmProjects/vigo/xuexi/20210123/test_fixture_scope.py in C:\Users\wanwen\PycharmProjects\vigo\xuexi\20210123
  4. ============================= test session starts =============================
  5. platform win32 -- Python 3.8.0, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
  6. rootdir: C:\Users\wanwen\PycharmProjects\vigo\xuexi\20210123
  7. plugins: html-2.1.1, metadata-1.11.0, ordering-0.6collected 3 items
  8.  
  9. test_fixture_scope.py 打开浏览器
  10. Ftest_search1
  11.  
  12. test_fixture_scope.py:14 (test_search1)
  13. @pytest.mark.usefixtures("open")
  14. def test_search1():
  15. print("test_search1")
  16. > raise NameError
  17. E NameError
  18.  
  19. test_fixture_scope.py:18: NameError
  20. .test_search2
  21. .test_search3
  22. 执行teardown
  23. 最后关闭浏览器
  24. [100%]
  25.  
  26. ================================== FAILURES ===================================
  27. ________________________________ test_search1 _________________________________
  28.  
  29. @pytest.mark.usefixtures("open")
  30. def test_search1():
  31. print("test_search1")
  32. > raise NameError
  33. E NameError
  34.  
  35. test_fixture_scope.py:18: NameError
  36. ---------------------------- Captured stdout setup ----------------------------
  37. 打开浏览器
  38. ---------------------------- Captured stdout call -----------------------------
  39. test_search1
  40. =========================== short test summary info ===========================
  41. FAILED test_fixture_scope.py::test_search1 - NameError
  42. ========================= 1 failed, 2 passed in 0.19s =========================
  43.  
  44. Process finished with exit code 0
  45.  
  46. Assertion failed
  47.  
  48. Assertion failed

从上面运行结果可以看出scope=‘module’ 和yield结合,相当于setup_module 和teardown_module方法,整个模块运行之前调用open()方法中的yield前面打印输出 的打开浏览器 ,整个运行之后调用了yield后面的打印语句执行teardown与关闭浏览器,yield来唤醒teardown的执行,如果用例出现异常,不影响yield后面teardown执行

可以使用 @pytest.mark.usefixtures装饰器来进行方法的传入

pytest:通过scope控制fixture的作用范围的更多相关文章

  1. Pytest单元测试框架之FixTure基本使用

    前言: 在单元测试框架中,主要分为:测试固件,测试用例,测试套件,测试执行及测试报告: 测试固件不难理解,也就是我们在执行测试用例前需要做的动作和测试执行后的需要做的事情: 比如在UI自动化测试中,我 ...

  2. Pytest(3)fixture的使用

    fixture的优势 Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进: 命名方式灵活,不局限于 setup 和teardown 这几个命名 conf ...

  3. pytest 4.scope="module"介绍

    前言: 上一篇讲到fixture通过scope参数控制setup级别,不填的时候默认 scope="function",那么接下来就会讲scope="module&quo ...

  4. pytest自动化4:fixture之yield实现teardown

    出处:https://www.cnblogs.com/yoyoketang/p/9401554.html 前言: 上一篇介绍了fixture通过scope参数控制setup级别,我们一起来温故下fix ...

  5. pytest自动化3:fixture之conftest.py实现setup

    出处:https://www.cnblogs.com/yoyoketang/p/9390073.html 前言: 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作 ...

  6. Pytest高级进阶之Fixture

    From: https://www.cnblogs.com/feiyi211/p/6626314.html 一. fixture介绍 fixture是pytest的一个闪光点,pytest要精通怎么能 ...

  7. pytest.5.参数化的Fixture

    From: http://www.testclass.net/pytest/parametrize_fixture/ 背景 继续上一节的测试需求,在上一节里,任何1条测试数据导致断言不通过后测试用例就 ...

  8. pytest初始化与清除fixture(二)

    @pytest.fixture用法 1.导入pytest模块:import pytest 2.调用装饰器函数:@pytest.fixture(callable_or_scope=None,*args, ...

  9. pytest进阶使用【fixture(一)fixture与setup/teardown区别】

    fixture翻译为装置. 我觉得名字是很贴合功能的,可以自由给函数装置上自己想要的功能. 当在说pytest比unitest灵活时,fixture肯定是其中的一个理由. 测试数据的准备和执行以后的数 ...

随机推荐

  1. 【命令】ln命令

    这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件或目录在另外一个位置建立一个同步的链接,默认是链接是硬链接,常用参数是 "-s"  . 对于ln命令,这里 ...

  2. 使用 CoreDNS 来应对 DNS 污染

    原文链接:https://fuckcloudnative.io/posts/install-coredns-on-macos/ CoreDNS 是 Golang 编写的一个插件式 DNS 服务器,是 ...

  3. easyui模板页面 不良调查

    <%@page import="com.xy.cc.util.CUtil" %><%@page import="com.xy.cc.bean.UserP ...

  4. java 去掉html标签 使用正则表达式删除HTML标签。

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class HTMLSpirit{ public stat ...

  5. 如果对象为空,java函数String.valueOf(Object obj)返回"null"字符串

    源码如下: public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toStr ...

  6. js:表单校验(获取元素、事件)

    1.表单校验步骤 (1)确定事件(submit事件),创建一个函数并和该事件绑定. (2)书写函数对输入的数据是否合法进行校验(需要设定ID并通过ID来获取用户输入的数据的值). (3)输入的信息合法 ...

  7. spring乱码处理

    在web.xml添加post乱码filter:CharacterEncodingFilter 2). 对于get请求中文参数出现乱码解决方法有两个: a. 修改tomcat配置文件添加编码与工程编码一 ...

  8. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  9. 为什么import React from 'react',React首字母必须大写?

    很奇怪的是,明明没有用到 React,但是我不得不 import React.这是为什么? import React from 'react'; export default function (pr ...

  10. Above the Median

    http://www.forioi.com/p/3212 农夫约翰把他的N(1<=N<=1e5)奶牛排在一排来衡量他们的高度,牛i有:高度H_I(1<=H_I<=1e9)纳米– ...