1. 如果你想查询在你的环境下有哪些pytest的active plugin可以使用:

  1. py.test --traceconfig

会得到一个扩展的头文件名显示激活的插件和他们的名字。同时也会打印出当前的plugin,也就是被加载时conftest.py文件。

2. pytest.ini文件有什么作用

3. pytest的fixture究竟是怎么工作的,在pytest中它有怎样的作用。

Dealing with fixtures is one of the areas where pytest really shines.

It's to think of fixtures as a set of resources that need to be set up before a test starts, and cleaned up after.

有四种作用域的fixture,分别为function,class,module和session作用域。简单理解function scope,就是每一个函数都会调用;class scope,就是每一个类调用一次,一个类可以有多个函数;module scope,应该是一个文件调用一次,该文件内又有多个function;session scope范围更大,是多个文件调用一次,每个文件有对应着一个module。

function Run once per test
class Run once per class of tests
module Run once per module
session Run once per session

fixture又有autouse的和非autouse的。什么是autouse的呢?就是在定义fixture时autouse为True的,如下:

  1. @pytest.fixture(scope="session", autouse=True)

在调用时pytest的test函数不需要在参数中指定它也会被调用,如下所示

  1. def test_alpha_1():
  2. print('\nIn test_alpha_1()')

非autouse的fixture时没有指定autouse为True的。它在调用时需要显示地写出fixture的名字在pytest函数的参数中,如下:

  1. @pytest.fixture(scope="session")
  2. def some_resource(request):
  3. print('\nIn some_resource()')
  4. def some_resource_fin():
  5. print('\nIn some_resource_fin()')
  6. request.addfinalizer(some_resource_fin)

在调用时需要这么调用

  1. def test_alpha_2(some_resource):
  2. print('\nIn test_alpha_2()')

这两者在调用顺序上,在setup阶段,是先调用autouse的,然后再调用非autouse的。在tear down阶段则是反过来,先调用非autouse的,然后再调用autouse的。他们的调用顺序应该是类似于栈的进出栈顺序,先进栈的后出栈,后进栈的先出栈。

查看pytest自带的内在的fixture的方法。

  1. py.test -q --fixture

pytest中有三种方法去使用一个fixture

  1. 在test的参数列表中指定。
  2. 使用usefixtures decorateor
  3. 使用autouse

4. pytest fixture的一些优势

  • 很直观明了地知道哪些tests使用了一个资源,因为这个资源在test的参数列表中。
  • 我不用必须 人为地创建类(或者将tests从一个文件移动到另一个),只需要分离fixture应用。
  • 对于一个资源来说teardown代码是紧密地和setup代码耦合的。
  • 资源的生命周期的范围在资源setup代码的位置处指定。这最终成为一个巨大的优势当你想要摆弄范围来节省测试时间。如果所有的事情开始出现故障,只需要一行的改变去指定函数的范围,让setup/teardown运行围绕着每一个函数/方法
  • 更少的代码。pytest的解决方法小于类的解决方法。
因为翻译水平有限,为了不影响英文愿意,我把英文也附在这里
  • It's obvious which tests are using a resource, as the resource is listed in the test param list.
  • I don't have to artificially create classes (or move tests from one file to another) just to separate fixture usage.
  • The teardown code is tightly coupled with the setup code for one resource.
  • Scope for the lifetime of the resource is specified at the location of the resource setup code. This ends up being a huge benefit when you want to fiddle with scope to save time on testing. If everything starts going haywire, it's a one line change to specify function scope, and have setup/teardown run around every function/method.
  • It's less code. The pytest solution is smaller than the class solution.

5.pytest fixture的一些特性

  • Return value
你可以返回任何你想要返回的从fixture函数。
如果你的fixture是准备一些data,或者读取一个文件,或者打开一个到数据库的连接,然后访问数据库或资源应该是你想要从fixture中返回的。
  • Finalizer is teardown
当所有的test case使用了fixture后finalizer被调用
  • Request objects
  • Params
fixture decorator的一个可选的参数是‘params’,它的默认值为None.
在params中的每一个值,该值会赋值给request.param,然后fixture将会被调用。
 

6. conftest.py的作用

conftest.py文件是一个单独的存放fixtures的文件。

对于function,class和module来说,把fixture代码放到和test代码同样的文件中完全合理的。但是,对于session,就不再make senese了。

这样的话我们就可以把他们放在conftest.py文件中。这是一个pytest会寻找的一个有特定名字的文件。

7. ini文件查找顺序

pytest默认的ini文件查找顺序为:pytest.ini, tox.ini, setup.cfg。只到第一个[pytest]部分被发现。

例如当我们执行:py.test path/to/testdir时,查找的顺序如下:

  1. path/to/testdir/pytest.ini
  2. path/to/testdir/tox.ini
  3. path/to/testdir/setup.cfg
  4. path/to/pytest.ini
  5. path/to/tox.ini
  6. path/to/setup.cfg
  7. ... # up until root of filesystem

