Visual studio 2013 web性能测试将表单post参数数组绑定到数据源
在一个web性能测试中,我有一个POST请求,它接收一组用户及其详细信息。用户数不能是1到100+之间的任何值 通过web测试记录器,我捕获了一个包含3个用户的POST请求 发布请求Visual studio 2013 web性能测试将表单post参数数组绑定到数据源,visual-studio-2013,performance-testing,load-testing,Visual Studio 2013,Performance Testing,Load Testing,在一个web性能测试中,我有一个POST请求,它接收一组用户及其详细信息。用户数不能是1到100+之间的任何值 通过web测试记录器,我捕获了一个包含3个用户的POST请求 发布请求 {{WebServer1}}/test/mypage/users |- Form Post Parameters |- Users[0].Id=90001 |- Users[0].FirstName=Rice |- Users[0].LastName=Bran
{{WebServer1}}/test/mypage/users
|- Form Post Parameters
|- Users[0].Id=90001
|- Users[0].FirstName=Rice
|- Users[0].LastName=Bran
|- Users[1].Id=90002
|- Users[1].FirstName=Samantha
|- Users[1].LastName=Rock
|- Users[1].Id=90003
|- Users[1].FirstName=Jenny
|- Users[1].LastName=Bryan
{{WebServer1}}/test/mypage/users
|- Form Post Parameters
|- Users.Id=users.users#csv.Id
|- Users.FirstName=users.users#csv.FirstName
|- Users.LastName=users.users#csv.LastName
我需要发送100个用户的请求。一种方法是在请求中手动添加表单post参数,但以后的维护将很困难
我正在考虑使用一个像csv这样的包含用户详细信息的数据源,并以某种方式将它们绑定到post参数中
CSV(测试用户)
我试着把它们绑定成如下的post参数,但是没有用。[只需要一个数据行]
表单post参数与csv数据绑定
{{WebServer1}}/test/mypage/users
|- Form Post Parameters
|- Users[0].Id=90001
|- Users[0].FirstName=Rice
|- Users[0].LastName=Bran
|- Users[1].Id=90002
|- Users[1].FirstName=Samantha
|- Users[1].LastName=Rock
|- Users[1].Id=90003
|- Users[1].FirstName=Jenny
|- Users[1].LastName=Bryan
{{WebServer1}}/test/mypage/users
|- Form Post Parameters
|- Users.Id=users.users#csv.Id
|- Users.FirstName=users.users#csv.FirstName
|- Users.LastName=users.users#csv.LastName
有人知道从数据源创建form post参数数组的正确方法吗。我需要为此创建编码的web测试或一些插件吗?(我会尝试一下,但简单的绑定就好了)
编辑:2015年9月10日 我找不到任何解决办法。最终创建了一个编码的web测试,该测试将为每个数据行添加一个请求 在编码的web测试中添加了此部署项:
[DeploymentItem("Project\\Data\\users.csv")]
public class HelloCodedWebtest : WebTest
{
public HelloCodedWebtest()
{
.....
.....
// new Users().GetUsers() reads the csv and returns a list of user object, which i have stored in the context
this.Context.Add("Users", new Users().GetUsers());
}
public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
......
......
// Here for the request I have created the form post body from the list of users stored which was stored in the context.
var myUsers = (List<User>) this.Context["Users"];
foreach (var u in myUsers)
{
request2Body.FormPostParameters.Add("Users["+ myUsers.IndexOf(recipient) +"].Id", u.Id);
request2Body.FormPostParameters.Add("Users["+ myUsers.IndexOf(recipient) +"].FirstName", u.FirstName);
request2Body.FormPostParameters.Add("Users["+ myUsers.IndexOf(recipient) +"].LastName", u.LastName);
}
....
}
}
[DeploymentItem(“Project\\Data\\users.csv”)]
公共类HellocodeWebTest:WebTest
{
公共HellocodeWebTest()
{
.....
.....
//new Users().GetUsers()读取csv并返回一个用户对象列表,该列表已存储在上下文中
添加(“用户”,新用户().GetUsers());
}
公共重写IEnumerator GetRequestEnumerator()
{
......
......
//对于这个请求,我从存储在上下文中的用户列表中创建了表单post body。
var myUsers=(List)this.Context[“Users”];
foreach(myUsers中的VarU)
{
request2Body.FormPostParameters.Add(“Users[”+myUsers.IndexOf(recipient)+“].Id”,u.Id);
request2Body.FormPostParameters.Add(“Users[”+myUsers.IndexOf(recipient)+“].FirstName”,u.FirstName);
request2Body.FormPostParameters.Add(“用户[”+myUsers.IndexOf(收件人)+“].LastName”,u.LastName);
}
....
}
}
到目前为止,这一切都很好,但我更喜欢一个带有插件的普通web测试,而不是一个web测试。基于一个更新的问题,即如何使用插件,基于以下内容的测试应该会起作用。请注意,代码尚未编译或测试 在web测试的
PreWebTest
插件中,您可以像问题中一样读取CSV。下面的插件将用户数据保存到上下文中
public class WriteTestStatus : WebTestPlugin
{
public virtual void PreWebTest(object sender, PreWebTestEventArgs e)
{
e.WebTest.Context.Add("Users", new Users().GetUsers());
}
}
要利用数据并构建正确的表单post参数,请使用请求所附的以下PreRequest
插件
public class AddUserDetails : WebTestRequestPlugin
{
public override void PreRequest(object sender, PreRequestEventArgs e)
{
FormPostHttpBody formBody = e.Request.Body as FormPostHttpBody;
if (formBody == null)
{
e.WebTest.AddCommentToResult("formBody is null");
return;
}
var myUsers = (List<User>) e.WebTest.Context["Users"];
foreach (var u in myUsers)
{
formBody.FormPostParameters.Add("Users["+ myUsers.IndexOf(recipient) +"].Id", u.Id);
formBody.FormPostParameters.Add("Users["+ myUsers.IndexOf(recipient) +"].FirstName", u.FirstName);
formBody.FormPostParameters.Add("Users["+ myUsers.IndexOf(recipient) +"].LastName", u.LastName);
}
}
}
公共类AddUserDetails:WebTestRequestPlugin
{
公共覆盖无效预请求(对象发送方,预请求事件参数)
{
FormPostHttpBody formBody=e.Request.Body作为FormPostHttpBody;
if(formBody==null)
{
e、 WebTest.addCommentResult(“formBody为空”);
返回;
}
var myUsers=(List)e.WebTest.Context[“Users”];
foreach(myUsers中的VarU)
{
formBody.FormPostParameters.Add(“用户[”+myUsers.IndexOf(收件人)+“].Id”,u.Id);
formBody.FormPostParameters.Add(“Users[”+myUsers.IndexOf(recipient)+“].FirstName”,u.FirstName);
formBody.FormPostParameters.Add(“用户[”+myUsers.IndexOf(收件人)+“].LastName”,u.LastName);
}
}
}
上面使用了两个插件来匹配问题中显示的两种方法。如果一个请求只需要CSV中的用户数据,则可以避免将其保存到上下文变量中,并且放置在
var myUsers=…
的PreRequest
插件的分配中。您希望使用问题中显示的两行加页眉CSV文件生成什么请求?数据源字段是从测试上下文访问的,它们的值是用双大括号括起来访问的。因此,上面的一行应该显示为|-Users.FirstName={{{Users.Users#csv.FirstName}}
。通常,短语“它不起作用”应该伴随一条错误消息或对发生的情况的描述。您的问题有什么更新吗?如果你已经解决了这个问题,那么你可以写一个答案来指导其他有类似问题的人。如果你还没有解决这个问题,那么你可以将问题添加到更多细节中,以允许其他人帮助你。现在看起来很简单。谢谢我要试一试。