62,270
社区成员
发帖
与我相关
我的任务
分享protected void Page_Load(object sender, EventArgs e)
{
if (Comm.Common.IsTestMode)
test();
//......进行正常的 Page_Load 操作
}
这样就驱动了测试。然后写 private void test()
{
if (Step == 1)
{
this.PreRenderComplete += (s, arg) =>
{
Debug.Assert(this.TextBox2.TextMode == TextBoxMode.Password);
var scp = new StringBuilder();
scp.AppendLine(string.Format("document.getElementById('{0}').value='{1}';", this.TextBox1.ClientID, "1234"));
scp.AppendLine(string.Format("document.getElementById('{0}').value='{1}';", this.TextBox2.ClientID, "23456"));
scp.AppendLine(this.ClientScript.GetPostBackEventReference(this.Button1, string.Empty));
ScriptManager.RegisterStartupScript(this, this.GetType(), "test1", scp.ToString(), true);
Step = 2;
};
}
else if (Step == 2)
{
this.LoadComplete += (s, arg) =>
{
Debug.Assert(this.TextBox2.Text == "23456");
};
this.PreRenderComplete += (s, arg) =>
{
var name = (string)Session["loginName"];
Debug.Assert(name == "1234");
};
this.登陆成功 += () => //验证此事件确实抛出,然后才继续进行测试
{
//执行进一步的测试用例,使用 ScriptManager.RegisterStartupScript 语句输出模拟用户操作的脚本
Step = 3;
};
}
}
private int Step
{
get
{
var x = ViewState["TestStep"];
if (x == null)
return 1;
else
return (int)x;
}
set
{
ViewState["TestStep"] = value;
}
}
这样这个页面就会自动模拟用户操作,进行页面回发,直到把每一步的测试用例走完。
进一步地,你其实可以把这一个 test 过程拆分成几个独立的test类或者test过程单独独立出去,使用一个不到100行的“测试引擎”代码来自动管理这些测试用例(写在 Global.asax中即可),它自动反射到每一个 Page 的测试用例分别都有几步,然后在 Page 执行之前先执行测试用例(也就是说上面的Page_Load 中的 if 语句),然后当一个Page的测试步骤走到最后一步之后,它能够随机取出下一个待测试的页面的 url 来开始测试。
比如说你的 asp.net 应用有50个页面的300个测试用例。你中午去吃饭的时候,就可以开始测试,然后你的电脑就自动开始模拟用户的各种操作了。然后吃饭回来,你可以看看日志,会看到50个页面一共被测试了800遍(每一次都有随机顺序选择下一个测试页面),没有进入vs调试状态,也没有“停机”,还在继续测试着。这时候就说明测试通过了,可以停止测试了。
这里只是集中在最基本的入门概念上去说的。技术不重要,重要地是你能够实践。