如果我们想测试我们的应用程序的交互模式或更多的可视化特性,我们也可以编写一个集成测试。

我们还没有想过测试我们与app的交互,所以在这一步中,我们将在点击“Say Hello with dialog”按钮时检查对话框是否真正打开。我们可以通过OPA5轻松实现这一点,它是SAPUI5的一个特性,易于设置,并且基于JavaScript和QUnit。使用集成和单元测试,并在持续集成(CI)环境中一致地运行它们,我们可以确保不会意外地破坏应用程序或在现有代码中引入逻辑错误。

请注意:在本教程中,我们主要关注测试实现的一个简单用例。如果您想了解更多关于OPA测试的信息,请参阅我们的测试教程Step 6: A First OPA Test.

Preview

An OPA test opens the "Hello" dialog from step 16

Coding

You can view and download all files at Walkthrough - Step 29.

Folder Structure for this Step

我们在测试文件夹下面添加了一个新的文件夹集成,我们把新的测试用例放在这里。帮助构建此类集成测试的页面对象被放在我们现在也创建的pages子文件夹中。

webapp/test/integration/NavigationJourney.js (New)

/*global QUnit, opaTest*/

sap.ui.define([
"sap/ui/test/opaQunit",
"./pages/App"
],function(){
"use strict"; QUnit.module("Navigation"); opaTest("Should open the Hello dialog",function(Given,When,Then){ // Arrangements
Given.iStartMyAppInAFrame(sap.ui.require.toUrl("sap/ui/demo/walkthrough/test/mockserver")+".html"); //Actions
When.onTheAppPage.iPressTheSayHelloWithDialogButton(); // Assertions
Then.onTheAppPage.iShouldSeeTheHelloDialog(); // Cleanup
Then.iTeardownMyAppFrame();
});
});

让我们先从旅行开始。A journey包含一系列属于相同上下文的集成测试,例如在app中导航。与QUnit测试实现类似,OPA5使用QUnit,这就是为什么我们首先设置一个将显示在结果页面上的QUnit模块导航。

opaTest函数是用OPA定义集成测试的主要方面。它的参数定义了一个测试名称和一个回调函数,该函数使用以下OPA5 helper对象执行,以编写读起来像用户故事的有意义的测试。

Given

在给定的对象上,我们可以调用像iStartMyAppInAFrame这样的安排函数,以便在一个单独的iFrame中加载应用程序进行集成测试。

When

包含可执行的自定义操作,以使应用程序处于可测试预期行为的状态。

Then

包含检查应用程序中特定星座的自定义断言和再次删除iFrame的teardown函数。

在我们的测试中,我们创建了一个非常简单的测试,它在iFrame中启动测试页面。在应用程序中,我们触发一个单击按钮,然后期望对话框随后打开。最后,我们再次从测试页面中删除iFrame。

正如您所看到的,测试用例读起来就像一个用户故事,我们实际上还不需要实现方法来理解测试用例的含义。这种方法称为“行为驱动开发”Behavior Driven Development或简称BDD,在“敏捷软件开发”中非常流行。

webapp/test/integration/pages/App.js (New)

sap.ui.define([
"sap/ui/test/Opa5",
"sap/ui/test/actions/Press"
],function(Opa5,Press){
"use strict"; var sViewName ="sap.ui.demo.walkthrough.view.HelloPanel"; Opa5.createPageObjects({
onTheAppPage:{
actions:{
iPressTheSayHelloWithDialogButton:function(){
returnthis.waitFor({
id:"helloDialogButton",
viewName: sViewName,
actions:newPress(),
errorMessage:"Did not find the 'Say Hello With Dialog' button on the HelloPanel view"
});
}
}, assertions:{
iShouldSeeTheHelloDialog:function(){
returnthis.waitFor({
controlType:"sap.m.Dialog",
success:function(){
// we set the view busy, so we need to query the parent of the app
Opa5.assert.ok(true,"The dialog is open");
},
errorMessage:"Did not find the dialog control"
});
}
}
}
});
});

