我需要从负载测试插件中获取负载测试的测试迭代次数,其中我有一个LoadTest
对象的实例。我搜索了LoadTest
对象的属性,与通常用于配置负载测试的treeview编辑器相比,感觉有很多缺失。
我已经将测试迭代次数再次定义为Context参数并将其传递给我的Web测试,但这感觉就像是一个黑客,因为我正在复制数据。
class MyLoadTestPlugin : ILoadTestPlugin
{
private LoadTest loadTest;
public void Initialize(LoadTest test)
{
loadTest = test;
loadTest.TestStarting += (_, e) =>
{
// Get # of Test Iterations in load test here,
// "loadTest" object does not have nearly as
// many properties as it should, compared to
// the tree view editor.
};
}
}
答案 0 :(得分:2)
使用LoadTestPlugin读取.loadtest文件,该文件是XML文件。下面是一个读取.loadtest文件中TotalIterations的示例。
using System;
using Microsoft.VisualStudio.TestTools.LoadTesting;
using System.IO;
using System.Xml;
namespace LoadTest
{
public class LoadTestPluginImpl : ILoadTestPlugin
{
LoadTest mLoadTest;
static int TotalIterations;
public void Initialize(LoadTest loadTest)
{
mLoadTest = loadTest;
//connect to the TestStarting event.
mLoadTest.TestStarting += new EventHandler<TestStartingEventArgs>(mLoadTest_TestStarting);
ReadTestConfig();
}
void mLoadTest_TestStarting(object sender, TestStartingEventArgs e)
{
//When the test starts, copy the load test context parameters to
//the test context parameters
foreach (string key in mLoadTest.Context.Keys)
{
e.TestContextProperties.Add(key, mLoadTest.Context[key]);
}
//add the CurrentTestIteration to the TestContext
e.TestContextProperties.Add("TestIterationNumber", e.TestIterationNumber);
//add the TotalIterations to the TestContext and access from the Unit Test.
e.TestContextProperties.Add("TotalIterations", TotalIterations);
}
void ReadTestConfig()
{
string filePath = Path.Combine(Environment.CurrentDirectory, mLoadTest.Name + ".loadtest");
if (File.Exists(filePath))
{
string runSettings = mLoadTest.RunSettings.Name;
XmlDocument xdoc = new XmlDocument();
xdoc.Load(filePath);
XmlElement root = xdoc.DocumentElement;
string xmlNameSpace = root.GetAttribute("xmlns");
XmlNamespaceManager xmlMgr = new XmlNamespaceManager(xdoc.NameTable);
if (!string.IsNullOrWhiteSpace(xmlNameSpace))
{
xmlMgr.AddNamespace("lt", xmlNameSpace);
}
var nodeRunSettings = xdoc.SelectSingleNode(string.Format("//lt:LoadTest/lt:RunConfigurations/lt:RunConfiguration[@Name='{0}']", runSettings), xmlMgr);
//var nodeRunSettings = xdoc.SelectSingleNode(string.Format("//lt:LoadTest", runSettings), xmlMgr);
if (nodeRunSettings != null)
{
TotalIterations = Convert.ToInt32(nodeRunSettings.Attributes["TestIterations"].Value);
}
}
}
}
}
同样,您可以阅读其他值。
答案 1 :(得分:1)
Web测试具有webTest.Context.WebTestIteration
中的当前迭代编号(以及名为$WebTestIteration
的上下文参数)。
LoadTest可以访问TestStartingEventArgs
对象中的当前迭代编号:
loadTest.TestStarting += ( (sender, e) =>
{
int iteration = e.TestIterationNumber;
};
为了向自己证明这些值是相同的,并且没有意外的行为,比如数字在不同的场景中重复使用,我(编辑:重新)编写了这些插件,并检查出来
(感谢@AdrianHHH指出前面的代码没有完成)
public class LoadTestIteration : ILoadTestPlugin
{
List<int> usedTestIterationNumbers = new List<int>();
public void Initialize(LoadTest loadTest)
{
loadTest.TestStarting += (sender, e) =>
{
e.TestContextProperties["$LoadTest.TestIterationNumber"] = e.TestIterationNumber;
System.Diagnostics.Debug.Assert(!usedTestIterationNumbers.Contains(e.TestIterationNumber), "Duplicate LoadTest TestIterationNumber: " + e.TestIterationNumber);
usedTestIterationNumbers.Add(e.TestIterationNumber);
};
}
}
public class TestWebTestIteration : WebTestPlugin
{
public override void PreWebTest(object sender, PreWebTestEventArgs e)
{
int lti = (int)e.WebTest.Context["$LoadTest.TestIterationNumber"];
int wti = e.WebTest.Context.WebTestIteration;
System.Diagnostics.Debug.Assert(lti == wti, String.Format("$LoadTestIteration {0} differs from $WebTestIteration {1}", lti, wti));
}
}