使用Watir创建测试“框架”的提示?

时间:2012-03-26 18:57:37

标签: testing automated-tests watir watir-webdriver

我是编写测试用例的新手,这将是我的第一个重大项目,但我对如何设计框架感到困惑(我知道这不是正确的词,但我不确定那个词我在这里寻找。)

我正在测试的应用程序涉及通过填写Web表单来创建客户数据库,并在每个客户端下面填写可以填写和保存的其他表单。系统有点复杂,因为在填写某些表格之前必须满足条件,或者除非满足某些先决条件,否则无法选择某些答案。

从我的研究中,我已经看到了解决这个问题的一个好方法是为每个页面创建一个模块,其中为该页面上的每个函数定义一个方法。

通过这个想法,对于一个让我们说40个文本字段的页面,我会为每个文本字段创建一个名为“fill_ fieldname ”的方法吗?

我还担心在有前提条件时如何将测试用例雾化。例如,如果我需要测试特定表单的功能,我首先需要一个客户端存在。我应该为我正在测试的每个场景创建一个新客户端,还是只为所有场景使用一个客户端?我想我必须在每个测试用例之前做一个前置条件检查,以确保客户端仍然“可用”进行测试......

我真的很困惑,从哪里开始,我想从一开始就设计一个好的框架,而不是在项目变得太大之后废弃一切。任何提示/建议都将非常感激。

3 个答案:

答案 0 :(得分:7)

大多数人都会将watir-webdriver与现有的页面框架(如cucumberrspec配对,以进行组织和验证。在那之后,我相信你指的是页面对象模式框架,易于使用和易于扩展。你可以在这里找到一些很棒的指南:

手动编写测试用例是任何自动化过程中非常重要的一步。有人曾经说过,没有质量手动策略的自动化可以让你比平常更快地犯错误(如果没有其他人这么做的话,我会得到信用)。

希望您有一些关于该应用程序的良好文档或者为您提供该产品的业务/用例的人员。从业务案例中生成测试用例非常容易。然后,只需逐步进行并在功能集中进行分解。

也可能很难想到端到端的应用程序,并尝试从一开始就包含测试中的所有功能。在拥有一个健壮的框架之前,您可能只需要一些简单的工具类型测试来帮助您更快地设置手动测试,或者使用有意义(但不是很漂亮)的输出执行测试。这是整个过程的一部分。 你会废弃你做的一些事情,但当然你不想废弃所有这些。保持简单,使其模块化 - 所有传统的开发概念,如DRY,KISS都适用于此。

良好的自动化测试源于优秀的手动测试案例。如果你试图跳过这一步(并且没有丰富的经验),你会后悔的!

有很多好的测试书。我个人很喜欢Lessons Learned in Software Testing - 其中一位作者是Bret Pettichord,是WATIR的创始人。

一旦您获得测试基础知识,您就可以进入特定于图书馆的书籍,如WATIR Book,或许多链接到上述Watirmelon和Cheezy的在线博客。

答案 1 :(得分:2)

  

我还担心在有前提条件时如何将测试用例雾化。例如,如果我需要测试特定表单的功能,我首先需要一个客户端存在。我应该为我正在测试的每个场景创建一个新客户端,还是只为所有场景使用一个客户端?我想我必须在每个测试用例之前做一个前置条件检查,以确保客户端仍然“可用”进行测试......

根据我的经验,我会说测试开始前测试所需的一切都是至关重要的。

当你运行数百个测试时,这可能非常耗时,但是必要的。如果你不是每次都从同一点开始,那将是一次不可靠的测试。

每次都创建一个新客户端。

答案 2 :(得分:1)

我也必须开始这个 - 使用Selenium(C#bindings)和NUnit。

Page Object模式也是你所指的。无论您的页面对象中是否有'Fill_TextBox'方法,对于页面中的每个文本框,都完全取决于您,但您也可以将它们分组到一个方法中。例如(伪代码,在C#中):

private void FillTextBox1()
{
    // fill text box 1
}

private void FillTextBox2()
{
    // fill text box 2
}

private void FillTextBox3()
{
    // fill text box 3
}

private void FillTextBox4()
{
    // fill text box 4
}

public void FillTextBoxes()
{
    FillTextBox1();
    FillTextBox2();
    FillTextBox3();
    FillTextBox4();
}

[Test]
public void TestTextBoxes()
{
    LoginPage loginPage = new LoginPage();
    loginPage.FillTextBoxes();
}

这是一种做法。你从方法名称知道它正在做什么的一般概念,所以如果你需要你可以进入它,找出它正在处理的文本框。

我最初开始为每个测试创建一个新的客户端,它在大多数情况下运行良好,但在其他情况下,事情会变得有点粘 - 如果以前的浏览器由于某种原因没有正确关闭,你可以运行陷入一些问题。在中间遇到它,NUnit有TestFixture,或包含测试的类,所以我们创建并打开浏览器来设置TestFixture,并在该类的每个测试结束时,我们确保我们达到合理的清洁状态为下一次测试做准备 - 对于大多数情况,这基本上是退出应用程序,让下一个测试从登录页面开始。我已经看过很多关于它的讨论 - 你必须看看什么最适合你。如果您不必经常关闭并按每次测试创建客户端,它确实会减少时间。