C# 如何使用xml在MSTest中创建参数化性能测试?
我需要使用MSTest(LoadTests)和VisualStudio2010生成一些性能测试。我需要对restful服务进行测试并收集指标 我创建了一个集成测试,它请求一个URL(类似于C# 如何使用xml在MSTest中创建参数化性能测试?,c#,visual-studio-2010,mstest,load-testing,performance-testing,C#,Visual Studio 2010,Mstest,Load Testing,Performance Testing,我需要使用MSTest(LoadTests)和VisualStudio2010生成一些性能测试。我需要对restful服务进行测试并收集指标 我创建了一个集成测试,它请求一个URL(类似于restful的东西)http://hostname/get/201212或任何ID)。之后,我创建了一个负载测试,并设法执行数千次集成测试,并调查响应时间和服务器指标(CPU负载、内存等) 现在我需要执行一个类似的场景,但是每个测试都需要从包含数千个数据的给定XML中读取不同的ID。这个想法是没有任何缓存 到
restful的东西)http://hostname/get/201212
或任何ID)。之后,我创建了一个负载测试,并设法执行数千次集成测试,并调查响应时间和服务器指标(CPU负载、内存等)
现在我需要执行一个类似的场景,但是每个测试都需要从包含数千个数据的给定XML中读取不同的ID。这个想法是没有任何缓存
到目前为止我尝试/思考了什么?
DataInput
),为每个测试提供不同的数据DataInput
正在从scv文件读取数据,并具有提供所需数据的静态方法(例如getNextUserName)李>
[classialize]
中,我创建了一个静态DataInput
对象[TestInitialize]
中,我通过从数据输入获取数据来创建对rest服务的实际请求
这样,所有的测试都有不同的数据。我不喜欢回答我自己的问题,但我把这个放在这里,供将来有同样问题的人参考 为什么其他第三个选项错误 第三个选项的问题是,在ID列表为1000的1000次迭代的LoadTest中,LoadTest使用第一个ID运行了1000次,而不是使用每个ID运行1000次。我使用了某种nosql探查器来证明这一点 使用以下解决方案,如果我的Loadtest有1000次迭代,并且我的csv列表有1000个ID,那么将执行1000个测试,每个测试都有一个ID。如果您的负载测试有更多的迭代,比如说2000次,那么在负载测试中,1001将从csv列表的开头重新开始 我的解决方案 注意:此解决方案使用csv文件。它可以很容易地适应使用其他不同的数据源,如xml、excel、SQL server中的表等 实现这一点的正确选项是使用DataSource属性创建测试。例如,您创建了一个csv文件,其中包含要在测试中使用的ID。我的csv文件示例:
ID
1003002-20121211120000
1004071-20121211120000
您需要在测试中添加一个DataContext:
private TestContext testContextInstance;
public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}
最后,您的测试应该如下所示:
[TestMethod,DeploymentItem("DataOrigin\\list.csv"), DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\list.csv", "list#csv", DataAccessMethod.Sequential)]
public void TestScenario_1_DATADRIVEN()
{
// PREPARATION
string ID = TestContext.DataRow["ID"].ToString();
string querystring = CreateQueryWithErrorDebug(ID);
// EXECUTION
string result = RunXCCQuery(querystring);
// ASSERTS
Assert.IsTrue(result.Length > 0);
Assert.IsTrue(result.Contains(ID));
}
DeploymentItem属性复制csv文件数据源属性读取它并对其进行迭代
此行是测试从TestContext读取数据的地方
string ID = TestContext.DataRow["ID"].ToString();
在CSV文件中有n个ID将导致测试运行n次,每个ID运行一次。
我在调查中发现了一些有用的链接:
LoadTest
数据库。看看这个。这正是发生在我身上的事。。。但是我以前在没有DB的情况下工作,没有问题。我将尝试设置一个数据库,以防万一…我已经在我自己的测试和第三个解决方案不工作。每次初始化测试时,我都会使用第一个数据行运行数千次。解决方案包括数据驱动的MSTests(现在正在调查),我认为您的解决方案不是负载测试。使用这种方法,您的1000个测试将一个接一个地运行,而不是同时运行。我说得对吗?你说得对,这是一个性能测试,因为我一个接一个地调用测试。首先,我创建了一个测试,从nosql DB中检索到一个文档,并使用LoadTesting调用它数千次。后来,为了避免缓存命中,我不得不做同样的操作,但每次都使用不同的ID,这样文档就不会重复两次。顺便说一句,实际数字不是1000,而是150万个请求:)的目的是让虚拟(并发)用户对您的系统执行请求。你的测试结果如何?通过一个接一个地发送150万个请求,您的系统未处于加载状态。您的服务器必须同时处理一个请求。我之所以使用负载测试这个术语,是因为我使用的是Visual Studio 2010 Ultimate的负载测试功能。我编辑了我的问题以反映这一点。