如果给py.test 提供参数,会从当前的工作路径开始寻找。

转载'https://blog.csdn.net/xibeichengf/article/details/50589235

本文参考了这篇文章

pytest相关问题解析的更多相关文章

  1. awr相关指标解析

    awr相关指标解析 2016年11月11日 15:09

  2. MAC 相关操作解析

    MAC 相关操作解析 OS 显示桌面 f11 F1~F12 fn + F1~F12 撤销重做 command + z command + shift + z 图片预览 选择图片 空格 上下左右 svn ...

  3. Hadoop NameNode元数据相关文件目录解析

    在<Hadoop NameNode元数据相关文件目录解析>文章中提到NameNode的$dfs.namenode.name.dir/current/文件夹的几个文件: 1 current/ ...

  4. SpringBoot应用配置常用相关视图解析器

    目录 SpringBoot的自动装配装配了视图解析器了吗? SpringBoot使用JSP SpringBoot中使用Thymeleaf SpringBoot中使用Freemark SpringBoo ...

  5. Web 前端性能优化相关内容解析

    Web 前端性能优化相关内容,来源于<Google官方网页载入速度检测工具PageSpeed Insights 使用教程>一文中PageSpeed Insights 的相关说明.大家可以对 ...

  6. Web 前端性能优化相关内容解析[转]

    Web 前端性能优化相关内容,来源于<Google官方网页载入速度检测工具PageSpeed Insights 使用教程>一文中PageSpeed Insights 的相关说明.大家可以对 ...

  7. Hyperledger Fabric相关文件解析

    1相关文件说明 这一部分涉及相关配置文件的解析, 网络的启动涉及到多个文件,本文按以下顺序进行分析: . ├── base │   ├── docker-compose-base.yaml #1 │  ...

  8. Android Https相关完全解析 当OkHttp遇到Https

    一.概述 其实这篇文章理论上不限于okhttp去访问自签名的网站,不过接上篇博文了,就叫这个了.首先要了解的事,okhttp默认情况下是支持https协议的网站的,比如https://www.baid ...

  9. KandQ:单例模式的七种写法及其相关问题解析

    设计模式中的单例模式可以有7种写法,这7种写法有各自的优点和缺点: 代码示例(java)及其分析如下: 一.懒汉式 public class Singleton { private static Si ...

随机推荐

  1. 远程访问其他主机的Mysql(Ubuntu)

    远程访问其他主机的Mysql 首先:被访问的电脑应该把防火墙关掉, sudo ufw disable 然后去etc/mysql sudo gedit my.cnf 将bind-address注解掉 由 ...

  2. 如何理解ajax的同步和异步?

    对于如下一段代码: var dataJson = {"ABC":'testABC'}; $.ajax({                url: "/MonkeyServ ...

  3. spring源码下载及转入ECLIPSE

    转自:https://www.cnblogs.com/scevecn/p/6043284.html 本例spring源码版本是4.3.0的, 所以jdk需要准备1.8的(不同版本源码要求的jdk不一样 ...

  4. Navicat批量导出mysql的DDL语句

    工作中有的时候需要将某个库中的表.视图.函数.存储过程等创建语句导出,又不需要表中的数据.同时最好放在同一个文件里面,这样方便拷贝. 方法一:需要拷贝的创建语句条数不多,不至于让你拷到头脑发晕的地步, ...

  5. Oracle数据库控制台常用命令

    安装好数据库以后可以通过“Win+R”打开控制台,在控制台登录Oracle输入命令来操作数据库. SQLPlus命令: SQLPlus命令是用来登录Oracle数据库的命令,有两种写法,分别如下: ( ...

  6. [2019杭电多校第七场][hdu6651]Final Exam

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6651 题意:n个科目,总共m分,通过一科需要复习花费科目分数+1分钟,在不知道科目分数的情况下,问最少 ...

  7. Codeforces 979D (STL set)(不用Trie简单AC)

    题面: 传送门 题目大意: 给定一个空集合,有两种操作: 一种是往集合中插入一个元素x,一种是给三个数x,k,s,问集合中是否存在v,使得gcd(x,v)%k==0,且x+v<=s若存在多个满足 ...

  8. Appium+Python之PO模型(Page object Model)

    思考:我们进行自动化测试时,如果把代码都写在一个脚本中,代码的可读性会变差,且后期代码维护也麻烦,最好的想法就是测试对象和测试用例可以分离,可以很快定位问题,代码可读性高,也比较容易理解.这里推荐大家 ...

  9. CSU-1110 RMQ with Shifts (单点更新+区间最小值 zkw线段树)

    In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query ...

  10. Python 3实现网页爬虫

    1 什么是网页爬虫 网络爬虫( 网页蜘蛛,网络机器人,网页追逐者,自动索引,模拟程序)是一种按照一定的规则自动地抓取互联网信息的程序或者脚本,从互联网上抓取对于我们有价值的信息.Tips:自动提取网页 ...