【问题标题】:How to update a performance counter to a remote pc?如何将性能计数器更新到远程电脑?
【发布时间】:2012-07-04 14:02:57
【问题描述】:

我创建了一些Load Tests。我所有的负载测试都由一个单元测试组成。 我还创建了一个LoadTest Plug-in 并将其分配给我所有的负载测试。 每个单元测试都会使用以下代码更新我在 LoadTest 插件中创建的一些自定义性能计数器(更多详细信息here)。

插件代码:

private void m_loadTest_LoadTestStarting(object sender, System.EventArgs e)
{
    CounterCreationDataCollection counters = new CounterCreationDataCollection();
    counters.Add(new CounterCreationData("CustomCoumter", "Custom Coumter description", PerformanceCounterType.AverageCount64));

    PerformanceCounterCategory.Create("CustomCounterCategory", "Custom Performance Counters", PerformanceCounterCategoryType.MultiInstance, counters);
}

单元测试代码:

[TestClass]
public class UnitTest1
{
    PerformanceCounter customCounter;

    [ClassInitialize]
    public static void ClassInitialize(TestContext TestContext)
    {
        // Create the instances of the counters for the current test
        customCounter= new PerformanceCounter("CustomCounterCategory", "CustomCoumter", "UnitTest1", false));
    }

    [TestMethod]
    public void TestMethod1()
    {
         // ... Testing
         customCounter.Incerement(time);
    }
}

由于插件在Test Controller 中运行,因此在控制器运行的电脑中创建了自定义计数器类别。现在我正在使用许多Test AgentsTest Rig 中运行我的负载测试。当单元测试在除测试控制器运行的计算机之外的其他计算机中执行时,计数器不会更新。我认为这是因为我的代码正在更新运行测试的 pc 中的计数器,而不是在控制器的 pc 中。

如何更新控制器电脑中的自定义计数器?我是否必须以不同的方式在单元测试中创建计数器的实例?

【问题讨论】:

    标签: c# visual-studio-2010 unit-testing load-testing performancecounter


    【解决方案1】:

    性能计数器通常用于监控在机器上本地运行的组件的性能。然后可以使用 perfmon 来监视该机器的性能计数器。根据您的描述,这正是正在发生的事情。

    因此,您必须监控代理机器上的性能计数器(当然是在安装后)才能获取有关计数器的数据。

    我假设这个计数器在某种程度上测量了测试需要多长时间。因为,如果您正在测量被测系统,那么性能计数器增量将被集成到被测产品代码中。

    我不知道有什么方法可以在远程机器上增加性能计数器,但这似乎违反了通常的模式。但是,有一些方法可以read remote performance counters(例如,来自代理机器)。我认为这在你的情况下是最好的。

    【讨论】:

    • 感谢您的回答。如果可能的话,我希望更新远程机器(控制器)上的计数器,这样我就可以轻松地看到计数器的总结果。否则,我必须更改我的实现并根据所有代理上的计数器实例自行计算总结果。
    • @Schaliasos 是的,不幸的是,我认为这是不可能的(至少通过 C# API)。但是,您可以远程读取数据,然后汇总每个代理的数据。
    【解决方案2】:

    我自己也遇到过这个问题,发现您可以在代码中执行的操作是设置调用已预先安装在机器上的远程可执行文件。由于它将在本地运行,因此可以修改性能计数器。

    您可以启动进程 psExec 或 WMI 代码。

    How to execute process on remote machine, in C#

    【讨论】:

      猜你喜欢
      • 2015-02-16
      • 2014-08-20
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 2016-02-25
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多