使用Taiko + Gauge进行自动化测试(一)
初识Taiko
先来了解一下什么是Taiko:“Taiko是一个免费的开源浏览器自动化工具,由ThoughtWorks开发。它是一个node的库,Taiko使用Chrome Devtools API,它是为测试现代web应用程序而构建的。”
所以对于Taiko来说: 1、它是为测试Web应用而生 2、它基于Chrome浏览器
关于Taiko简介中所提到的ThoughtWorks,如果有不了解的同学可以跳转至此进行了解(开发团队可能也将成为您框架选型评估的决策项)。
环境安装
在安装Taiko之前,请确保您已经安装了NodeJs环境。如果您还没有安装nodejs,请跳转至Node官网 进行安装。
对于开发工具,这里强烈推荐您使用 VS Code(超强开发工具之一,不做解释)。若您还未安装VS Code,请跳转至VS Code官网进行下载安装。
在确保安装完成前两项基本支持环境之后,我们就需要来安装Taiko了。
可以在桌面新建一个文件夹,比如“Taiko Demo”。打开 VS Code,点击左上角的“文件”,选择“打开文件夹”,并且选择刚才创建的文件。
在VS Code中打开“终端”。终端是VS Code 对命令控制台的集成,比如CMD,Powershell等,可以让您不离开IDE就完成一系列操作。 选择VS Code上方的 “终端”,选择“新建终端”,当然您也可以使用快捷键(ctrl + shift + `)。
新建完成后,您将看到这样的窗口。(后续的操作将频繁用到此操作,请进行熟悉)。
接下来,在终端输入该命令:
npm install -g taiko
该内容为向全局环境安装taiko Node包。安装时间可能会有点久,因为taiko里面内置了一个100MB+的Chromium浏览器。
尝试Taiko
在终端输入 taiko
,就可以进入taiko的命令控制台。
如果您在VS Code终端得到错误提示:"因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。" 请使用该方法进行处理:《Powershell 无法运行脚本的处理方法》。
进入taiko后您将得到这样的显示:
Version: 1.0.4 (Chromium:81.0.3994.0)
Type .api for help and .exit to quit
>
接下来输入 openBrowser()
,您将看到taiko会开启一个浏览器。 然后执行 goto("baidu.com")
,浏览器将跳转到百度首页。然后再次执行 write("博客园 句幽")
,浏览器将在输入框内填充对于的内容。最后执行click("百度一下")
,将模拟操作点击一下搜索。
接下来输入 .code
,您将看到刚才操作步骤的代码。 这是taiko为您自动生成的。
在VS Code中新建文件“first-case.js”。然后将刚才taiko为我们生成的代码拷贝下来,复制到文件中。
此时该文件中的内容就相当于完成了我们第一个Case: “打开浏览器,输入内容,点击搜索”。
taiko 执行过程
那么现在您可能会问,taiko是怎么执行的呢? 如果我要扩展一个用例该如何扩展呢?
先来看看我们最开始输入的几个命令: openBrowser
、goto
、write
、click
。 这些都是taiko为我们提供的内置命令。
也就是说 taiko 其实就是为咱们提供了这些基于浏览器的基础操作指令,而我们就可以用这些各种命令进行排列组合,完成对应的操作。比如 “点击”、“按压”、“输入”、“选择元素”等等操作,而这些所有的操作命令都在 taiko 官网 为我们标注出来了。我们只需要选取需要的命令进行操作就可以了。
比如咱们更改一下操作:
await openBrowser();
await goto("baidu.com");
await write("句幽 博客园");
await link('句幽- 博客园').exists();
await click(link('句幽- 博客园'));
这样将会在百度搜索句幽的博客园,然后在点击跳转到句幽的博客园。
而这每一个步骤都将会有一个验证,比如await link('句幽- 博客园').exists();
,如果该页面没有获取到名称为"句幽- 博客园"的元素,将会验证失败。
而将这些步骤都转换为js代码,放置在咱们的first-demo.js
文件中,然后在终端运行:
taiko first-demo.js
您将看到这样的结果:
[PASS] Browser opened
[PASS] Navigated to URL http://baidu.com
[PASS] Wrote taiko test automation into the focused element.
[PASS] Clicked element matching text "百度一下" 1 times
[PASS] Browser closed
成功和失败都可以直观的显示。 这些用例步骤放置到对应的文件中,最后再运行就可以得到测试结果啦。
结合Gauge编写用例
现在咱们已经了解到了 taiko 是怎么使用的,它提供了各类操作浏览器的命令,供我们排列组合完成模拟操作,最终得到自动化测试结果。
那么您觉得它够简单吗?如果要和团队一同维护和编辑用例,它很方便吗? 显然不太好用。
所以此刻我们将介绍另外的一个工具:Gauge。 它将以 taiko 提供的命令操作为基础,用更自然的操作方式来完成对应的操作。
在vs code的终端中输入这样的命令:
npm install -g @getgauge/cli
运行完成之后就完成了Gauge的安装。当然在Gauge的官网,它还提供了一个安装包。 以何种方式安装取决于你,不过此处我强烈建议您使用 npm的安装方式。
Gauge还提供了vs code的扩展支持,您可以在VS Code的扩展中(最左侧按钮)进行安装。
接着,在桌面新建一个文件夹gauge-demo
,然后在vscode中打开。
在终端中输入:
gauge init js
运行完成后,将会得到Gauge的初始化项目。(vs code的扩展也提供了创建的命令,不过由于兼容问题经常会出现延迟,所以我建议您使用命令来初始化项目)。
初始化之后的项目如图。
使用Gauge
在使用之前,先为大家说明一下,Gauge它充当着一个什么样的角色: 首先要明白,taiko为我们操作浏览器提供了便捷的指令,它使用js来编写。但是这就为咱们测试团队建立了一个障碍,首先全员都得熟悉JS的写法,比如await
等关键字等等,这无形提高了技术操作门槛。还有一点,我们所有的案例都将已大量js片段代码来维护,无疑增大了维护成本。
那么gauge干了一个什么操作呢? 它建立于taiko之上,允许测试人员将某某关键词与某段JS相对应,比如("跳转" 对应 taiko 的Goto
)。 这样有什么好处呢? 团队并不需要全员掌握JS了。频繁的操作用例可以统一为共同的指令,增加可维护性。
所以现在来看看Gauge提供的初始化项目,您很快就能明白:
查看test
文件夹下面的step_implementation.js
文件。这里查看它的部分代码:
step("Goto getgauge github page", async () => {
await goto('https://github.com/getgauge');
});
也就是说'Goto getgauge github page' 对应着 taiko 的操作 await goto('https://github.com/getgauge');。
然后再看看specs
文件夹下面的example.spec
。对应部分为:
* Goto getgauge github page
这样,用例编写人员只需要写出这样的语句就可以完成操作了。而测试团队中的某一小部分人员,负责js对应关系的编写,功能测试人员负责用例的编写,就能很快的完成测试工作。
接下来我们来尝试使用它,在test
文件夹下面的step_implementation.js
文件中增加语句:
step("跳转到句幽博客", async () => {
await goto("baidu.com");
await write("句幽 博客园");
await link('句幽- 博客园').exists();
await click(link('句幽- 博客园'));
});
这部分代码熟悉吗? 这是咱们刚开始使用taiko所写的代码。现在我们将它包裹起来,对应到了跳转到句幽博客
这一指令。然后再到specs
文件夹下面的example.spec
添加对应操作:
## 跳转测试
* 跳转到句幽博客
文本指令 Gauge 采用了MarkDown的写法。我们现在无需过去去了解markdown,只需要知道在spec文件中: #
代表的测试项目名,比如您可以命名(# 考勤分析测试),而##
代表了测试用例,比如您可以命名(## 添加考勤人员)。 *
代表了步骤,步骤的名称来源于您从js文件里的关键词对应。
最后在终端中执行:
gauge run [你的spec的文件名]
就可以进行测试,最终生成测试报告。
如果您安装了VS Code的Gauge插件,那么在进入'.spec'文件后,您可以看到每一个用例上都有一个运行的按钮。点击就可以执行用例。
总结
本文以一个小案例来为大家介绍了什么是Taiko和Gauge,以及如何使用它。那么和传统的自动化测试相比,它有什么优势呢?以及在自动化测试框架百花齐放的今天,它和其它的框架相比有什么优劣势呢?(比如和Robot Framework相比)。以BDD(行为驱动开发)为核心理念的Taiko,是如何践行BDD的呢? 如何编写出更复杂的用例以及如何建立好的分区方式便团队成员维护等问题 都会在后期文章中为大家进行介绍。
使用Taiko + Gauge进行自动化测试(一)的更多相关文章
- ThoughtWorks、Teambition、Trello、Slack、DevCloud 主流敏捷软件开发工具平台比较
在大公司做了6年程序员,2年项目经理的小王,正在创业公司迎来他焦虑的而立之年. 但是对于3个月前加入创业公司的决定,他现在有些烦躁和怀疑人生.在他过往的经验看来,公司新接的小项目,在过去的大公司里1个 ...
- 初识gauge自动化测试框架(二)
看到一些同学对该工具有点一兴趣,那么我将继续介绍Gauge自动化测试工具. Gauge本质上一个BDD(Behavior Driven Development)测试框架.所以,首先你要了解BDD的操作 ...
- 初识gauge自动化测试框架
segmentfault阅读 官方网站:https://docs.gauge.org/latest/index.html 介绍: Gauge是一个轻量级的跨平台测试自动化工具,可以使用不同的语言中编写 ...
- gauge自动化测试框架(二)
Gauge通过Markdown来描述行为,所以我还需先学习学习Markdown语法,看了一下,还好,十来分钟应该就可以搞定.具体学习见另一篇文章
- Gauge自动化测试框架的安装和入门
- UI自动化测试框架Gauge 碰到无法识别Undefined Steps 红色波纹标记
如果碰到无法识别的情况,例如下面的红色波纹,可以试一下: 第一步: 第二步: 不勾选'offline work' 第三部:刷新之后可以重新编译.
- 【补充说明】Gauge框架在JS中的简单应用
这里做一个总结 由于公司架构要用node来替代Java的部分服务,所以就研究了这个自动化测试框架:它可以很方便的测试我们的接口,而且还能使用断言[assert]来判断是否是我们预期的结果. 但是呢,由 ...
- 《Python自动化测试九章经》
Python是当前非常流行的一门编程语言,它除了在人工智能.数据处理.Web开发.网络爬虫等领域得到广泛使用之外,他也非常适合软件测试人员使用,但是,对于刚入行的测试小白来说,并不知道学习Python ...
- Gauge框架在JS中的简单应用
gauge框架简介 Gauge是一个轻量级的跨平台测试自动化工具. gauge安装[Win10 64位下测试] [百度网盘链接]https://pan.baidu.com/s/1bidE34gLLrS ...
随机推荐
- 解决ubuntu16.04启动时长时间陷入紫屏
今天我的ubuntu系统进不去,一启动就陷入紫屏的死循环中,重装了两遍系统还是一样进不去,后来上网查找了各种解决办法,网上都说是显卡的问题,我也不懂什么意思.试了几种方法,终于解决了这个问题,在这里记 ...
- Educational Codeforces Round 68 差G
Educational Codeforces Round 68 E 题意:有 n 个线段,每个都是平行 x 或者 y 轴,只有互相垂直的两线段才会相交.问形成了多少个矩形. \(n \le 5000, ...
- [HNOI2019]鱼(计算几何)
看到数据范围n<=1000,但感觉用O(n^2)不现实,所以考虑方向应该是O(n^2logn). 一种暴力做法:用vector存到1点相同的2点和到2点相同的1点,然后枚举A,枚举BC,再枚举D ...
- 【二进制枚举+LCS】Card Hand Sorting
[二进制枚举+LCS]Card Hand Sorting 题目描述 When dealt cards in the card game Plump it is a good idea to start ...
- webapck imports-loader和exports-loader的使用
webapck imports-loader和exports-loader的使用
- Java IO: 其他字符流(下)
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...
- Java IO: 字符流的Buffered和Filter
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.B ...
- rocket mq 入门文档
原文地址: http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/ 感谢原作者 十分钟入门RocketMQ 本文首先引出 ...
- 转载-MAC Mysql中文乱码解决方法
相关链接: http://www.siguoya.name/pc/home/article/235 如有,有问题可以留言.
- 吴裕雄--天生自然python学习笔记:Python3 面向对象
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集 ...