从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 自动化测试指南 (一)




相关文章
|
29天前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
33 4
|
27天前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
1月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
52 1
|
2月前
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
49 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
2月前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
66 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
1月前
|
前端开发 JavaScript 安全
学习如何为 React 组件编写测试:
学习如何为 React 组件编写测试:
40 2
|
1月前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
2月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
74 1
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
78 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
2月前
|
自然语言处理 搜索推荐 关系型数据库
elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)
这篇文章是关于Elasticsearch全文搜索引擎的学习指南,涵盖了基本概念、命令风格、索引操作、分词器使用,以及数据的增加、修改、删除和查询等操作。
36 0
elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)
下一篇
DataWorks