1

我創建了一些Load Tests。我所有的負載測試都由一個單元測試組成。 我也創建了一個LoadTest Plug-in並將其分配給我所有的負載測試。 每個單元測試使用以下代碼更新我在LoadTest插件中創建的一些自定義性能計數器(更多詳細信息here)。如何將性能計數器更新到遠程PC?

插件代碼:

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運行在PC控制器運行的位置創建自定義計數器類別。現在,我使用許多Test AgentsTest Rig中運行我的負載測試。當單元測試在除測試控制器正在運行的計算機上執行的計算機上執行時,計數器不會更新。我認爲這是因爲用我的代碼,我正在更新測試運行的pc中的計數器,而不是在控制器的pc中。

如何更新控制器電腦中的自定義計數器?我是否必須以不同的方式在單元測試中創建計數器的實例?

回答

2

性能計數器通常用於監視在本機上運行的組件的性能。然後可以使用perfmon來監視該機器的性能計數器。從你所描述的,這正是發生的事情。

因此,您必須監視代理計算機上的性能計數器(當然,在安裝它之後)才能獲取有關計數器的數據。

我假設這個計數器在某種程度上衡量了測試的持續時間。因爲,如果您正在測試被測系統,則性能計數器增量將被集成到正在測試的生產代碼中。

我不知道有任何方法來增加遠程計算機上的性能計數器,但這似乎與通常的模式不符。但是,有一些方法可以read remote performance counters(例如,代理機器)。我認爲這在你的情況下是最好的。

+0

感謝您的回答。如果可能,我希望更新遠程計算機(控制器)上的計數器,以便我可以輕鬆查看計數器的總計結果。否則,我必須更改我的實現並根據所有代理上的計數器實例自行計算總計結果。 – Schaliasos

+0

@Schaliasos是的,不幸的是我不認爲這是可能的(至少通過C#API)。但是,您可以遠程閱讀,然後彙總每個代理商的數字。 –

0

我自己遇到了這個問題,發現您可以在代碼中執行的操作是調用已預先安裝在機器上的遠程可執行文件。由於它將在本地運行,因此它可以修改性能計數器。

您可以啓動進程psExec或WMI代碼。

How to execute process on remote machine, in C#