开源 | 携程机票BDD UI Testing框架 - Flybirds(上)

发表于:2022-2-11 09:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Liang    来源:携程技术

  一、背景
  携程机票从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报告

  五、环境搭建
  5.1 使用pip安装flybirds框架,过程中会自动安装所需的依赖包:https://github.com/ctripcorp/flybirds/blob/main/docs/relate_zhCN.md
pip3 install flybirds

  ·for mac
  在Mac/Linux系统下,需要手动赋予adb可执行权限:
cd {your_python_path}/site-packages/airtest/core/android/static/adb/mac
chmod +x adb

  ·for linux
cd {your_python_path}/site-packages/airtest/core/android/static/adb/linux
chmod +x adb

  5.2 使用脚手架创建项目
flybirds create


  六、快速上手
  6.1 运行演示
  为了帮助使用,项目创建时,会生成中英文的Android、iOS演示feature,方便用户参考。
features/test/
features/test/android
features/test/android/cn/everything.feature
features/test/android/en/everything.feature
features/test/iosfeatures/test/ios/cn/everything.feature
features/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 untested
23 scenarios passed, 0 failed, 0 skipped, 0 untested
117 steps passed, 0 failed, 0 skipped, 0 undefined, 0 untested
Took 5m21.300s
=====================================================================================
    Multiple Cucumber HTML report generated in:

    /Users/test/my_first_project/report/7eb9162a-9d42-4fde-a5d7-d8d4bca7a8d8/index.html
=====================================================================================

  接下来,了解下更多项目细节。

  6.2 项目结构
  config:配置文件。
  features:测试用例feature文件。
  pscript:自定义扩展。
  report:测试报告。

  6.3 features目录
  基础目录结构如下:
  test:存放feature文件,这些文件使用自然语言编写,最好由软件项目中的非技术业务、产品人员参与者编写。
  steps:存放场景中使用的step语句实现,“steps.py”中加载了所有的step语句模版。
features/
features/test/
features/test/everything.feature
features/steps/
features/steps/steps.py

  复杂些的目录结构参考如下:
features/
features/test/
features/test/list.feature
features/test/buy.feature
features/test/detail.feature
features/steps/
features/steps/steps.py

  6.4 feature文件
  feature文件包含用户动作,行为特征描述及预期结果的文本,行为特征部分使用Gherkin语言编写。
  feature文件,也称为功能文件,有两个目的:文档和自动化测试。
  以关键字开头(“功能”、“场景”、“场景大纲”、“当”、“而且”、“那么”……), 文件中的任何位置都允许使用注释行。
  功能 (Feature) 是被测试功能的一些合理的描述性标题,由场景组成。他们可以选择有一个描述、一个背景和一组标签。
  背景 (Background) 由一系列类似于场景的步骤组成。它允许你向功能的场景添加一些上下文。在此功能的每个场景之前执行。
  场景 (Senario) 标题应该是被测试场景的合理描述性标题,由一系列给定条件的步骤组成。
  场景大纲 (Senario Outline) 包含功能的详细描述,可以有一组预期条件和结果来配合你的场景步骤。
  以下是中文feature例子:

  以下是英文feature例子:

  6.5 step语句模板
  以下列出了部分模版 | 更多模版查阅:https://github.com/ctripcorp/flybirds/blob/main/docs/casedsl_zhCN.md

  6.6 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)
  在所有执行之前和之后运行。

  6.7 标签(Tags)
  可以使用tag标记不同的场景,方便有选择性的运行。
  下面是一个例子:

  运行有特定tag的场景,多个用逗号隔开:
flybirds run -T tag1,tag2

  ‘-’开头表示运行不包含某tag的场景:
flybirds run -T -tag

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号