pytest的fixtures允许测试函数/方法轻松地从本地文件系统检索测试资源。

pytest-datadir-ng的Python项目详细描述


pytestdatadir-ng插件提供了datadir 以及datadir_copyfixtures,它们允许测试函数轻松访问资源 在数据目录中。它的灵感来源于pytest-datadir plugin,并且是有意的 是一个更灵活的插件版本(因此名字中的“NG”部分) 在“下一代”中)。

此插件提供两个固定装置:

  • datadirfixture允许测试函数和方法访问 所谓的“数据目录”。
  • datadir_copy夹具类似于datadir夹具,但它复制 首先向临时目录请求资源,以便测试功能或 方法可以在不影响其他测试功能的情况下修改它们在磁盘上的资源 和方法。

安装

只要做:

pip install pytest-datadir-ng

datadir设备

“datadir”fixture允许测试函数和方法访问 所谓的“数据目录”。

这个装置的工作原理就像一本字典。当前,仅使用 d[key]语法受支持。像迭代器,len(d)等都不是。

fixture如何查找资源最好用一个例子来描述。 我们假设您的测试使用以下目录结构:

tests/
+-- test_one.py
+-- test_two.py
+-- data/
|   +-- global.dat
+-- test_one/
|   +-- test_func/
|       +-- data.txt
+-- test_two/
    +-- TestClass/
        +-- test_method/
            +-- strings.prop

文件test_one.py包含以下函数:

deftest_func(datadir):data_path=datadir["data.txt"]# ...

文件test_two.py包含以下类:

classTestClass(object):deftest_method(self,datadir):strings_path=datadir["strings.prop"]# ...

test_func()函数请求data.txt资源时, 在以下目录中搜索名为data.txt的文件或目录, 按此顺序:

  • tests/test_one/test_func/
  • tests/test_one/
  • tests/data/test_one/test_func/
  • tests/data/test_one/
  • tests/data/

第一个现有文件(或目录)的路径作为一个返回 py.path.local对象。在这种情况下,返回的路径将是 tests/test_one/test_func/data.txt

test_method()方法请求strings.prop资源时, 在以下目录中搜索具有以下名称的文件或目录 strings.prop,按以下顺序:

  • tests/test_two/TestClass/test_method/
  • tests/test_two/TestClass/
  • tests/test_two/
  • tests/data/test_two/TestClass/test_method/
  • tests/data/test_two/TestClass/
  • tests/data/test_two/
  • tests/data/

这里,这将返回路径 tests/test_two/TestClass/test_method/strings.prop

如您所见,如果 method而不是function请求资源。这样你就可以 如果愿意,可以根据测试类的名称加载不同的资源。

最后,如果测试函数或测试方法需要名为 global.dat,则结果路径为tests/data/global.dat 因为在搜索的目录层次结构中没有其他目录包含 名为global.dat的文件。换句话说,tests/data/目录 是全局(或回退)资源的位置。

如果在搜索目录的any中找不到资源,则 引发键错误。

数据目录复制设备

“datadir_copy”fixture类似于datadirfixture,但是将请求的资源复制到 首先是临时目录,以便测试函数或方法可以在不影响 其他测试功能和方法。

每个测试函数或方法都有自己的临时目录,因此有自己的资源的新副本 请求。

caveat:每次使用字典符号请求资源时,都会生成该资源的新副本。 如果一个测试函数或方法多次请求同一资源,也会出现这种情况。因此,如果您修改 资源并需要稍后访问资源的修改版,将其路径保存在变量中并使用 以后访问资源而不是多次使用字典符号的变量:

deftest_foo(datadir_copy):# This creates the initial fresh copy of data.txt and saves# its path in the variable "resource1".resource1=datadir_copy["data.txt"]# ...modify resource1 on-disk...# You now want to access the modified version of data.txt.# WRONG way: This will overwrite your modified version of the#            resource with a fresh copy!fh=datadir_copy["data.txt"].open("rb")# CORRECT way: This will let you access the modified version#              of the resource.fh=resource1.open("rb")

热门话题
java接口中的每个方法都是抽象的,但在抽象类中,我们也只能使用抽象方法   初始化Java中声明的、未初始化的变量会发生什么情况?   java BouncyCastle openPGP将字节[]数组加密为csv文件   在Java中将类A(和所有子类)映射到类B的实例的字典   RSA公钥编码,在Java和Android中,代码相同,结果不同   java在安卓中实现数字检测语音识别   java取消选择复选框   java如何在其他配置中重用Maven配置XML片段   java有没有一种有效的方法来检查HashMap是否包含映射到相同值的键?   spring处理程序调度失败;嵌套的例外是java。lang.NoClassDefFoundError:org/apache/http/client/HttpClient   带有ehcache的java多层缓存   java如何访问chromium(或任何其他浏览器)cookie   java通过将两个集合与spring data mongodb data中的条件合并来获取计数   安卓中R.java的语法错误