Cucumber + Selenium自动化测试的优秀实践!_cucumber使用(1)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036




![](https://img-blog.csdnimg.cn/img_convert/64de108a23dcb13833cfd18fe6fbb446.png)




---


**3. 分离特征文件**


当使用实时应用程序进行测试时,你可能需要创建多个.feature文件。在不同的文件中对feature进行分解变得很关键。组织好文件,使所有与特定功能有关的feature被归入一个包或一个目录。这是为无缝BDD实施推荐的另一个基本Cucumber最佳实践之一。


例如,考虑一个电子商务应用,可以这样组织文件,在第一层可以有一个package,例如Orders,在这个package中可以有多个feature,如Pending Orders、Completed Orders、Wishlist等等。这样做将使项目有条不紊,而且你将很容易根据功能定位测试。



**4. 使用正确的视角**


有时,你应该用什么角度来写测试方案:第一人称还是第三人称?这一点变得非常令人困惑。Cucumber BDD框架的官方文档同时使用了两种视角。以下是这两种观点的论据。


* **第一人称**:BDD是由Dan North创建的,他在《BDD介绍》一文中建议使用第一人称。使用第一人称是合理的,因为它描述了将自己置于实际执行行动的人的位置。
* **第三人称**:喜欢第三人称观点的人指出,使用第一人称会使读者感到困惑。它没有澄清谁在执行这个行动,即一个个人用户、一个管理员或一些具有特定角色的用户。有人认为,第三人称的使用正确显示了信息,并最大限度地减少了对实际参与执行/测试场景的人做出任何错误假设的风险。


所以,总而言之,没有规定要使用任何一种观点;你必须记住的一个做法是保持一致性。描述应该与测试步骤产生共鸣,并从单一角度出发。


**5. Cucumber 中使用的其他关键词**


除了上面讨论的常用关键词,还有一些在Gherkin中使用的关键词。如果你想实施Cucumber的最佳实践,这是一个重要的初步实践。



**Background**


**Background**简化了在一个给定功能中向多个场景添加相同步骤的工作。这意味着,**如果一个功能中的所有场景都要执行一些共同的步骤,可以把它们写在Background关键字下**。


例如,要从一个电子商务网站订购产品,必须做以下步骤:


* 打开网站
* 点击 "登录 "链接
* 输入用户名和密码
* 点击 "提交 "按钮


一旦完成上述步骤,我们就可以搜索产品,将该产品添加到购物车,并进行结账和付款。由于上述步骤对于一个功能中的许多功能来说是常见的,我们可以把它们包括在Background中。尽量保持Background的简短,因为如果保持冗长的背景,就很难理解下面的场景。Cucumber特性文件的关键是:越短越好。


Scenario Outline


Scenario Outline类似于对应于测试场景的测试数据。并不强制要求用Scenario Outline来写场景,但如果需要,可以写。


示例:



![](https://img-blog.csdnimg.cn/img_convert/054cb03c1545d5876a988aace766d6f5.png)


DocStrings


如果一个场景中的信息不适合在一行中出现,可以使用DocStrings。它跟在一个步骤后面,并被括在三个双引号内。虽然经常被忽视,但它是最关键的Cucumber最佳实践之一,需要遵循。



Data TableData Table与Scenario Outline相当相似。两者之间的主要区别是,Scenario Outline在场景层面注入数据,而数据表用于在步骤层面注入数据。


* 数据表的作用是在单一步骤中输入数据。
* 没有必要定义数据表的头部,但建议保持对数据的参考,以方便理解。


如上面的例子所示,可以在单个步骤中使用数据表,并注入可能需要的不同数据。


Languages


Cucumber并不局限于用英语编写方案。与英语中遵循的惯例类似,可以用多种人类语言来编写方案。Cucumber官方文档中有关于使用语言功能和各种语言的方言代码的所有信息。


例如,要使用法语作为编写方案的语言,可以在功能中使用**#Languages** 作为标题,就像下面这样------。


**# language : fr**


(注意:fr是法语的方言代码)



Tags


在某些情况下,可能不需要执行测试的所有场景。在这种情况下,可以通过使用Tags(标签)将特定场景分组并独立执行。Tags是简单的注释,用于分组场景和功能。它们用**@Tags**,后面是一些值得注意的文字。


示例:


注意,Tags在.feature文件中被所有组件继承,即Scenario Outline、Scenario等。同样地,如果Scenario Outline上有一个Tags,数据实例也会继承该Tags(标签)。


* tags={"@End2End"} @End2End标签下的所有功能场景将被执行。
* tags={"@SmokeTest"} @SmokeTest下的所有方案都将被执行。
* tags={"@SmokeTest , @RegressionTest"} 这种类型的定义表示OR条件,因此,@SmokeTest或@RegressionTest标签下的所有方案都会被执行。
* tags={"@SmokeTest" , "@RegressionTest"} 在这种定义中,@SmokeTest和@RegressionTest下的所有情景都将被执行。
* tags={~"@End2End"} @End2End标签下的所有方案都将被忽略。
* tags={"@SmokeTest , ~@RegressionTest"} @SmokeTest标签下的所有方案将被执行,但@RegressionTest标签下的方案将被忽略。


与上面的例子类似,可以根据要求对标签进行组合,并选择性地执行场景/功能。


**6.Step Definition(步骤实现)**


到目前为止,作为Cucumber最佳实践的一部分,我们只了解了场景会做什么。但是,使用Cucumber Selenium实现自动化的下一个重要步骤是添加 "Step Definition",它将完成 "如何 "部分,即场景如何执行。当Cucumber在Scenario中运行一个步骤时,它会引用一个匹配的Step Definition来执行。


步骤的实现可以用Ruby、C++、Javascript或任何其他语言来完成,但这里的例子将使用Java。


如果你使用的IDE已经安装了Gherkin和Cucumber,你会看到建议创建一个新的.java文件或者选择一个已经实现了步骤的文件。在选择任何一个选项时,将在类中创建一个方法。例如,我们正在恢复以下步骤的定义:



Given the user is on Home Page


一个方法将被自动生成,其注释的标题文本与步骤描述的标题文本相同。




|  |  |
| --- | --- |
| 1234567 | @Given(“^the user ison Home Page$”)publicvoidhomePage()throwsThrowable{ //Java code to check the above description….…..} |


为了创建从Data Table或Scenario Outline中获取数据的场景的步骤实现,数据将作为正则表达式包含在注释中,并作为参数传递给方法。




|  |  |
| --- | --- |
| 12345678 | @When(“^Add the first result on the page with quantity\”([0-9]+)”\$”)publicvoidaddQuantity(intqty)throwsThrowable{ //Java code to pass qty in the qty field…... } |


而这就是如何使用Gherkin实现在feature文件中写的步骤。在实现Step Definition时,请务必记住以下几点:


* 尝试创建可重复使用的Step Definition。
* 可复用的Step Definition将使测试具有可维护性,如果将来有任何变化,对框架做的改动最小。
* 可以在Scenario Outline中使用Parameterization 来重复使用Step Definition。



**总结**


你现在已经熟悉了一些最重要的Cucumber最佳实践,可以在BDD策略中或在实施Cucumber和Selenium时遵循。作为最后的总结,我们建议:


* 尝试在feature文件中以用户描述的方式编写场景。这将有助于创建简洁明了的步骤。
* 避免耦合的步骤,也就是说,总是倾向于在每个步骤中创建一个动作,避免不必要的错误。
* 尽可能地重复使用Step Definition,以提高代码的可维护性。
* 尽量利用 "**Background**"来减少在不同场景中不必要地增加相同的步骤。



**最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!**


![](https://img-blog.csdnimg.cn/94c701c9f3ac4069a42f7f5afc35fdef.png)


### 软件测试面试文档


我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。  
  


![在这里插入图片描述](https://img-blog.csdnimg.cn/057f075a555e43b5ae94ac4c2c7f6dc1.png#pic_center)


![](https://img-blog.csdnimg.cn/b5d166f9b12b4ce9ba4ef9adcc88eaa1.png)



![img](https://img-blog.csdnimg.cn/img_convert/d125db01997a183a83220b385e5b695e.png)
![img](https://img-blog.csdnimg.cn/img_convert/c9b3f81c1c90f85283223b2887afd5a5.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值