page对象的实现保存了我们在journey中刚刚调用的助手函数。我们需要 sap.ui.test中的OPA5。测试名称空间并使用助手函数createPageObjects定义页面对象。我们传入一个对象,该对象带有页面在theapppage上的键和两个部分:操作和断言。

在页面对象的actions部分,我们定义了一个函数来单击“Hello”对话框按钮。这是在OPA5中使用waitFor语句完成的,它基本上是一个循环,检查定义为参数的条件。如果满足条件,则执行成功回调,如果测试失败,因为没有满足条件,则errorMessage属性中的文本将显示在结果页上。

我们定义了一个waitFor语句,用于检查类型为sap.m.Button的控件。一旦在app页面上找到一个按钮,就会执行成功处理程序,并使用jQuery在找到的第一个按钮上触发一个tap事件。这应该会打开HelloDialog,类似于手动单击按钮。

在断言部分,我们定义了另一个waitFor语句,用于检查sap.m.Dialog对话框控件存在于app的DOM中,当找到对话框时,测试成功,我们可以通过调用一条ok语句和一条有意义的消息来立即确认。

webapp/test/integration/opaTests.qunit.html (New)

<!DOCTYPE html>
<html>
<head>
<title>Integration tests for SAPUI5 Walkthrough</title>
<metahttp-equiv='X-UA-Compatible'content='IE=edge'>
<metacharset="utf-8"> <script
id="sap-ui-bootstrap"
src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
data-sap-ui-resourceroots='{
"sap.ui.demo.walkthrough": "../../"
}'
data-sap-ui-preload="async">
</script> <scriptsrc="https://openui5.hana.ondemand.com/resources/sap/ui/qunit/qunit-2-css.js"></script>
<scriptsrc="https://openui5.hana.ondemand.com/resources/sap/ui/thirdparty/qunit-2.js"></script>
<scriptsrc="https://openui5.hana.ondemand.com/resources/sap/ui/qunit/qunit-junit.js"></script> <script>
/* global QUnit */ QUnit.config.autostart =false; sap.ui.getCore().attachInit(function(){
sap.ui.require([
"sap/ui/demo/walkthrough/test/integration/NavigationJourney"
],function(){
QUnit.start();
});
});
</script> </head>
<body>
<divid="qunit"></div>
<divid="qunit-fixture"></div>
</body>
</html>

这个文件包含我们对应用程序的所有OPA测试的测试套件。我们对应用程序使用相同的名称空间。

然后,通过SAPUI5中的脚本标记加载基本的QUnit功能,以便执行测试过程。我们在上面定义的NavigationJourney也被加载,其中的测试函数立即执行。

当您调用webapp/test/integration/ opatest .qunit时。您的项目在服务器上的html页面上,您应该看到QUnit布局,一个测试“应该看到Hello对话框”将立即执行。它将在页面右下角的一个小iFrame中加载应用程序。在那里您可以看到测试在应用程序上执行的操作,如果一切正常,按钮单击将被触发,然后将显示一个对话框,测试用例是绿色的。

Conventions

  ▪OPA测试位于应用程序的webapp/test/integration文件夹中。

  ▪使用页面对象和行程来构造OPA测试。

Parent topic: Walkthrough

Previous: Step 28: Unit Test with QUnit

Next: Step 30: Debugging Tools

Related Information

Integration Testing with One Page Acceptance Tests (OPA5)

Samples: sap.ui.test.Opa5

Testing

