❤ 大家好!我是虫兵 ❤~
坚持为应届毕业生提供简历指导及职业规划建议!
坚持无偿为初中级测试工程师提供问题解答!
让分享成为一种美德!
❤ 此系列文章敢说全网最干的 behave 教程文章!❤
虫兵
跟下来必有所得!此系列文章敢说全网最干的基于行为驱动开发模式(BDD)的 基于 python behave 自动化测试教程文章! !
前情提要
Cucumber -基于 behave 自动化测试指南 (一)
上集内容我们主要讲了,Cucumber 是什么,behave 框架的来源,以及Cucumber behava python 和 Gherkin 之间的关系是什么,其中Gherkin 是其中的重要部分,是描述case 的自然语言,所以今天我们主要学习一下Gherkin,如果对相关知识不了解的过同学应该从以 (一)看起,否则你会看不懂。
坚持跟下来你就从 0 -1 掌握了 behave 的自动化测试了!
进入主题
Gherkin 使用很多关键词来定义case 的描述,每个关键词里可以用自然语言也就是日常我们交流的这种口语来描述,Gherkin 的文档中大多数都是以一个关键词开头,知识点:注释必须新起一行,也就是不能和关键字在同一行,否则也会被认为是描述一部门如图所示,
如图在每个关键词的后面被称为代码块,这部分要在代码中有定义,后面会说,官方叫步骤定义。
还需要注意的是像 Scenario后面是有(:)冒号的,其他关键词没有,如果你不小心在其他关键词后面也加了冒号,程序是不执行的。
关键词
除了feature 和 Scenario 其他关键词后面都不能有空行,Gherkin 支持的关键词有:
- Feature
- Rule (as of Gherkin 6)
- Example (or Scenario)
- Given, When, Then, And, But for steps (or *)
- Background
- Scenario Outline (or Scenario Template)
- Examples (or Scenarios)
还有一些次要的关键词:
- """ (Doc Strings)
- | (Data Tables)
- @ (Tags)
- # (Comments)
Feature
Gherkin 文件中的第一个关键词就是 Feature , 这里的描述内容在 Cucumber 运行时被忽略,但是html 测试报告中会展示。除了 Feature 后面可以描述一些文本。还有其他关键字也可以加描述比如:Example
/Scenario
, Background
, Scenario Outline
and Rule
并且所有描述都支持 markdown 模式。
Rule (不常用)
Gherkin6之后支持 Rule 关键词,目前博主也没搞清楚他实际使用场景被认为不常用吧。
Example (不常用)
Example 的意思和Sceario 意思是一样的,Example 除了一般和Rule 搭配使用其他也没啥特殊的,暂且就认为和Scenario 一样就可以。
Steps
每个步骤都以 Given, When, Then, And, or But,开头。Cucumber 执行每个关键词按着他们被写的顺序,Cucumber 只要匹配到每个关键词后面的描述后就会被执行,官方说:这意味着您不能在 Given、When、Then、And 或 But 步骤中使用与另一个步骤相同的文本。。
但是我在测试时候是可以的...这可能是因为behave 框架的原因,跟Cucumber Gherkin 没啥关系。
Given
官方描述了很多其实说白了就是,官网建议Given 关键字是在你一个case 的描述起到一个前置条件的设置作用,比如你要测试一个接口,可以通过Given 先来一个初始化数据的操作。可以设置多个 Given 可以通过 And 来串联让可读性更强。
例如:
When
官方建议 When 关键词在一个场景中只应该有一个,如果你必须有多个,官方建议应该拆成多个场景,也就是把case 拆分的更细。
Then
then 关键词一般是对结果的描述。应该通过断言去判断实际和预期的结果。结果应该该是可以看到的,是能输出出来的,而不是在系统内部。如存在数据库上的数据。官方大大说了不建议通过 Then 关键词直接去查询数据库。这其实也算是自动化测试的一个原则吧,如果测一个接口的数据是否成功。更多应该建议通过另一个输出接口来获取预期数据。但实际感觉也没什么不好,这可能是违反了可观测性的原则吧,或者说是你没有站在用户的角度上思考,因为用户是不会关心数据库里面存没存的,他只关心系统返给用户信息对不对。
But,And
这里不做过多赘述就是一些链接的关键词而已。相信大家都懂。
* (不常用)
* 可以代替一些关键字 , 感觉没啥用
BackGround
如果你有一些公共的逻辑是需要前置执行时候,其实不需要每个 Sceanario 都写一份的,可以把他们抽出来放到一个 BackGround进行管理。Cucumber 运行时每个 Sceanario 前都会先执行 BackGround中的步骤定义,这特性还是蛮有用的。图中在输出 one.two 之前都输出了 backgd 。
官方对BackGround 的使用有一些建议:
- 不要在 background 里设置复杂状态也就是处理复杂逻辑
- backgroud 尽可能短
- backgroud 应该清晰,让人一眼知道要干什么
确实不应该改在这些公共步骤里增加复杂逻辑,如果你有复杂逻辑那就应该拆分,这也比较像面向对象的单一原则。
Scenario Outline
场景大纲,关键词可以通过不同的值的组合可以在同一个 Scenario 中运行多次,关键词 Scenario Template 和 Scenario Outline 一个意思用哪个都可以。在步骤中使用“<>”来获取变量的值,Scenario Outline 使用的话必须用 Examples 关键字,Cucumber 在运行的时候会把 <>中的参数用 Examples 的数据替换。如示例图:
<>中的 dir_name 变量一次替换了下方 Examples 中的数据,所以控制台打印了多个,但其实是定义在了一个 Scenario 中。
Step Arguments
步骤参数,有时候我们需要传递一些参数,Gherkin 提供了 Doc Strings
and Data Tables
两种方式,感觉没有那么灵活,比如我想传数组,字典什么的都不行。。。不过可以封装吧自己。
DocStrings,传递了一些文本数据:
Data tables demo:
表格中特殊字符转义:
如果逆序填 | 那么可以写成 \I ,如果需要 \, 可以写成 \\.
behave 框架对这些 docstrig 或者 table 数据的获取做了封装,后面教程会说到。
最后
官方推荐,选择什么语言来编写用例应该和日常说的语言一样,避免多个语言进行切换,其实就是要么一直中文,要么一直英文,我觉得。看个人习惯吧, 我们现在就是用的中文描述。
Gherkin 目前支持过70个国家的语言。
下面是一个挪威语言编写的例子,大家看着玩就好:
知识点总结
- Gherkin 都支持哪些关键字
- 这些关键字都是什么意思?
- 这些关键字都怎么用
- 哪些比较常用哪些不常用
- 关键字步骤之间参数如何传,都支持哪些类型的参数传递。
掌握以上内容就达到了本章的学习目的,下一节内容我们就进入了 python 的 behave 框架是如何支持 Cucumber 及本章内容的定义的没开始真正学习之旅。
可以加VX技术交流:1010584905
往期内容:
Cucumber -基于 behave 自动化测试指南 (一)