首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货 | 基于 BDD 理念 UI 自动化测试在携程度假应用

说到自动化测试,其实在后端领域是非常普遍(主要是单元测试API 测试),但是在前端领域却应用非常少 (UI 自动化测试)。...总结如下: UI 自动化测试在测试金字塔模型中处在顶层 UI 自动化测试实现起来难度大成本高 UI 自动化测试能有效增加开发与测试人员信心 二、BDD UI 自动化测试理念 在说 BDD-UI-Testing...Step Definitons (步骤定义) .feature 文件中描述业务步骤要运行起来,需要根据业务场景定义操作行为。具体业务行为是由相对应自动化脚本来实现。...提供自动化项目模板,以供大家快速搭建一个自动化测试项目 提供公共步骤可以覆盖 80% 通用场景 对于某些复杂步骤则可能需要自己编写代码去实现 对接登录团队解决自动化测试登录出现风控问题等 ?...并不是这样,在 APP 端 (Native 或 CRN)我们通用可以使用同一套命令,使用 Cucumber 结合 AirTest 进行 APP 侧 BDD 自动化测试。

2.4K21

干货 | 行为驱动开发在携程机票前端研发流程中实践

一、困境 传统敏捷软件开发,产品经理根据用户诉求和商业目的撰写 PRD 文档,测试工程师基于 PRD 文档考虑边界值场景排列组合产出测试用例文档,软件工程师按照自己对需求理解实现代码,最后验收环节由手工测试完成...为了实现 BDD 中“测试用例能在自动化测试平台上执行”,需要用到 UI 自动化测试框架,我们使用了 Macaca。...Cucumber 提供了一套名为 Gherkin 语法规则,一个功能描述由多个场景组成,一个场景由多个语句组成。...MEC Server, 如 React 中把 state 发送出来,测试用例断言部分,直接校验界面数据,而不再通过 UI 自动化框架实现。...5)实现 Cucumber 场景片段复用 编写 feature 有一个痛点:有的固定语句组合会出现在多个 feature 中。

2.2K51
您找到你想要的搜索结果了吗?
是的
没有找到

分层测试

它是通过驱动苹果UIAutomationAndroidUiAutomator框架来实现双平台支持,同时绑定了Selenium WebDriver用于老Android平台测试。...GAutomator以引擎中元素为操作对象(如Unity中GameObject),通过操作GameObject实现UI自动化测试。...Step:实现场景步骤代码 Espresso https://developer.android.com/training/testing/espresso/ Espresso是Google开源自动化测试框架...它允许使用Cucumber编写结构化英语句子测试场景。 Frank要求测试时在应用程序内部编译,这意味着对源代码改变是强制性。...操作方式为使用CucumberJSON组合命令,将命令发送到在本地应用程序内部运行服务器上,并利用UISpec运行命令。 优点: 测试场景是在Cucumber帮助下,用可理解英语句子写

5.7K63

如何使用 SAP UI5 V2 ODataModel 模型 API 实现 deepCreate 场景以及局限性

在此之前,它不是挂起更改,即它不被 hasPendingChanges API 考虑,也不能被 resetChanges 删除; submitChanges API 不会触发非活动上下文创建请求。...deepCreate,即首先创建一个实体,并基于这个新创建实体,再次新创建一个子实体。 V2 ODataModel 不支持在同一API 请求里完成这个场景。...可以链接两个 API 调用来创建具有两个顺序请求父实体子实体,如以下示例所示,该示例同时创建了一个销售订单一个销售订单项目: var oParentContext, oModel = this.getView...该条目在绑定控件对应位置可见,无需先保存到后端再刷新绑定; 与 ODataModel#createEntry API 相比,这是一个优势。...,以便最终用户可以查看修改他们数据。

33610

BDD测试框架Cucumber

最早有TDD, 测试驱动开发, 而BDD 是行为驱动开发, 更加关注用户行为, BDD根据用户需求来开发, 能够加快开发速度, 降低PO, Tester, Developer之间耦合 保障开发功能...cucumber实现BDD 模式开发一个框架, 现在很多大公司使用这种开发模式,来快速迭代开发新feature 可以用来测试serviceAPI,Service与service之间调用,...保障系统可靠性 PO来负责提供feature, Developer来实现feature 需求 tester可以根据feature来写实现测试 增加了开发速度 How does cucumber...PO来负责提供feature, Developer来实现feature 需求 tester可以根据feature来写实现测试 Runcakes是cucumber来检验feature一个Driver...documentation Given Swagger API ui is available at swagger-ui.html When user invokes /api context

