TDD 之 ATDD 之 CUCUMBER & BDD
CUCUMBER 可将人类自然语言转化为(Ruby, python, javascript, C#等)测试代码。
- 可以传递参数,可打标签@tag进行分类管理,,
@login
Scenario: …
Given ...
When ...
Then ...
- 可加钩子-HOOKS(Before() do ... end)
Before(‘@login’) do
...
end
- 消除重复-DATATABLE
Scenario: login WordPress
Given open the login page
When login with users:
| admin | 123456 |
| admin | admin123 |
Then login successful
- 消除重复-OUTLINE
Examples:
| userName | Password | Login Result |
- 消除重复-TRANSFORM(回调)
When login with user {“username”: “admin"}
特技1 WIP work in progress 一般不用,除非要发必杀技
#cucumber —wip
目的:自动化测试的有效性检测
测试过了,CI 挂了,而测试不过,则 CI 临时通过。
注解:将功能代码改错,预知自动化测试是失败的,所以如果自动化测试有效的话,就应该测试 failed 了才通过。
问题:改功能代码不是很费事吗?还要考虑修改哪里,以及检查哪些情况?比看自动化测试的代码是不是还慢?
数据管理:OUTLINE + TRANSFORM
最难的是抽象 Scenario 的方式,两种风格:
一、纯业务的方式写。
二、以一个真实的使用者来一步步写测试。
BDD
开发大型复杂业务系统软件的问题:
主要:知识传递
其次:正确验收
解决方案:BDD(但开发与维护成本相对较高,对于较大项目和人员参与时,会相对有效。)
成本高的原因是:DSL 需要自己开发的语言
客观原因是:业务人员和 QA 人员读不懂开发人员的代码,而相对较容易理解 BDD 的 DSL 语言。
TDD —> ATDD 验收测试驱动开发,包括(BDD, FDD, CDCD, EDD)Behavior, Feature, Example
万法归宗:测试驱动开发
BDD 金字塔
BDD 是一个概念,要解决什么问题,要付出什么代价。
核心是什么?产品愿景——产品的商业价值——用户和干系人如何能交付——软件帮用户做什么——从一个 feature 中划分 Stories
应用 BDD 时需考虑人力成本,低的话不用,高的话就需要考虑使用。
QA Server 所有 Scenario 的集合,所有 DSL 的集合。
测试环境的原则:所有 Scenario 的环境应该相互不影响的,环境需要重置非常快。
参考资料:
https://cucumber.io/
《Specification by example》
移动 APP 的自动化测试
手工测试:引擎——人
自动化测试:引擎——Appium > Calabash
Appium自动化测试框架,跨平台,可录制,类似 Selenium 的功能。
- Locator 定位器
- Actor 执行器
各移动设备屏幕不同,而定位可通过 screen 的百分比来定位,或相对当前元素的位置来定位,还有滑动 swipe 、长按 longPress 的操作等。
UI 自动化测试最大的问题是:UI 会经常变化,使得自动化测试非常脆弱。
Page Objects
将业务操作封装为Page Object里的一个方法
class LoginPage 内部定位元素操作等。
Dev在开发 UI 界面时,更新 Page Object 中的元素定位器。
健壮性:
- 异步加载:
- 解决方案:反复轮询,设置 timeout 时长。因为不清楚网络延时会有多长。
- 动画处理:如 启动动画时间过长
- 解决方案:使用 Wait,因为一般动画是固定长度的。
- 同 id 元素:
- 使用 Xpath 结合父节点等来定位。
BA:业务需求描述,如 AC
QA:自动化用命,如 Feature
Dev:业务语句的代码
https://
自动化测试就是要减少时间。
Gauge 自动化测试工具,由 ThoughtWork 研发,类似 cucumber
轻量的测试工具,
TDD —— BDD —— Guage
cucumber 可以用中文写
我们需要一个什么样的工具?
- 简单易用的
- 可维护的
- 可定制的
- 迅速的
http://getgauge.io
- 跨平台的测试框架
- 是 BDD 的
- 使用 markdown 语法,易于理解
- 支持各种语言实现脚本:C#, ruby, java
- 支持模块化的插件体系结构
- 语言实现的一致性
- 开源
/install.sh
gauge —install html-report
gauge —init java
使用 golang 开发,而 cucumber 使用 ruby 实现,性能上 gauge 会更高。
语法更简单,使用 markdown 转换其他方式显示更容易。