将数据传入Python单元测试,重定向STDIN和Pickle哪种更好?
简短问题
在Python的unittest测试案例中,获取数据的最佳方法是什么?
背景
我的项目使用Python的unittest模块来自动执行一系列测试,这些测试需要在许多相同类型的电路板上运行。到目前为止,这个模块非常适合这个用途;不过,每个测试案例需要知道一些特定的信息,以便存储到Django数据库中。
需要传入的数据包括序列号、测试电路板的人、日期以及其他类似的信息。值得注意的是,电路板的测试顺序是由人来选择的,比如从箱子里拿出电路板X,所以无法预测序列号。
想法
目前,我是通过pickle来传递测试案例所需的数据。这种方法在小规模测试中效果不错,但我担心在同一个文件中读取和写入超过10万次会导致数据损坏(而且速度也不快)。我在StackOverflow上写过一个回答,提到了一种重定向标准输入的方法,我觉得这也可能适用于这个应用。
下一步是为这些测试添加一个图形用户界面(GUI)。我个人的目标是能够通过命令行运行测试,然后让GUI调用相同的命令行功能。因此,我倾向于使用重定向的标准输入。
系统 / 部署信息
所需操作系统支持:Windows XP和Windows 7
理想操作系统支持:Mac OS X和Linux
Python版本:2.7
任何想法或评论都非常感谢。
1 个回答
我写了一些单元测试,用来测试一个第三方服务(Zoho CRM)。要测试这个服务的API,你需要保存用户名和密码。
因为这是一个付费服务,而你又在做开源软件,所以你不能把登录信息直接写在源代码里。
所以我选择使用环境变量,这样效果很好:
这里有个例子:
https://github.com/miohtama/mfabrik.zoho/blob/master/mfabrik/zoho/tests.py
我觉得更大的问题是,强迫单元测试模块去做它本来不应该做的事情,这样并不好。也许你可以尝试写一个自己的单元测试运行器,来做一些必要的准备工作(比如获取信息、存储结果)在某个地方。