1.1K00

cucumber测试框架

因此,开始时,开发人员,项目经理,质量保证,用户验收测试人员产品所有者(股东)都齐聚一堂,集思广益,讨论应该传递哪些测试场景,以便成功调用此软件/应用程序。这样他们想出了一组测试场景。...有人说,这个框架非常适合UI自动化测试,他不 仅能把用例中测试步骤以非常友好形式展现出来,而且能够非常灵活构建场景。   ...Cucumber可以让人们用近似自然语言去描述Feature(什么是Feature在后面有讲述)场景,根据Feature驱动开发。用作软件技术人员非技术之间验收测试桥梁。它是一个命令行工具。...优点: Cucumber支持不同语言,例如Java、.net、Ruby 它充当业务与技术间桥梁角色。可以通过在纯英文文本中创建一个测试用例来实现这一点。...import cucumber.api.PendingException; import cucumber.api.java.en.And; import cucumber.api.java.en.Given

3.6K20

【腾讯 TMQ 】移动 APP 自动化测试框架对比

最大量实现自动化测试应该是单元测试, 最容易实现也最容易在早期发现问题; 其次是接口级测试, 以验证逻辑为目的进行自动化, 由于接口相对稳定, 自动化测试成本相对也可以接受; 自动化成本最大便是UI...这是一个包含APIJava库,用来创建功能性UI测试,还有运行测试执行引擎。该库自带Android SDK。 优点:它在运行访问不同进程时,会给JUnit测试案例特权。库由谷歌社区支持维护。...Calabash开源免费并支持Cucumber语言,Cucumber能让你用自然英语语言表述app行为,实现BDD(Behavior Driven Development,行为驱动开发)。...它允许使用Cucumber编写结构化英语句子测试场景。 Frank要求测试时在应用程序内部编译,这意味着对源代码改变是强制性。...操作方式为使用CucumberJSON组合命令,将命令发送到在本地应用程序内部运行服务器上,并利用UISpec运行命令。 优点: 测试场景是在Cucumber帮助下,用可理解英语句子写

6.3K11

移动APP自动化测试框架对比

最大量实现自动化测试应该是单元测试,最容易实现也最容易在早期发现问题;其次是接口级测试,以验证逻辑为目的进行自动化,由于接口相对稳定,自动化测试成本相对也可以接受;自动化成本最大便是UI级自动化测试...这是一个包含APIJava库,用来创建功能性UI测试,还有运行测试执行引擎。该库自带Android SDK。 优点:它在运行访问不同进程时,会给JUnit测试案例特权。库由谷歌社区支持维护。...Calabash开源免费并支持Cucumber语言,Cucumber能让你用自然英语语言表述app行为,实现BDD(Behavior Driven Development,行为驱动开发)。...它允许使用Cucumber编写结构化英语句子测试场景。 Frank要求测试时在应用程序内部编译,这意味着对源代码改变是强制性。...操作方式为使用CucumberJSON组合命令,将命令发送到在本地应用程序内部运行服务器上,并利用UISpec运行命令。 优点: 测试场景是在Cucumber帮助下,用可理解英语句子写

5.7K101

移动APP自动化测试框架对比

最大量实现自动化测试应该是单元测试,最容易实现也最容易在早期发现问题;其次是接口级测试,以验证逻辑为目的进行自动化,由于接口相对稳定,自动化测试成本相对也可以接受;自动化成本最大便是UI级自动化测试...这是一个包含APIJava库,用来创建功能性UI测试,还有运行测试执行引擎。该库自带Android SDK。 优点:它在运行访问不同进程时,会给JUnit测试案例特权。库由谷歌社区支持维护。...Calabash开源免费并支持Cucumber语言,Cucumber能让你用自然英语语言表述app行为,实现BDD(Behavior Driven Development,行为驱动开发)。...它允许使用Cucumber编写结构化英语句子测试场景。Frank要求测试时在应用程序内部编译,这意味着对源代码改变是强制性。...操作方式为使用CucumberJSON组合命令,将命令发送到在本地应用程序内部运行服务器上,并利用UISpec运行命令。 优点:测试场景是在Cucumber帮助下,用可理解英语句子写

4K20

测试兵器谱のCucumber-JVM框架篇

