VSTS For Testers读书笔记(12)
六、创建编码的WebTest
•通常,通过将现有的已记录 Web 测试转换为编码的 Web 测试来创建编码的 Web 测试。记录的 Web 测试以“Web 测试编辑器”中可见的请求树开头。编码的 Web 测试是一个生成一系列 WebTestRequest 的 .NET 类,可以使用 C# 或 Visual Basic 编写。可以创建编码的 Web 测试,但推荐做法是将记录的 Web 测试转换为编码的 Web 测试。
[DataSource("DataSource1", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"E:\\My Documents\\Visual Studio 2005\\" +
"Test.mdb\";Persist Security Info=False", Microsoft.VisualStudio.TestTools.WebTesting.DataBindingAccessMethod.Sequential, "Customer")]
public class WebTest1Coded : WebTest
{
•通常,通过将现有的已记录 Web 测试转换为编码的 Web 测试来创建编码的 Web 测试。记录的 Web 测试以“Web 测试编辑器”中可见的请求树开头。编码的 Web 测试是一个生成一系列 WebTestRequest 的 .NET 类,可以使用 C# 或 Visual Basic 编写。可以创建编码的 Web 测试,但推荐做法是将记录的 Web 测试转换为编码的 Web 测试。
•将记录的 Web 测试转换为编码的 Web 测试之后,可以像编辑任何其他源代码一样编辑该代码。此外,还可以添加循环和分支结构,动态更改测试中的请求数,以及动态生成测试命中的 URL 集。

生成的代码如下:
namespace PersonalWebsiteTest
{
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.VisualStudio.TestTools.WebTesting;
using Microsoft.VisualStudio.TestTools.WebTesting.Rules;

生成的代码如下:
namespace PersonalWebsiteTest
{
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.VisualStudio.TestTools.WebTesting;
using Microsoft.VisualStudio.TestTools.WebTesting.Rules;
[DataSource("DataSource1", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"E:\\My Documents\\Visual Studio 2005\\" +
"Test.mdb\";Persist Security Info=False", Microsoft.VisualStudio.TestTools.WebTesting.DataBindingAccessMethod.Sequential, "Customer")]
public class WebTest1Coded : WebTest
{
public WebTest1Coded()
{
this.PreAuthenticate = true;
}
{
this.PreAuthenticate = true;
}
public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
this.BeginTransaction("Login");
//Web请求1
{
this.BeginTransaction("Login");
//Web请求1
WebTestRequest request1 = new WebTestRequest("http://localhost:40022/Personal%20Website/");
ExtractHiddenFields rule1 = new ExtractHiddenFields();
rule1.ContextParameterName = "1";
request1.ExtractValues += new EventHandler<ExtractionEventArgs>(rule1.Extract);
yield return request1;
ExtractHiddenFields rule1 = new ExtractHiddenFields();
rule1.ContextParameterName = "1";
request1.ExtractValues += new EventHandler<ExtractionEventArgs>(rule1.Extract);
yield return request1;
WebTestRequest request2 = new WebTestRequest("http://localhost:40022/Personal%20Website/default.aspx");
request2.ThinkTime = 14;
request2.Method = "POST";
FormPostHttpBody request2Body = new FormPostHttpBody();
request2Body.FormPostParameters.Add("__EVENTTARGET", "");
request2Body.FormPostParameters.Add("__EVENTARGUMENT", "");
request2Body.FormPostParameters.Add("__VIEWSTATE", this.Context["$HIDDEN1.__VIEWSTATE"].ToString());
request2Body.FormPostParameters.Add("ctl00$Main$LoginArea$Login1$UserName", "oscarxie");
request2Body.FormPostParameters.Add("ctl00$Main$LoginArea$Login1$Password", "hae867@!");
request2Body.FormPostParameters.Add("__EVENTVALIDATION", this.Context["$HIDDEN1.__EVENTVALIDATION"].ToString());
request2Body.FormPostParameters.Add("ctl00$Main$LoginArea$Login1$LoginButton.x", "110");
request2Body.FormPostParameters.Add("ctl00$Main$LoginArea$Login1$LoginButton.y", "8");
request2.Body = request2Body;
if ((this.Context.ValidationLevel >= Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.High))
{
ValidationRuleFindText rule2 = new ValidationRuleFindText();
rule2.FindText = "oscarxie";
rule2.IgnoreCase = false;
rule2.UseRegularExpression = false;
rule2.PassIfTextFound = true;
request2.ValidateResponse += new EventHandler<ValidationEventArgs>(rule2.Validate);
}
yield return request2;
request2.ThinkTime = 14;
request2.Method = "POST";
FormPostHttpBody request2Body = new FormPostHttpBody();
request2Body.FormPostParameters.Add("__EVENTTARGET", "");
request2Body.FormPostParameters.Add("__EVENTARGUMENT", "");
request2Body.FormPostParameters.Add("__VIEWSTATE", this.Context["$HIDDEN1.__VIEWSTATE"].ToString());
request2Body.FormPostParameters.Add("ctl00$Main$LoginArea$Login1$UserName", "oscarxie");
request2Body.FormPostParameters.Add("ctl00$Main$LoginArea$Login1$Password", "hae867@!");
request2Body.FormPostParameters.Add("__EVENTVALIDATION", this.Context["$HIDDEN1.__EVENTVALIDATION"].ToString());
request2Body.FormPostParameters.Add("ctl00$Main$LoginArea$Login1$LoginButton.x", "110");
request2Body.FormPostParameters.Add("ctl00$Main$LoginArea$Login1$LoginButton.y", "8");
request2.Body = request2Body;
if ((this.Context.ValidationLevel >= Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.High))
{
ValidationRuleFindText rule2 = new ValidationRuleFindText();
rule2.FindText = "oscarxie";
rule2.IgnoreCase = false;
rule2.UseRegularExpression = false;
rule2.PassIfTextFound = true;
request2.ValidateResponse += new EventHandler<ValidationEventArgs>(rule2.Validate);
}
yield return request2;
WebTestRequest request3 = new WebTestRequest("http://localhost:40022/Personal%20Website/Resume.aspx");
request3.ThinkTime = 3;
yield return request3;
request3.ThinkTime = 3;
yield return request3;
WebTestRequest request4 = new WebTestRequest("http://localhost:40022/Personal%20Website/Links.aspx");
request4.ThinkTime = 2;
yield return request4;
request4.ThinkTime = 2;
yield return request4;
WebTestRequest request5 = new WebTestRequest("http://localhost:40022/Personal%20Website/Albums.aspx");
request5.ThinkTime = 3;
yield return request5;
request5.ThinkTime = 3;
yield return request5;
WebTestRequest request6 = new WebTestRequest("http://localhost:40022/Personal%20Website/Default.aspx");
request6.ThinkTime = 1;
ExtractHiddenFields rule3 = new ExtractHiddenFields();
rule3.ContextParameterName = "1";
request6.ExtractValues += new EventHandler<ExtractionEventArgs>(rule3.Extract);
yield return request6;
request6.ThinkTime = 1;
ExtractHiddenFields rule3 = new ExtractHiddenFields();
rule3.ContextParameterName = "1";
request6.ExtractValues += new EventHandler<ExtractionEventArgs>(rule3.Extract);
yield return request6;
WebTestRequest request7 = new WebTestRequest("http://localhost:40022/Personal%20Website/Default.aspx");
request7.Method = "POST";
FormPostHttpBody request7Body = new FormPostHttpBody();
request7Body.FormPostParameters.Add("__EVENTTARGET", "ctl00$LoginStatus1$ctl00");
request7Body.FormPostParameters.Add("__EVENTARGUMENT", "");
request7Body.FormPostParameters.Add("__VIEWSTATE", this.Context["$HIDDEN1.__VIEWSTATE"].ToString());
request7Body.FormPostParameters.Add("__EVENTVALIDATION", this.Context["$HIDDEN1.__EVENTVALIDATION"].ToString());
request7.Body = request7Body;
yield return request7;
request7.Method = "POST";
FormPostHttpBody request7Body = new FormPostHttpBody();
request7Body.FormPostParameters.Add("__EVENTTARGET", "ctl00$LoginStatus1$ctl00");
request7Body.FormPostParameters.Add("__EVENTARGUMENT", "");
request7Body.FormPostParameters.Add("__VIEWSTATE", this.Context["$HIDDEN1.__VIEWSTATE"].ToString());
request7Body.FormPostParameters.Add("__EVENTVALIDATION", this.Context["$HIDDEN1.__EVENTVALIDATION"].ToString());
request7.Body = request7Body;
yield return request7;
