人们用它来做什么
几乎每个接收用户文件的项目都会遇到的五项任务,以及完成每一项的命令。下面的每个示例都能按原样运行。
上传限制
测试文件大小限制是否在声称的位置生效
一个限制对应三个测试用例,而不是一个:刚好低于、恰好等于和刚好高于。手工做这些意味着计算字节数,并祈祷自己没有算错一位。不如直接请求整套文件:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
你会得到三个真实的 PDF,大小分别是 1048575、1048576 和 1048577 字节,以及一份清单,说明前两个应被接受,第三个应因 size_limit
被拒绝。你的测试读取预期,而不是由你手写三个断言,限制改变时,你只需改一个数字再重新运行。
如果你只想要一组内联的边界文件,不用预设也可以做到:
tfg generate --format png --boundary 5mb --out ./png-edges
持续集成
让 fixture 留在仓库之外又不丢失
大型二进制 fixture 会拖慢仓库克隆,也让评审变得别扭,而且替换其中一个时没有人能看出改了什么。配方只是几百个字符的 YAML,就能重建出完全相同的文件,在任何机器上逐字节一致,因为每个文件都由运行的种子派生。
- name: build the fixtures
run: tfg generate fixtures.yaml --out ./fixtures
- name: run the tests
run: pytest tests/
- name: nothing moved
run: tfg verify ./fixtures/manifest.json
每种结束方式都有自己的退出码,所以流水线可以区分配方错误、磁盘已满和校验不一致。失败的运行不会在标准输出上打印任何内容,这样日志解析器就不会把错误当成数据。
规模
弄清文件夹很大时会发生什么
导入程序、夜间任务和目录列表在一万个文件时的表现与十个文件时不同。从范围中抽取的大小让文件集看起来像真实流量,而不是一万个完全相同的文件,并且抽取来自种子,所以明天文件集依然相同。
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./fixtures
在运行写入任何内容之前先查看它的开销,当总量以 GB 计时这一点很重要:
tfg generate --format log --size-range 1kb-8kb --count 10000 --dry-run
比磁盘可用空间更大的运行会在写入第一个字节之前就被拒绝,而不是把磁盘写满再半途失败。
压缩包
用真正装有文件的压缩包测试解压程序
只有正确扩展名的空压缩包,无法证明任何关于打开它并遍历内容的代码的事情。声明内容,压缩包就真的包含它们:
targets:
- id: bundle
format: zip
contains:
- format: txt
count: 200
size: 4kb
嵌套深度、条目数量和内部内容的大小,导入程序都有自己的看法,而这正是你弄清这些看法的办法。
解析器与查看器
检查你自己的代码读取格式的方式是否与真实软件一致
这里的每种格式在发布前都用独立读取器验证过:PNG 被打开并比对像素,DOCX 由另外的库读回,压缩包被解压。这意味着你的解析器拒绝的文件,是关于你的解析器的发现,而不是关于生成器的。
tfg generate --format docx --size 300kb --set paragraphs=120 --out ./documents
tfg generate --format xlsx --size 2mb --set rows=400 --set columns=6 --out ./sheets
格式页面列出了每种格式接受的设置,以及每种格式能达到的最小文件。
指南
其中两项的详细说明
适合谁
QA 工程师、测试自动化,以及代码背后有上传表单、导入程序、解析器或存储配额的所有人。它可以在完全没有网络的机器上运行,这在基于浏览器的生成器行不通的封闭企业环境中尤为重要。
免费开源,GPL-3.0。无需注册。Windows 和 macOS 的下载包已签名,启动时没有警告。