我们SDK项目作为 Java 测试项目,因此使用 Cucumber Java 语言实现版本:Cucumber-JVM Cucumber-JVM关键字 如上面所说,Cucumber核心语法是 Gherkin...Scenario Outline / 场景大纲 当有一种用例场景,存在大量重复性步骤描述,变化只是输入输出时候,非常适合用这个场景大纲结构,举个例子: Scenario Outline: 这是一个登录例子...步骤实现 Cucumber-JVM描述每一个场景(用例),背后都需要一个对于step步骤来实现这个描述,Cucumber-JVM还不能做到文字自动生成代码地步,目前很多关键字驱动框架在做类似的事情...当Cucumber-JVM在解析执行feature文件时,它将通过正则匹配方式寻找代码实现steps。...按照场景名称执行测试用例 命令:java cucumber.api.cli.Main --name 这是一个原生广告请求有table例子 features可以运行名称为“这是一个原生广告请求有table

1.5K10

浅谈BDD下自动化测试框架

由此BDD优势也就体现出来了: 更关注业务,以用户使用产品角度,描述用户行为以及预期结果 不同角色的人都可以参与需求定义及讨论,最终达成一致理解 使用同一种语言描述需求,及测试用例,很大程度上避免了因理解差异导致实现功能与需求不一致问题...Cucumber基于Ruby编写,支持Java.Net等多种开发语言。 基于CucumberBDD测试流程如下: ?....feature:定义需求场景及步骤描述 步骤定义:步骤描述具体实现,即可执行步骤代码 运行测试:执行测试用例 生成报告:Cucumber支持生成多种格式测试报告 如何编写feature文件 .feature...答:功能测试集成场景测试使用了这个框架,单元测试是开发做,没有用这个框架。 问2:微课堂前面提到storytaks是什么意思?...问3:为什么选择了Cucumber?有没有做API自动化测试?使用什么工具框架robootframework?

6.3K30

Cucumber测试实践

然而并不是所有的行为都能够称之为行为,其中需要意识到行为实现是有区别的,我们希望记录是具体用户行为而不是这个行为中每一步实践。...Steps之后,我们很自然会有这样一种想法:如果我们抛开测试设计测试用例,从实际应用场景出发,利用Steps组建成一个真实可能发生场景形成测试Feature文件。...因为我们在设计编写Steps时候遵行了行为原则,并且实现了每个行为自我验证,那是不是就可以证明当我组建这个Feature文件跑通那么整个场景我就已经验证完毕了,如下图所示: 三、关于E2E测试...从Cucumber+WebdriverIO到最近Cucumber+CypressCucumber+Testcafe。以实现角度来说,这样组合看起来没有什么问题,甚至在刚刚开始还比较好用。...同时UI测试由于大量智能缺失,很难匹配上人眼测试粒度效果,所以可以看到大量UI测试都是固定化流程不断重复,很多报错也是来自脚本本身而不是产品本身。整体来说无论怎么做UI测试性价比很低。

85410

接口自动化测试框架Karate入门

来源:http://www.uml.org.cn/ 在这篇文章中,我们将介绍一下开源Web-API自动化测试框架——Karate介绍 Karate是基于另一个BDD测试框架Cucumber来建立,并且共用了一些相同思想...文件放在同一个目录下,遇到庞大工程时候方便管理,不必在文件夹src/test/javasrc/test/resources文件夹之间切换,可以在pom.xml <testResource...文件以Feature关键字开头,在同一行跟着所测试功能名称 一个用例文件包含不同测试场景,每个场景都以关键字Scenario开头,并且包含多个步骤。...这些步骤包含关键字Given,When,Then,AndBut 有关CucumberGherkin结构更多信息,请点击此处 Feature: Learn How to use Karate for...我们将使用@CucumberOptions注解指定Feature文件具体位置 package demo;import com.intuit.karate.junit4.Karate;import cucumber.api.CucumberOptions

2.9K30

线程池使用场景代码实现

前言: 大家周末好,今天给大家带来一篇技术文章,是关于线程池实现使用场景;我相信大家在公司里面的代码里面经常看到这个线程池用法,或者甚至大家可能会听到内存池、对象池、连接池等这些专业术语,反正就很多带池专业术语...16x128,计算下来大概在2048个线程 所以百万级个客户端都分配开一个线程的话,那内存资源肯定是不够,所以这涉及到我们线程池了,这也是为什么在这种场景下要使用线程池了!...为了帮助大家更好理解线程池这个概念,我们还是举一个生活当中实际场景吧;去银行存钱或者办理相关业务,这个大家都不陌生吧,你到了银行里面,一般来说的话,都要排队在窗口等待前面的人把业务办理完,才能够轮到你来办理你想要办理业务...;避免创建线程与销毁代价 2、线程池实现模板步骤: 其实这个线程池实现大概流程步骤都差不多,如果大家平时仔细看公司代码或者说自己去实现一个线程池的话,大概实现模板如下: 任务队列(前来办理业务的人)...struct nWorker *workers; pthread_mutex_t mutex;//互斥锁 pthread_cond_t cond;//条件变量 }ThreadPool; 链表插入删除模板

