UI5-文档-4.29-Integration Test with OPA
如果我们想测试我们的应用程序的交互模式或更多的可视化特性,我们也可以编写一个集成测试。
我们还没有想过测试我们与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)
UI5-文档-4.29-Integration Test with OPA的更多相关文章
- 【转】(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration
原创至上,移步请戳:(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration 5.Animation Integration(动画集成) 动画 ...
- LTE 测试文档(翻译)
Testing Documentation 翻译 (如有不当的地方,欢迎指正!) 1 概述 为了测试和验证 ns-3 LTE 模块,文档提供了几个 test suites (集成在 ns- ...
- Next.js v4.1.4 文档中文翻译【转载】
最近想稍稍看下 React的 SSR框架 Next.js,因为不想看二手资料, 所以自己跑到 Github上看,Next.js的文档是英文的,看倒是大概也能看得懂, 但有些地方不太确定,而且英文看着毕 ...
- Spring Boot文档
本文来自于springboot官方文档 地址:https://docs.spring.io/spring-boot/docs/current/reference/html/ Spring Boot参考 ...
- Xamarin技术文档------VS多平台开发
此技术业余时间研究,仅供大家学习参考,不涉及深入研究,有一定开发基础的人员,应该都能较快上手. 一.简介 Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单.Xamarin的产品简 ...
- ABP文档 :Overall - Introduction
介绍 我们基于不同的需求创建不同的应用,但却在一次又一次地实现相同或相似的结构.至少在某种程度上,授权.验证.异常处理.日志.本地化.数据库连接管理.配置管理.审计日志属于通用的结构. 另外我们总是在 ...
- 【Win10 应用开发】自适应Toast通知的XML文档结构
老规矩,在开始之前老周先讲个故事. 话说公元2015年7月20日,VS 2015发布.于是,肯定有人会问老周了,C#6有啥新特性,我学不来啊.学不来的话你应该检讨.老周比较保守地计算一下,学会C# 6 ...
- Openstack api 学习文档 & restclient使用文档
Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...
- Android多媒体--MediaCodec 中文API文档
*由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不 ...
- tweenmax.js 文档
TweenMax 参考http://bbs.9ria.com/thread-214959-1-1.html TweenMax 可能是很多人都用的,包括我 但 是最近发现大量的运用就总会产生这样或那样的 ...
随机推荐
- .NET基金会成立
作者 Jonathan Allen ,译者 臧秀涛 发布于 2014年4月8日 随着.NET基金会的成立,微软在成为主要的开源参与者的道路上又前进了一步.该基金会的宗旨是“成为越来越多的开源.NET项 ...
- Codeforces Round #243 (Div. 2)——Sereja and Swaps
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012476429/article/details/24665103 题目链接 题意: 给定一个整数 ...
- Array对象(prototype)
- FastAdmin 浏览器 JS CSS 缓存如何更新?
由于代码修改,但文件名没有修改,因为浏览器对 JS 和 CSS 是缓存的,而且由于服务器无法控制客户端的缓存. 但是可以对 JS 和 CSS 的请求加上版本号,达到更新缓存的效果.
- RabbitMQ 知识点
mac下 rabbitmq 安装: brew命令 brew install rabbitmq 注意: rabbitmq的安装目录: /usr/local/Cellar/rabbitmq/3.6.6 r ...
- PHP 小技巧之__callStatic魔术方法使用
使用 PHP 框架时,经常会用到 ORM 模型查询数据库,有没有疑问:为啥有些 ORM 中的静态查询方法,不能通过函数追踪下去呢,很有可能就是使用了 __callStatic 魔术方法的小技巧 这里贴 ...
- 读取Apache访问日志,查看每一个独立客户端连接获得的字节数
ubuntu中apache2的日志文件位于: /var/log/apache2 代码: # coding=utf-8 import sys ''' 数据 127.0.0.1 - - [10/Jan/2 ...
- ApplicationEvent事件机制源码分析
<spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情> <服务网关zu ...
- 如何使input双击时不显示历史记录
原文地址:http://highping.iteye.com/blog/359428 HTML的输入框可以拥有自动完成的功能,当你往输入框输入内容的时候,浏览器会从你以前的同名输入框的历史记录中查找出 ...
- Python 天气预报+微信
""" Description: 需要提供以下三个信息,在申请到的微信企业号当中可以找到 agentid corpid corpsecret Author:Nod Dat ...