从0-1学习Cucumber之基于behave自动化测试教程(二)

简介: 全网最全的的 behave 中文教程!

❤ 大家好!我是虫兵   ❤~

坚持为应届毕业生提供简历指导及职业规划建议!

坚持无偿为初中级测试工程师提供问题解答!

让分享成为一种美德!

❤ 此系列文章敢说全网最干的 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 的使用有一些建议:

  1. 不要在 background 里设置复杂状态也就是处理复杂逻辑
  2. backgroud 尽可能短
  3. 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 自动化测试指南 (一)




相关文章
|
17天前
|
XML 前端开发 Java
《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
【4月更文挑战第6天】按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath。xpath 的定位方法, 非常强大。使用这种方法几乎可以定位到页面上的任意元素。xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。XPath 是XML 和Path的缩写,主要用于xml文档中选择文档中节点。基于XML树状文档结构,XPath语言可以用在整棵树中寻找指定的节点。
43 0
|
1天前
|
Web App开发 数据采集 Java
《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
【4月更文挑战第22天】本文介绍了在测试过程中可能会用到的两个功能:Actions类中的拖拽操作和划取字段操作。拖拽操作包括基本讲解、项目实战、代码设计和参考代码,涉及到鼠标按住元素并将其拖动到另一个元素上或指定位置。划取字段操作则介绍了如何在一段文字中随机选取一部分,包括项目实战、代码设计和参考代码。此外,文章还提到了滑动验证的实现,并提供了相关的代码示例。
17 2
|
6天前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)
【4月更文挑战第17天】其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇。那是因为这个比较重要,所以宏哥专门为她量身定制了一篇。FluentWait是Selenium中功能强大的一种等待方式,翻译成中文是流畅等待的意思。在介绍FluentWait之前,我们来讨论下为什么需要设置等待,我们前面介绍了隐式等待和显式等待。
29 3
|
8天前
|
Java 测试技术 定位技术
《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)
【4月更文挑战第15天】本文介绍了如何使用Selenium进行浏览器窗口切换以操作不同页面元素。首先,获取浏览器窗口句柄有两种方法:获取所有窗口句柄的集合和获取当前窗口句柄。然后,通过`switchTo().window()`方法切换到目标窗口句柄。在项目实战部分,给出了一个示例,展示了在百度首页、新闻页面和地图页面之间切换并输入文字的操作。最后,文章还探讨了在某些情况下可能出现的问题,并提供了一个简单的本地HTML页面示例来演示窗口切换的正确操作。
37 0
|
11天前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(十九)-java+ selenium自动化测试-元素定位大法之By css下卷(详细教程)
【4月更文挑战第11天】按计划今天宏哥继续讲解css的定位元素的方法。但是今天最后一种宏哥介绍给大家,了解就可以了,因为实际中很少用。
35 2
|
13天前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(十八)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)
【4月更文挑战第10天】本文主要介绍了CSS定位元素的几种方法,包括ID属性值定位、其他属性值定位和使用属性值的一部分定位。作者提供了示例代码,展示了如何使用这些方法在Java+Selenium自动化测试中定位网页元素。通过CSS选择器,可以更精确地找到页面上的特定元素,如输入框、按钮等,并进行相应的操作,如输入文本、点击等。文章还提供了实际运行代码后的控制台输出和浏览器动作的示例。
49 0
|
14天前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
【4月更文挑战第9天】本文介绍了CSS定位方式的使用,包括它的优势和8种常用的定位方法。CSS定位相比XPath定位更快、更稳定。文章通过示例详细讲解了如何使用CSS定位元素,包括通过id、name、class name、tag name、link text、partial link text以及XPath进行定位。还提供了Java代码示例来演示如何在自动化测试中使用这些定位方法。
39 1
|
16天前
|
测试技术 C语言
网站压力测试工具Siege图文详解
网站压力测试工具Siege图文详解
23 0
|
1月前
|
JavaScript jenkins 测试技术
这10款性能测试工具,收藏起来,测试人的工具箱!
这10款性能测试工具,收藏起来,测试人的工具箱!
|
1月前
|
测试技术
现代软件测试中的自动化工具与挑战
传统软件测试面临着越来越复杂的系统架构和不断增长的测试需求,自动化测试工具应运而生。本文将探讨现代软件测试中自动化工具的应用和挑战,深入分析其优势与局限性,为软件测试领域的发展提供思路和启示。