[英]Is there an alternative for using a .testsettings file with TestCases and Microsoft Test Manager?
我们这里有一个特殊情况,这导致我们使用TFS 2012在新创建的实验室环境中自动测试失败。
我们总是有很多测试DAL代码的“单元”测试,这些代码又使用企业库数据应用程序块对数据库执行操作。 该设置是在几年前进行的,以使我们的客户可以选择SqlServer或Oracle数据库以及我们的产品,从而利用DatabaseFactory类以及entlib.data中所有支持的通用接口和类。 我之所以这样说“单元”,是因为它们实际上不是纯粹的单元测试,而是集成的,因为它们需要一个真正的数据库才能工作。
为了针对两个数据库测试相同的SQL代码,我们在TFS项目分支的“资源”文件夹中维护两个单独的.config文件,它们指向我们的测试数据库:
Resources\\SqlServer\\ConnectionStrings.config
(特定于SqlServer的连接字符串) Resources\\Oracle\\ConnectionStrings.config
(Oracle特定的连接字符串) 在根Resources文件夹中,有两个随附的.testsettings文件,它们负责部署特定于每个数据库的文件:
Resources\\SqlServer.testsettings
(用于部署SqlServer \\ ConnectionStrings.config文件) Resources\\Oracle.testsettings
(用于部署Oracle \\ ConnectionStrings.config文件) 由于整个结构都在源代码控制中,因此测试设置能够使用相对路径查找.config文件,从而使我们能够测试所有内容,而无需手动设置参数。 在devs机器上,我们总是在运行测试时选择SqlServer.testsettings
文件,这样,在签入代码之前,无需安装整个oracle环境来验证其更改。 验证的Oracle端始终发生在我们的构建过程中,在该过程中,我们实际上对每种方法进行了两次测试:首先使用开发人员使用的相同SqlServer.testsettings
,然后使用Oracle.testsettings
。
这样,我们可以设置测试程序集的app.configs来将connectionStrings节点重定向到外部文件,如下所示:
<configuration>
<connectionStrings configSource="ConnectionStrings.config"/>
...
运行测试时,mstest会根据用来启动运行的.testsettings将足够的ConnectionStrings.config文件复制到测试的工作文件夹中。
直到今天,它一直运行良好,直到我发现通过Microsoft测试管理器启动的测试都忽略了Visual Studio .testsettings文件 。 现在,我试图在我们的实验室环境中运行这些相同的测试,但是未部署ConnectionStrings.config文件(可以理解),并且测试失败。
在不使用.testsettings文件的情况下,如何实现这一目标? 在尝试在新的x64构建服务器中正确设置oracle之后,我们在构建定义中禁用了Oracle测试。 现在,我们开始设置实验室环境,我们考虑使用Oracle在其中的一台计算机上配置了整个系统,从而使我们能够再次使用特定于oracle的连接字符串运行这些“单元测试”以验证查询。 同时,我们希望继续使用SqlServer在本地以及在构建服务器上测试所有内容。
我认为在这种情况下无法使用[DeploymentItem]
,因为它用于静态文件,而不是像我们当前设置那样的不可选择的动态文件。
我们可以在MTM / Lab Env中与TestCases一起使用的.testsettings部署过程是否等效? 在我们的TestPlan的Properties
选项卡上,我可以看到Automated Runs -> Test Settings
Runs- Automated Runs -> Test Settings
选项,但这似乎只允许通过指定绝对路径进行部署(这将在目标计算机上实际解析)。 有没有一种方法可以在那里指定相对路径,指向我们在TFS上签入的ConnectionStrings.config文件? 也许我还缺少另一个选择,也许使用了多个构建配置?
通过进入配置管理器并为活动解决方案配置下的“ 新建” ,为每种服务器类型创建单独的构建配置 。 编辑项目文件,然后执行以下操作:
<PropertyGroup Condition="'$(Configuration)' == 'Oracle'">
<appConfig>App.Oracle.Config</AppConfig>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'SQL'">
<appConfig>App.SQL.Config</AppConfig>
</PropertyGroup>
然后,确保每个配置文件中都有正确的连接字符串。 然后,您可以配置TFS以使用那些构建配置进行构建。
有关使用PropertyGroup和Condition , MSBuild配置和MSBuild项目属性的更多信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.