UI5-文档-4.29-Integration Test with OPA的更多相关文章

  1. 【转】(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration

    原创至上,移步请戳:(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration 5.Animation Integration(动画集成) 动画 ...

  2. LTE 测试文档(翻译)

    Testing Documentation 翻译 (如有不当的地方,欢迎指正!)     1 概述   为了测试和验证 ns-3 LTE 模块,文档提供了几个 test suites (集成在 ns- ...

  3. Next.js v4.1.4 文档中文翻译【转载】

    最近想稍稍看下 React的 SSR框架 Next.js,因为不想看二手资料, 所以自己跑到 Github上看,Next.js的文档是英文的,看倒是大概也能看得懂, 但有些地方不太确定,而且英文看着毕 ...

  4. Spring Boot文档

    本文来自于springboot官方文档 地址:https://docs.spring.io/spring-boot/docs/current/reference/html/ Spring Boot参考 ...

  5. Xamarin技术文档------VS多平台开发

    此技术业余时间研究,仅供大家学习参考,不涉及深入研究,有一定开发基础的人员,应该都能较快上手. 一.简介 Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单.Xamarin的产品简 ...

  6. ABP文档 :Overall - Introduction

    介绍 我们基于不同的需求创建不同的应用,但却在一次又一次地实现相同或相似的结构.至少在某种程度上,授权.验证.异常处理.日志.本地化.数据库连接管理.配置管理.审计日志属于通用的结构. 另外我们总是在 ...

  7. 【Win10 应用开发】自适应Toast通知的XML文档结构

    老规矩,在开始之前老周先讲个故事. 话说公元2015年7月20日,VS 2015发布.于是,肯定有人会问老周了,C#6有啥新特性,我学不来啊.学不来的话你应该检讨.老周比较保守地计算一下,学会C# 6 ...

  8. Openstack api 学习文档 & restclient使用文档

    Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...

  9. Android多媒体--MediaCodec 中文API文档

    *由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不 ...

  10. tweenmax.js 文档

    TweenMax 参考http://bbs.9ria.com/thread-214959-1-1.html TweenMax 可能是很多人都用的,包括我 但 是最近发现大量的运用就总会产生这样或那样的 ...

随机推荐

  1. FTP文件服务器代码

    文件操作的核心代码: /// <summary> /// FTP文件信息类(帮助进行文件的上传于下载) /// </summary> [Serializable()] publ ...

  2. npm bower gulp

    npm即nodejs package manager ,是nodeJs的包管理工具,使用前需安装nodeJs(https://www.npmjs.com.cn/getting-started/inst ...

  3. FineUI与百度地图简单示例 (转帖)

    http://www.fineui.com/bbs/forum.php?mod=viewthread&tid=4191&extra=page%3D1 前台代码 <%@ Page ...

  4. ORACLE删除某用户下所有对象

    ORACLE删除某用户下所有对象 2013-10-26 15:50 4996人阅读 评论(1) 收藏 举报   --.sql脚本 --唯一注意的是下面的D:\dropobj.sql 为操作的.sql; ...

  5. 异步FIFO空满设计延迟问题

    由于设计的时候读写指针用了至少两级寄存器同步,同步会消耗至少两个时钟周期,势必会使得判断空或满有所延迟,这会不会导致设计出错呢? 异步FIFO通过比较读写指针进行满空判断,但是读写指针属于不同的时钟域 ...

  6. Python网络爬虫-Scrapy框架

    一.简介 Spider是所有爬虫的基类,其设计原则只是为了爬取start_url列表中网页,而从爬取到的网页中提取出的url进行继续的爬取工作使用CrawlSpider更合适. 二.使用 1.创建sc ...

  7. 杂项:Nuget

    ylbtech-杂项:Nuget Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展.在使用Visual Studio开发基于.NET Framework的应用时,Nug ...

  8. h3c端口汇聚的几种情况-S5500-S5048

    S5500和S5048E聚合的几种情况,分享下:1.S5048E用手工的话,S5500用静态方式2.S5048E用静态的话,S5500用动态方式3.S5048E和S5048E聚合的话,用相同方式即可. ...

  9. JedisCluster模式尝试进行批量操作

    搭建完redis集群后,可以通过jedis的JedisCluster来访问Redis集群,这里列出使用jedisCluster的spring bean配置方式:   <bean id=" ...

  10. Java 运算符-=,+=混合计算详解

    +=与-=运算符混合计算解析: int x = 3; x += x -= x -= x += x -= x; 详解:算数运算按运算符优先级运算,从右至左计算. 1. x=x-x; 实际为 3 - 3 ...