不同的测试用例风格

有几种不同的测试用例的写法. 用来描述某些 工作流 的用例一般是关键字驱动或行为驱动型. 数据驱动型则是针对同一个工作流, 使用不同的输入数据.

关键字驱动型

针对工作流的测试, 例如 Valid Login 流程, 由若干关键字和相应的参数组成.

前例 所示, 关键字驱动型的用例的通常结构是, 系统先进入到一个初始状态(Open Login Page), 然后对系统进行某些操作(Input Name, Input Password, Submit Credentials), 最后校验系统的表现是否符合预期(Welcome Page Should Be Open).

数据驱动型

数据驱动型的测试方法中, 测试用例仅使用一个高级别的关键字, 通常是创建的 user keyword, 该关键字中则隐藏了实际的流程.

这种测试对于要针对某个相同的测试场景使用不同的输入/输出时非常有用. 虽然可以在每个测试用例中都重复调用一次相同的关键字, 但是使用 test template 功能更加简便, 因为关键字只需要指定一次.

  1. *** Settings ***
  2. Test Template Login with invalid credentials should fail
  3.  
  4. *** Test Cases *** USERNAME PASSWORD
  5. Invalid User Name invalid ${VALID PASSWORD}
  6. Invalid Password ${VALID USER} invalid
  7. Invalid User Name and Password invalid invalid
  8. Empty User Name ${EMPTY} ${VALID PASSWORD}
  9. Empty Password ${VALID USER} ${EMPTY}
  10. Empty User Name and Password ${EMPTY} ${EMPTY}

小技巧

如上例所示, 给列命名使得测试用例更易读易懂. 这种方法之所以可行,是因为对用例表的表头那一行, 除了第一格中的数据, 其它的内容都是 被忽略的

上例中包含了6个独立的测试, 每次都是非法 用户名/密码 的组合情况, 而下面的例子中, 则展示了如何使用 测试模板, 在一个用例中测试所有组合情况. 当使用模板时, 所有的轮次都会被执行, 所以从功能上讲, 两者没有区别.

如上例所示, 每个组合都单独命名为一个测试用例, 很容易看出来测试目的. 不过, 如果是大量的组合情况, 也会带来统计上的混乱. 所以, 到底使用何种风格, 取决于具体的应用场景和个人喜好.

  1. *** Test Cases ***
  2. Invalid Password
  3. [Template] Login with invalid credentials should fail
  4. invalid ${VALID PASSWORD}
  5. ${VALID USER} invalid
  6. invalid whatever
  7. ${EMPTY} ${VALID PASSWORD}
  8. ${VALID USER} ${EMPTY}
  9. ${EMPTY} ${EMPTY}

行为驱动型

还可以按照需求的格式来编写测试用例, 让非技术型的项目成员也能理解. 这种 可执行的需求 是所谓的 验收测试驱动开发 (Acceptance Test Driven Development, ATDD) 或 以示例表示规范 的基石.

写出这种需求/测试的一种方式是 Given-When-Then 样式, 该样式由 行为驱动开发 (Behavior Driven Development, BDD) 所普及.当按照这种样式编写测试用例时, 初始的状态通常由 Given 起始的关键字开始, 其中的操作由 When 开头的关键字描述, 而预期结果则由 Then 开头的关键字处理. 如果某个步骤需要多个操作, 则使用 AndBut 将大家连贯起来.

  1. *** Test Cases ***
  2. Valid Login
  3. Given login page is open
  4. When valid username and password are inserted
  5. and credentials are submitted
  6. Then welcome page should be open

忽略 Given/When/Then/And/But 前缀

以下前缀 Given, When, Then, And and But 在搜索匹配关键字时, 如果没有全名匹配则会被忽略. 这个规则同时适用于用户关键字和库关键字. 例如, 上例中的 Given login page is open 实现为用户关键字的时候, 关键字名称带不带 Given 前缀都可以.

忽略前缀可以使得同一个关键字带上不同的前缀使用. 例如 Welcome page should be open 还可以用作 And welcome page should be open.

注解

前缀 But 在 Robot Framework 2.8.7 版本中新增支持.

关键字中嵌入数据

当编写具体的例子时, 可以在关键字的实现中传递实际的数据是很有用的. 用户关键字通过 关键字名称中嵌入参数 提供支持.