使用假设随机选择文件夹内的文件

Randomly choose a file inside a folder using Hypothesis

我想使用假设库(已在软件中用于测试)添加测试。 对于这些测试,我必须使用文件夹中包含的一组 txt 文件。 每次 运行 我的测试时,我都需要随机选择其中一个文件。 如何使用假设来做到这一点?

编辑 这基本上是如何遵守现有测试的模板。

@given(doc=)
def mytest(doc):

    # assert some stuff according to doc
    assert some_stuff

静态案例

如果文件列表假定为"frozen"(没有文件将是deleted/added)那么我们可以使用os.listdir + hypohtesis.strategies.sampled_from like

import os

from hypothesis import strategies

directory_path = 'path/to/directory/with/txt/files'
txt_files_names = strategies.sampled_from(sorted(os.listdir(directory_path)))

或者如果我们需要完整路径

from functools import partial
...
txt_files_paths = (strategies.sampled_from(sorted(os.listdir(directory_path)))
                   .map(partial(os.path.join, directory_path)))

或者如果目录可能有不同扩展名的文件,我们只需要 .txt 个,我们可以使用 glob.glob

import glob
...
txt_files_paths = strategies.sampled_from(sorted(glob.glob(os.path.join(directory_path, '*.txt'))))

动态案例

如果目录内容可能会改变,我们想在每次数据生成尝试时进行目录扫描,可以像

那样完成
dynamic_txt_files_names = (strategies.builds(os.listdir,
                                             strategies.just(directory_path))
                           .map(sorted)
                           .flatmap(strategies.sampled_from))

或完整路径

dynamic_txt_files_paths = (strategies.builds(os.listdir,
                                             strategies.just(directory_path))
                           .map(sorted)
                           .flatmap(strategies.sampled_from)
                           .map(partial(os.path.join, directory_path)))

glob.glob

dynamic_txt_files_paths = (strategies.builds(glob.glob,
                                             strategies.just(os.path.join(
                                                     directory_path,
                                                     '*.txt')))
                           .map(sorted)
                           .flatmap(strategies.sampled_from))

编辑

  • 之后添加了 sorted