自动测试网页(并通过DSL生成用例)

时间:2010-07-06 09:44:15

标签: testing automated-tests dsl web-testing

我的目标是:

  • 我们的客户可以生成新的网络测试。
  • 我们的持续集成服务器进行测试环境部署;它应该对它执行测试
  • 测试也可以针对其他环境进行。

(最终验收测试应该由客户进行,测试字体等,但这对我们的测试环境来说是一个很好的预验收检查。客户可以专注于现在的其他事情。)

通常某些属性(如文本字段ID)已经更改或者其他内容,测试将在几周后中断。似乎记录的测试经常发生故障,所以最好是轻松记录新测试,而不是尝试维护和修改旧测试。

现在,我发现了一种全新的方法。也许录音不是正确的方法。 如果我们的客户可以用人类可读的自己的语言制作用例,机器可以理解并编译成网络记录(使用域特定语言,DSL)。 这不是科幻,它已经制作完,所以请继续阅读。 : - )

我尝试使用这些自动Web测试框架:

  • Visual Studio Web测试(客户无法执行)
  • Selenium(仅适用于Firefox,我们的客户拥有IE)
  • WatiN(Watir的.NET版本,记录器似乎有点儿错误)
  • HP Quick Test Pro(不太容易进行新测试)

这些都没有提供我真正需要的......但是Selenium是最接近的。

我们的客户讲芬兰语,因此在软件项目开始时,在规范阶段,用户编写一个用例如下:

  • Avaa“OmaLomake”
  • Syötä“Tuomas”kohtaan“nimi”
  • Paina“Seuraava”

翻译:

  • 打开“MyForm”
  • 将“Tuomas”插入字段“name”
  • 按“下一步”

现在......这是一个人类可读的用例,但它也可以编译为自动Web验收测试。打开,插入,按字段,按键是关键字,其他是值。

什么样的DSL工具对此有好处?

微软正在其名为MGrammar的奥斯陆项目中开发一种新的DSL制作工具。这意味着您可以制作自定义语言,以便非技术人员可以轻松使用计算机。 (与Cobol和Visual Basic相同的基本思想(和失败)。)

我发现有人已经用MGrammar制作了这种DSL,但它适用于Watin,而不是Selenium: http://www.codinginstinct.com/2008/11/creating-watin-dsl-using-mgrammar.html

因此持续集成服务器进程将是:

  1. 从源代码管理中获取新版本(照例)。
  2. 构建,运行单元测试并分析代码(像往常一样)。
  3. 在版本控制中制作安装包和标签版本(照例)。
  4. 将用例编译为Web测试
  5. 运行网络测试
  6. 接受/拒绝软件: - )
  7. 在持续集成服务器中运行Web测试通常意味着许多配置工作。所以,在我尝试这个之前,我很好奇,你怎么看? 您是否使用过相同类型的设置,您的体验是什么? (究竟是什么环境?)

    如何使用DSL,它是否具有足够的用例功能,还是另一项无休止的开发任务?客户会生成测试吗?

3 个答案:

答案 0 :(得分:1)

首先,Selenium可以与IE和其他浏览器以及Firefox一起使用;跨浏览器支持是其优势之一。这是list of supported browsers

但是,如果您想要一个基于人类语言的DSL来编写测试,请查看Cucumber - 语法几乎与上面的示例完全相同。黄瓜已经有芬兰语支持 - 请参阅this link.

中的示例

答案 1 :(得分:0)

Fitnesse和Selenium集成工具,如Selenesse(http://github.com/marisaseal/selenesse)或Fitnium(http://www.magneticreason.com/tools/fitnium/fitnium.html)也可以满足您的需求。但是,您需要找到将元素定位器放在客户编写的测试用例中的答案。如果客户使用记录仪放置定位器,则可能无法进行维护。如果客户编写这些步骤并且自动化测试人员/开发人员可以使用正则表达式,自定义位置策略来放置这些定位器,则此方法可能有效。

答案 2 :(得分:0)

TestPlan软件使用专门语言编写测试。它具有高度的特定领域,在Web环境中运行良好。它支持Selenium后端,因此您可以获得兼容性,而且无需浏览器即可运行,从而实现更快的测试。我已经在你正在寻找的设置类型的一些相当大的Web项目中使用它。

您的示例脚本可能如下所示:

GotoURL /SomePage
Click MyForm
SubmitForm with
   %Params:name% Tuomos
   %Submit% value:Next
end

就是这样。它很好地描述了用户想要做的事情并且是一个有效的测试。您可以将脚本组合到单元中并具有自定义功能。所以,如果你真的想要,你可以写出名字的Finish等价物。