如果集成测试需要密码,如何保证密码安全?

时间:2011-07-01 00:25:50

标签: c# integration-testing

在我们的组织中,我们有一个旧的遗留系统,需要一个纯文本密码。

从我们的.Net webservices拨打电话时,我们需要提供自己的用户名/密码,因此在编写集成测试时,我们会对凭据进行硬编码。

测试使用NUnit执行,只在我们的本地机器上执行。保护我们的密码的最佳方法是什么,而不将其暴露给检查源代码的其他开发人员?

3 个答案:

答案 0 :(得分:3)

您可以使用属性文件。每个开发人员在其计算机上都有自己的文件,但系统始终假定此属性文件将与变量一起存在。

当我们使用像Subversion这样的工具时,我们通常会有一个标题为“properties.txt.tmpl”的文件,它是属性文件的主要定义。然后,每个开发人员都负责将其复制到properties.txt,并确保对.txt.tmpl文件的任何更改都是对其本地副本进行的。

然后我们要做的就是将Subversion设置为忽略properties.txt文件,我们不会发生任何冲突。

答案 1 :(得分:2)

作为一个组织,您在机器上创建一个帐户,专门用于使用用户名 dev 和密码密码进行测试。如果你正在为这台机器编写集成测试,我假设它不是生产,所以没有人会介意虚拟账户......(我假设)。这就是我们在公司,开发/测试环境中的每个服务器,数据库,Web服务等都有 dev 帐户。

答案 2 :(得分:1)

就像Roly所说,你应该有一个单独的测试数据库,其中包含一组已知的数据。您的集成测试可以使用“测试”凭据集对其进行运行。

然后,您所要做的就是设置测试以便自己正确清理(如果他们创建记录,删除它们,重置状态标志等)。这具有明显的优势,可以让您安排集成测试作为更大系统测试的一部分运行,以及使测试不那么脆弱。

通常,针对本地数据库运行的集成测试将变得很脆弱,因为您不能依赖于从运行到运行的数据一致。如果为测试用例设置数据并针对它运行集成测试,则会破坏从生产备份还原的第二个数据。另一个开发人员不能保证拥有与您相同的测试数据,因此如果其他人正在处理您的代码并运行您的测试,则可能会中断。或者,如果你只选择一些不太可能改变的旧数据进行测试,则无法保证在某些时候不会。然后,bam,测试失败。

我有一个专门的测试服务器,其唯一目的是运行集成测试。重要的是确保数据始终一致,并且即使在出现故障的情况下,每个测试都会在正确的情况下进行清理。