背景
携程机票从2018年年中正式引入BDD,至今已3年多,成为外部首选的麻利开发技术。
Flybirds 是一套基于BDD模式的前端UI自动化测试框架,提供了一系列开箱即用的工具和欠缺的文档,当初逐渐稳固,成为机票外部首选的BDD-UI-Testing测试框架。
为什么开源
- 分享咱们的BDD技术计划
- 期待业内应用BDD技术的同行通过开源社区与咱们进行更深刻的交换
本文将从个性介绍、环境搭建、应用帮忙、自定义扩大、继续集成、发版打算这几个方面对框架进行介绍。
Flybirds
- 基于Behave,实现BDD中“自然语言测试用例文档”和“自动化测试代码”关联须要用到反对BDD工具。
- 基于Airtest,实现BDD中“测试用例能在自动化测试平台上执行”须要用到UI自动化测试框架。
- 基于Multiple-cucumber-html-reporter,实现可视化的测试报告
个性
应用Flybirds你可能实现大部分的手机端自动化操作,以下是一些帮忙入门的个性形容:
- 基于BDD模式,类自然语言语法
- 反对自动化APP操作、表单提交、UI元素校验、键盘输入、Deeplink跳转等
- 默认反对英文、中文两种语言,反对更多语言扩大
- 插件式设计,反对用户自定义自动化扩大
- 提供cli脚手架,疾速搭建我的项目
- 提供html报告
环境搭建
- 应用
pip
装置flybirds框架,过程中会主动装置所需的 依赖包
pip3 install flybirds
在Mac/Linux零碎下,须要手动赋予adb可执行权限
for mac
cd {your_python_path}/site-packages/airtest/core/android/static/adb/macchmod +x adb
for linux
cd {your_python_path}/site-packages/airtest/core/android/static/adb/linuxchmod +x adb
- 应用脚手架创立我的项目
flybirds create
疾速上手
运行演示
为了帮忙应用,我的项目创立时,会生成中英文的Android、iOS演示feature,不便用户参考。
features/test/features/test/androidfeatures/test/android/cn/everything.featurefeatures/test/android/en/everything.featurefeatures/test/iosfeatures/test/ios/cn/everything.featurefeatures/test/ios/en/everything.feature
以“Android”为例
- 执行命令
adb devices
, 查看设施列表中是否蕴含测试设施 开始运行
cd {PATH_TO_PROJECT_FOLDER}flybirds run -P features/test/android
框架会通过
flybirds_config
中配置的packagePath
主动下载测试包并装置(请确保手机曾经关上”容许装置未知起源“ )
运行后果如下
11 features passed, 0 failed, 0 skipped, 0 untested23 scenarios passed, 0 failed, 0 skipped, 0 untested117 steps passed, 0 failed, 0 skipped, 0 undefined, 0 untestedTook 5m21.300s===================================================================================== Multiple Cucumber HTML report generated in: /Users/test/my_first_project/report/7eb9162a-9d42-4fde-a5d7-d8d4bca7a8d8/index.html=====================================================================================
接下来,理解下更多我的项目细节
我的项目构造
- config:配置文件
- features:测试用例feature文件
- pscript:自定义扩大
- report:测试报告
features目录
根底目录构造如下
- test:寄存feature文件,这些文件应用自然语言编写,最好由软件我的项目中的非技术业务、产品人员参与者编写。
steps:寄存场景中应用的step语句实现,“steps.py”中加载了所有的step语句模版
features/features/test/features/test/everything.featurefeatures/steps/features/steps/steps.py
简单些的目录构造参考如下
features/features/test/features/test/list.featurefeatures/test/buy.featurefeatures/test/detail.featurefeatures/steps/features/steps/steps.py
feature文件
feature文件蕴含用户动作,行为特征描述及预期后果的文本,行为特色局部应用Gherkin语言编写。
feature文件,也称为性能文件,有两个目标:文档和自动化测试。
以关键字结尾(“性能”、“场景”、“场景纲要”、“当”、“而且”、“那么”……), 文件中的任何地位都容许应用正文行。
性能(Feature) 是被测试性能的一些正当的描述性题目,由场景组成。他们能够抉择有一个形容、一个背景和一组标签。
背景(Background) 由一系列相似于场景的步骤组成。它容许您向性能的场景增加一些上下文。在此性能的每个场景之前执行。
场景(Senario) 题目应该是被测试场景的正当描述性题目,由一系列给定条件的步骤组成
场景纲要(Senario Outline) 蕴含性能的详细描述,能够有一组预期条件和后果来配合您的场景步骤
以下是中文feature例子
以下是英文feature例子
step语句模板
以下列出了局部模版 | 更多模版查阅
语句模板 | 语义 |
---|---|
跳转到 [] | 跳转到指定的url地址 |
期待 [] 秒 | 期待一段时间 |
页面渲染实现呈现元素 [] | 进入新的页面时查看指定元素是否渲染实现 |
点击 [] | 点击指定属性的元素 |
在 [] 中输出 [] | 在指定选择器中输出字符串 |
向 [] 查找 [] 的元素 | 向指定方向查找指定属性的元素 |
全屏向 [] 滑动 [] | 全屏向指定方向滑动指定间隔 |
存在 [] 的文案 | 查看页面中存在指定的字符串 |
存在 [] 的元素 | 查看页面中存在指定属性的元素 |
元素 [] 隐没 | 查看页面中指定属性的元素在指定工夫内隐没 |
全屏截图 | 保留以后屏幕图像 |
开始录屏 | 开始录制视频 |
完结录屏 | 完结录制视频 |
装置APP [] | 装置APP |
启动APP [] | 启动APP |
Hooks
用户可在以下文件中定义hooks
pscript/dsl/step/hook.py
before_step(context, step), after_step(context, step)
在每个步骤(step)之前和之后运行
before_scenario(context, scenario), after_scenario(context, scenario)
在每个场景(senario)之前和之后运行
before_feature(context, feature), after_feature(context, feature)
在每个性能文件(feature)之前和之后运行
before_tag(context, tag), after_tag(context, tag)
在用给定名称标记(tag)的局部之前和之后运行
before_all(context), after_all(context)
在所有执行之前和之后运行
标签(Tags)
能够应用tag标记不同的场景,不便有选择性的运行。
上面是一个例子
运行有特定tag的场景,多个用逗号隔开
flybirds run -T tag1,tag2
‘-’结尾示意运行不蕴含某tag的场景
flybirds run -T -tag
运行前查看
请确保配置的测试设施可能失常连贯
- Android: 执行命令
adb devices
, 查看设施列表中是否蕴含测试设施 - iOS:以
tidevice
库举例,执行命令tidevice list
,查看设施列表中是否蕴含测试设施
Android设施连贯 Q&A
- 请先装置手机对应品牌的官网驱动,确保能应用电脑对手机进行USB调试
- 确保曾经关上了手机中的"开发者选项",并且关上"开发者选项"内的"容许USB调试"
- 局部手机须要关上"容许模仿地位"、"容许通过USB装置利用"
- 敞开电脑上曾经装置的手机助手软件,能防止绝大多数问题,请务必在工作管理器中手工完结手机助手过程
iOS设施连贯 Q&A
- 请先筹备一台macOS ,应用xcode部署 iOS-Tagent 胜利后,可能在mac或windows机器上连贯到iOS手机。请点击链接下载我的项目代码到本地进行部署。
- mac 环境通过 Homebrew 装置iproxy
brew install libimobiledevice
- windows 环境装置itunes
- Android: 执行命令
下载安装测试包
- Android:框架会通过
config
中配置的packagePath
主动下载测试包并装置(请确保手机曾经关上”容许装置未知起源“ )。也可手动下载安装:下载地址 iOS:
- 请手动下载演示APP进行装置:下载地址
- 开启wdaproxy:
`
shell tidevice --udid
$udid wdaproxy -B $web_driver_angnt_bundle_id -p $port`
- Android:框架会通过
运行参数
在终端输出以下内容来查看flybirds运行我的项目时反对的操作
flybirds run --help
run
执行features目录下所有的feature文件
--path, -P
指定须要执行的feature汇合,能够是目录,也能够指定到具体feature文件,默认是 ‘features’ 目录.
示例:
flybirds run -P ./features/test/demo.feature
--tag, -T
运行有特定tag的场景,多个用逗号隔开,‘-’结尾示意不运行蕴含此tag的场景
flybirds run -T tag1,tag2,-tag3,tag4
--format, -F
指定生成测试后果的格局,默认是 json.
示例:
#默认flybirds run --format=json
配置参数
提供了丰盛的配置项 | 帮忙文档
必须配置项:deviceId packageName。
连贯IOS设施时,须要额定配置webDriverAgent、platform。
报告(report)
报告蕴含汇总Summary和性能(feature)、场景(senario)的执行后果,对于失败的场景(senario),报告中会展现过后的屏幕图像和视频, 上面是一个例子。
自定义step语句模板
在编写Feature的过程中,可能会遇到提供的公共语句不能满足本身我的项目的需要,须要自定义语句。比方:须要对接某个外部工具API,此时须要用到自定义语句性能。
自定义语句性能会用到python,如果你不理解这门编程语言,也不必要太放心,因为只会应用到最根底的python语法,这并不会太难。
应用办法
- 进入我的项目目录"psscript/dsl/steps"
- 新建.py文件来编写自定义语句
- 在feature/steps/steps.py中import该.py文件
示例代码如下
对于团队外部通用的自定义性能,能够思考创立一个extend package,flybirds反对动静加载,package命名蕴含“-flybirds-plugin”即可。
自定义框架扩大
实践上BDD-UI-Testing 能够实用在所有端,比方:APP、Web、小程序。
框架的插件式设计模式,保留了良好的扩大,以后版本只凋谢了APP端反对,将来会逐渐凋谢更多,上面是两个例子供大家参考。
减少web端扩大
- 在
plugins.default
下增加本人的web包 - 增加web对应的实现。比方
page.py,element.py
,如果须要减少其余的插件实现类,只须要在GlobalContext
类中增加对应的名称。 - 在
plugin.event
下增加本人的web包。 - 在
event.web
包下重写或者新增类,比方重写run
事件能够在plugin.event.web
上面增加"run.py",具体实现逻辑可参照已有的run.py
。 - 在我的项目配置文件"flybirdes_config.json"配置
device_info.platform
值为"web"。
批改以后APP端扩大
可通过配置"plugin_info.json"对已有的plugins进行批改(只反对批改不反对新增),比方你心愿对plugins上面
ios.app
进行批改:- 能够在本地创立一个本人 app.py
在plugin_info.json对应平台中增加如下配置:
"app": { "path": "{local_path}/app.py", "ns": "app.plugin" }
{local_path} 为本地门路,"ns"为包名,留神包名的唯一性
其余语种反对
flybirds能够反对40几种语言,在以下文件中减少公共办法的语言配置即可。
flybirds/core/dsl/globalization/i18n.py
示例代码如下
继续集成
cli提供的命令行执行模式,能够十分不便退出各种继续集成工具.
以Jenkins为例:
# Inside the jenkins shell commandcd {PATH_TO_PROJECT_FOLDER}# Runflybirds run -P ./features/test/everything.featurecp -R reports $WORKSPACE
发版打算
咱们将依照 SemVer 版本控制标准进行发版。逐渐新增性能和代码优化,十分欢迎您退出到咱们的共建打算中,在 GitHub 上提出您的贵重倡议,以及在应用时遇到的所有问题,咱们也会对此每周进行一次小版本的迭代。您也能够在这里给咱们精力反对,点上一颗 Star。
- GitHub地址:https://github.com/ctripcorp/...
- PyPI地址:https://pypi.org/project/flyb...