集成测试需要密码时,如何确保密码的安全
本文关键字:密码 确保 安全 集成测试 何确保 | 更新日期: 2023-09-27 18:00:44
在我们的组织中,我们有一个旧的遗留系统,需要纯文本密码。
当从.Net Web服务进行调用时,我们需要提供自己的用户名/密码,因此在编写集成测试时,我们对凭据进行硬编码。
测试是使用NUnit执行的,并且只在我们的本地机器上执行。在不将密码暴露给其他签出源代码的开发人员的情况下,保护密码的最佳方法是什么?
您可以使用属性文件。每个开发人员在自己的机器上都有自己的文件,但系统总是假设这个属性文件将与变量一起存在。
当我们使用像Subversion这样的工具时,我们通常会有一个名为"properties.txt.tmpl"的文件,它是属性文件的主定义。然后,每个开发人员都将负责将其复制到properties.txt中,并确保对.txt.tmpl文件的任何更改都是对其本地副本进行的。
然后,我们所要做的就是将Subversion设置为忽略properties.txt文件,这样就不会发生任何冲突。
作为一个组织,您可以在机器上创建一个帐户,专门用于使用用户名dev和密码password进行测试。如果你正在针对这台机器编写集成测试,我假设它不是生产版,所以没有人会介意一个虚拟帐户。。。(我猜想)。这就是我们公司的做法,开发/测试环境中的每个服务器、数据库、web服务等都有一个dev帐户。
正如Roly所说,您应该有一个单独的测试数据库,其中包含一组已知的数据。您的集成测试可以使用一组"测试"凭据针对它运行。
然后,您所要做的就是将测试设置为在它们之后正确清理(如果它们创建记录、删除记录、重置状态标志等)。这有一个明显的优势,可以让您将集成测试安排为作为更大系统测试的一部分运行,并降低测试的脆弱性。
通常,针对本地数据库运行的集成测试会很脆弱,因为您不能依赖于数据在不同运行之间的一致性。如果您为测试用例设置了数据,并对其运行集成测试,那么从生产备份中恢复的那一秒就会中断。另一个开发人员不能保证拥有与你相同的测试数据,所以如果其他人正在处理你的代码并运行你的测试,它可能会崩溃。或者,如果你只是选择一些不太可能更改的旧数据进行测试,就不能保证它在某个时候不会更改。然后,砰,考试不及格。
我很幸运拥有一个专门的测试服务器,它的唯一目的是运行集成测试。重要的部分是确保数据始终一致,并且即使在失败的情况下,每个测试都会在自身之后正确清理。