【问题标题】:How can I detect if an NUnit test is running from within TeamCity?如何检测 NUnit 测试是否在 TeamCity 中运行?
【发布时间】:2010-12-26 19:42:31
【问题描述】:

只有在 TeamCity 测试启动器中运行时,我才需要运行一些代码。最简单的检测方法是什么?

【问题讨论】:

  • 我知道有人会问 :) TeamCity 没有从 FixtureSetup (youtrack.jetbrains.net/issue/TW-10588) 捕获控制台输出。所以,我正在编写一个解决方法,它将从 FixtureSetup 捕获日志消息并在 Setup 上重写它们。此解决方法仅在 TeamCity 运行器中运行时相关。
  • 谁来启动 FixtureSetup? (一个 VS 项目,TeamCity 命令行)我的想法是尝试将输出转发到一个文件(或其他可执行文件)。
  • TeamCity 自带的 NUnit 插件。
  • 哦...生活有时很糟糕。您可以选择“命令行”运行程序,在那里运行单元测试,并将输出通过管道传输到某个文件。 nunit.exe -runomsethins somelibrary.dll > nunitoutput.txt
  • 相反,我可以将日志消息打印到文件中......但我希望它们出现在 TeamCity 的标准测试日志中。

标签: c# .net nunit teamcity


【解决方案1】:

检查是否定义了 TEAMCITY_VERSION 环境变量。

另一种方法是使用 NUnit 类别。

根据下面的评论,这段代码应该能够检查测试是否正在由 teamcity 运行:

private static bool IsOnTeamCity() 
{ 
    string environmentVariableValue = Environment.GetEnvironmentVariable("TEAMCITY_VERSION"); 
    if (!string.IsNullOrEmpty(environmentVariableValue)) 
    { 
         return true; 
    } 
    return false; 
} 

【讨论】:

  • 这是基于 Eugene 想法的工作代码: private static bool IsOnTeamCity() { string environmentVariableValue = Environment.GetEnvironmentVariable("TEAMCITY_VERSION"); if (!string.IsNullOrEmpty(environmentVariableValue)) { return true; } 返回假; }
  • 如此简化应该可以工作(?):return !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("TEAMCITY_VERSION")) 为什么要添加额外的if,它只会返回true/falseanyway?
【解决方案2】:

我基本上是用以下属性来做的。它通过调用程序集的代码库获取目录名称,如果它包含您的 TeamCity 构建代理目录的一部分,则它在 TeamCity 中运行。

public static bool IsTeamCity
{
    get
    {
        // the Assembly.GetExecutingAssembly().Location property gives funny results when using 
        // NUnit (where assemblies run from a temporary folder), so the use of CodeBase is preferred.
        string codeBase = Assembly.GetCallingAssembly().CodeBase;
        string assemblyFullPath = Uri.UnescapeDataString(new UriBuilder(codeBase).Path);
        string assemblyDirectory = Path.GetDirectoryName(assemblyFullPath);

        // a full TeamCity build directory would be e.g. 'D:\TeamCity\buildAgent\work\de796548775cea8e\build\Compile'
        return assemblyDirectory.ToLowerInvariant().Contains("buildagent\\work");
    }
}

【讨论】:

    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多