34220

线程池使用场景代码实现

前言: 大家周末好,今天给大家带来一篇技术文章,是关于线程池实现使用场景;我相信大家在公司里面的代码里面经常看到这个线程池用法,或者甚至大家可能会听到内存池、对象池、连接池等这些专业术语,反正就很多带池专业术语...16x128,计算下来大概在2048个线程 所以百万级个客户端都分配开一个线程的话,那内存资源肯定是不够,所以这涉及到我们线程池了,这也是为什么在这种场景下要使用线程池了!...为了帮助大家更好理解线程池这个概念,我们还是举一个生活当中实际场景吧;去银行存钱或者办理相关业务,这个大家都不陌生吧,你到了银行里面,一般来说的话,都要排队在窗口等待前面的人把业务办理完,才能够轮到你来办理你想要办理业务...;避免创建线程与销毁代价 2、线程池实现模板步骤: 其实这个线程池实现大概流程步骤都差不多,如果大家平时仔细看公司代码或者说自己去实现一个线程池的话,大概实现模板如下: 任务队列(前来办理业务的人)...struct nWorker *workers; pthread_mutex_t mutex;//互斥锁 pthread_cond_t cond;//条件变量 }ThreadPool; 链表插入删除模板

25930

node-addon-api设计实现

但是napi用起来非常冗余麻烦,每一步都需要我们自己去控制,所以又有大佬封装了面向对象版本api(node-addon-api),使用上方便了很多,本文分析一下node-addon-api设计思想...ObjectString实现是类似的,他们都是继承Value类,在内部封装了napi_envnapi_value变量。所以我们看看Object::Set实现。...这个Env自动转换是类似的,String继承了Value,而Value重载了类型napi_value。...所以我们看到Method入参类型napi是不一样。最后Method执行完返回时候,同样是先回到node-addon-api。...实现原理思想,实现代码将近万行,虽然有很多类似的逻辑,但是也有些比较复杂封装,有兴趣同学可自行阅读。.

1.1K40

多线程简单实现应用场景

上图 我定义了2000000数据量,可以看到单线程执行时间为6520毫秒,多线程(3个)执行时间为3000毫秒左右,执行速度快了一半,所以在大数据量查询插入时可以根据需求使用多线程。...(注意线程同步线程锁使用:synchronized,否则可能会出现多线程对同一数据进行重复操作,违背数据原子性情况) 上代码,直接拷贝两个类代码即可执行测试多线程使用 getData(主执行类...System.err.println("下面为单线程执行时间------------------------");         long time = new Date().getTime();// 获得执行请求开始...list2 = d.getData2();         List> list3 = d.getData3();                  // 输出数量执行时间

20120

基于场景选择微服务API范式:REST、GraphQL、WebhooksgRPC

REST对于相当大范畴API来说是一个非常好标准,但在一些需要API设计风格更细致入微场景,还有其他标准可供选择。...RPC有其自身优点缺点,事实上,这些缺点(同时也是SOAP等系统固有的问题)正是REST开发实现关键。 gRPCREST之间一个关键区别是RPC定义其交互方式协商机制。...八、Webhook示例: Foursquare,SendGrid WebHooks是一个相对简单有效设计理念,因此,其实现同样简单有效。...当深入WebHooks实现细节时,我们通常会看到更复杂集成场景。例如,SendGrid使用Webhook发送事件数据更新给订阅客户,向其告知对许多统计指标的变化。...如果API主要用于更新客户端数据场景下,最好使用Webhooks。

2.6K30

SAP UI5 本地开发如何实现 XML JavaScript 代码自动完成嵌入式 API 文档自动显示

文章目录 本文写作动机 XML 视图元素文档显示 控制器里 JavaScript 代码 API 文档 JavaScript 控制器代码里方法自动提示补全功能 UI5 Explorer XML 视图里元素名称自动提示自动完成...sap.ui.define 里导入其他 SAP UI5 库模块自动完成 XML 控件 id 自动补全功能 manifest.json 文件自动补全 Ctrl + 鼠标左键直接跳转到自定义方法实现源代码去...XML 视图控件事件处理函数自动导航功能 自动导入调用某个 API 必须 SAP UI5 Module 总结 本文写作动机 笔者这篇教程文章,有学习者在评论区留言: SAP UI5 应用开发教程之八...- 多语言支持

70620
领券