【问题标题】:Which is the better way to pass data into Python Unittest Redirected STDIN or Pickle?将数据传递到 Python Unittest Redirected STDIN 或 Pickle 的更好方法是什么?
【发布时间】:2011-04-29 16:45:10
【问题描述】:

小问题
将数据放入 Python 单元测试用例的最佳方法是什么?

背景
我的项目使用 Python 的 unittest 模块作为一种自动方式执行一系列需要在许多相同类型的板上运行的测试。到目前为止,这非常适合 unittest 模块的设计目的;不同之处在于每个测试用例都需要知道运行特定信息才能存储在 Django 数据库中。

需要传入的数据包括序列号、谁测试了板子、日期和其他这种性质的东西。值得注意的是,测试板的顺序是由从盒子中拉出板 X 的人选择的,因此无法预测序列号。

想法
目前,我正在通过 pickle 将所需的数据传入和传出测试用例。这种方法在小型测试中效果很好,但我担心的是读取和写入同一个文件 100k + 次为数据损坏提供了很大的空间(+ 它不是那么快)。我给 SO Question 写了一个答案,它以一种我认为可能也适用于这个应用程序的方式重定向标准输入。

下一步将围绕这些测试包装一个 GUI。个人目标是能够通过命令行运行测试,然后让 GUI 调用相同的命令行函数。出于这个原因,我倾向于转向重定向的标准输入。

系统/部署信息
所需的操作系统支持:Windows XP 和 Windows 7
理想的操作系统支持:Mac OS X 和 Linux
Python 版本:2.7

任何想法或cmets将不胜感激。

【问题讨论】:

  • 关于读取同一个文件 100k+ 次:我认为操作系统会读取一次文件,然后尝试将其保存在内存中,从而消除读取时间和磁盘磨损。
  • @bgbg:我没有这样看,但我倾向于同意你的评估。

标签: python unit-testing redirect stdin pickle


【解决方案1】:

我创建了针对第三方服务 (Zoho CRM) 进行测试的单元测试。要测试服务 API,您需要存储用户名和密码凭据。

由于这是一项高级服务,并且您正在创建开源软件,因此您自然不能将您的登录凭据硬编码到源代码本身。

所以我最终使用了环境变量——工作得很好:

示例如下:

https://github.com/miohtama/mfabrik.zoho/blob/master/mfabrik/zoho/tests.py

作为一个更大的问题,我认为试图强制执行单元测试模块来做一些原本不应该做的事情并不是一个好主意。也许您应该尝试编写自己的单元测试运行程序,它会在某处进行必要的准备(提取信息、存储结果)。

【讨论】:

  • 使用环境变量是个好主意。它们实际上解决了写入文件系统的问题并消除了 Python 版本依赖。
  • 呃,按回车很快:关于重写单元测试运行器,我不确定我是否完全同意该声明。我不认为这是一个问题,而是对一个经过广泛测试的模块的重用。此外,使用鼻子和其他插件的能力也变得非常有用。再次感谢有关环境变量的提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2010-10-09
  • 2019-01-30
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多