利用Spec Flow编写自动化验收测试

发表于:2014-1-27 11:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  接下来,我们需要给每个步骤创建一个方法。该方法将告诉Spec Flow如何执行每一步骤。现在我们就只为第一个步骤进行具体步骤定义:“Given I am at the ‘Login’page”。
[Given("I am at the 'Login' page")
public void GivenIAmAtTheLoginPage()
{
// TODO
}
  请注意到该方法带有一个属性。该属性将告诉Spec Flow此方法所指代的步骤,每个步骤都有相应的属性。任何一个feature文件中的任意一个以关键字“Given”开始的步骤,紧接着的文本是“I am at the ‘Login’page”的都将会与该方法配对。
  现在我们需要为该步骤定义编写具体执行。我们需要告诉WatiN启动浏览器,然后访问程序登录页面。但是在这之前我们需要创建一个浏览器实例。我们也要确保scenario中剩余步骤也将使用该浏览器实例。为了保证scenario中所有步骤使用的是同一个浏览器实例,我们需要为浏览器对象创建一个实例,并将其保存于ScenarioContext字典中。ScenarioContext字典可以用于保存Scenario执行过程中的数据。我们还要创建一个名为WebBrowser的helper类,该类将保存scenario执行时的浏览器实例。
using TechTalk.SpecFlow;
using WatiN.Core;
static class WebBrowser
{
public static IE Current
{
get
{
if(!ScenarioContext.Current.ContainsKey("browser"))
ScenarioContext.Current["browser"] = new IE();
return ScenarioContext.Current["browser"] as IE;
}
}
}
  以上的Helper类含有Current属性,它将获取现有浏览器用于目前正在执行的scenario。如果它没在ScenarioContext字典中找到浏览器实例,它将创建一个新浏览器实例,然后将其添加到字典中。这样存在于字典中的浏览器实例又回来了。
  最后,我们终于可以回去实现我们的步骤定义了。在示例应用中,登录页面存在于http://localhost:9876/authentication/login。我们将通过让当前Scenario浏览器实例定位到该URL以执行我们的步骤定义。我们可以通过浏览器实例回到主页,然后点击登录链接来执行我们的步骤定义,而这在现在看来是最简单的。然后,我们将重构我们的步骤定义,这样我们只要有一个步骤定义就能解决应用中所有页面跳转问题。
[Given("I am at the 'Login' page")
public void GivenIAmAtTheLoginPage()
{
// Make sure to add the namespace the WebBrowser class is inside
WebBrowser.Current.GoTo("http://localhost:9876/authentication/login");
}

  结尾
  现在我们已经为尝试执行验收测试做好准备了。虽然我们还没完成所有的步骤定义,但是我们想在进一步深入前,确保各方面都已经正确衔接上。在执行测试之前,我们要保证所有加到工程中的引用都已设置成了Copy Local。如果是通过NuGet添加的WatiN,Interop.SHDocVw DLL则默认将它的Embed Interop属性设置成True。这时,需要确保将Embed Interop属性设置成false,这样才能将它的Copy Local属性设置成True。
  同时,我们也需要在单线程的Apartment State中运%
33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号