【问题标题】:How to configure app.config for TFS CI Test environment如何为 TFS CI 测试环境配置 app.config
【发布时间】:2015-08-31 22:14:06
【问题描述】:

我有一些需要连接到数据库的集成测试。在 app.config 中,我有一个指向服务器“。”的连接字符串。当我在工作站上的 VS 中运行测试时,测试运行良好,因为我有一个 SQL 服务器实例也在本地运行。

我们有一个 CI 构建和测试设置在 TFS 上运行,但在这种环境下,数据库不在同一台机器上,因此 app.config 中的连接字符串错误,测试无法连接。

如何配置 TFS CI 构建以更新 app.config 以指向不同的数据库?或者,我应该以其他方式解决这个问题吗?

【问题讨论】:

    标签: .net tfs continuous-integration


    【解决方案1】:

    当您通过 TFS 构建构建应用程序时,您可以使用 XML 转换来修改 app.config(这意味着您将拥有两种解决方案配置:一种用于使用 VS 进行本地构建,另一种用于 TFS 构建)或者您可以在构建时使用 pre-build 脚本来修改 app.config 连接字符串。

    【讨论】:

      【解决方案2】:

      您最好将集成测试移到测试环境中。最好是快速构建并且不需要应用程序的实例。

      如果您进行构建和单元测试,您可以在 Visual Studio 的发布管理中启动自动发布,可以将其配置为还运行集成和 UI 测试。

      http://nakedalm.com/create-release-management-pipeline-professional-developers/

      发布工具负责查看连接字符串等。

      【讨论】:

      • 嗨,这正是我正在做的事情。他们已经不需要应用程序的实例。它们作为 CI 配置的一部分在 TFS 构建服务器上运行。如果您可以详细说明您的陈述“发布工具负责查看连接字符串等等。”这可能会有所帮助,因为我相信这涵盖了我的实际问题 - 如何在 CI 测试运行期间设置特定的 ConnectionString。还是只能在部署到目标环境时更新连接字符串(而不是在测试运行期间)?
      • 单元测试应该在 TFS 构建期间运行,并且不需要实例。集成测试需要一个实例,并且应该在将应用程序部署到特定环境之后运行。应用程序部署由 TFS 发布管理处理,这使您可以为每个环境标记化 app.configs。
      【解决方案3】:

      为了解决这个问题我选择了使用VS插件slowcheetah(idea taken here)的XML转换路线

      使用此工具,您可以为每个环境(例如:dev、QA、PP)创建构建配置并生成 app.config 的 XML 转换。

      替换所需部分示例:

      <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
        <SqlUnitTesting xdt:Transform="Replace">
          <DataGeneration ClearDatabase="true" />
          <ExecutionContext Provider="System.Data.SqlClient" ConnectionString="Data Source=sqspsqlxx;Initial Catalog=IC_RMI_Result;Integrated Security=True;Pooling=False;MultipleActiveResultSets=False"
              CommandTimeout="30" />
          <PrivilegedContext Provider="System.Data.SqlClient" ConnectionString="Data Source=sqpsqlxx;Initial Catalog=IC_RMI_Result;Integrated Security=True;Pooling=False;MultipleActiveResultSets=False"
              CommandTimeout="30" />
        </SqlUnitTesting>
      

      对于 TFS 集成,可能有一种方法可以使用开箱即用的 nuget 恢复,但我只是将包添加到源代码控制中。

      在 teamp 构建队列(或构建定义中的 harcode)中,只需指定您想要定位的构建配置(dev、qa、PP)。

      (注意:我的团队构建代理使用 Windows 凭据,因此我确保该帐户在目标数据库上具有所需的权限)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-05
        • 2018-11-17
        • 2018-04-14
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2014-12-07
        相关资源
        最近更新 更多