中秋、国庆是中国传统节日,为庆祝双节到来,fun88网东莞金码为社...
东莞fun88网作为国内成立最早、规模最大的IT职业教育机构和北京大...
学什么技术有前途?
你是否想创业?但是感觉无处下手你是否开过淘宝店?但是销量惨淡你...
新媒体
高中生学什么有好的发展? 道路千万条 技术第一条 技能强 文凭硬...
中专学什么技术发展好 学IT技术,做企业争抢紧缺人才! ...
大运营时代的到来,深度打造网络营销复合人才 多渠道运营,紧贴企业...
一是实现和维护验收测试的技术门槛。理想情况下,验收测试最好可以模拟用户与应用程序的真实交互,因此如果有图形界面的话,验收测试理应通过这个界面和系统打交道。然而,直接通过GUI进行测试会遇到几个问题:界面变化速度很快、场景的准备相对复杂、拿到测试结果较难等。比如一个典型的WEB应用程序,如果通过GUI测试,那么一般需要解析HTML标签来填写参数,提交表单,最后再次通过解析来获取系统的返回值。如果测试代码中充斥着操作HTML的细节,测试的可读性就会大大下降,验收测试本身也更脆弱,在需求变更时反而会拖慢进度。
二是交付团队工作方式的变化。在传统团队中,需求分析、开发和测试是独立而又顺序的过程。就算能形成详细的需求文档,三方对同一段文字可能都有自己的理解。结果经常出现偏差,需求分析人员抱怨开发人员没有正确理解需求文档,开发人员抱怨需求文档不清晰、抱怨测试人员故意挑刺。敏捷实践和验收测试的出现缓解了这一问题,通过预先定义验收规格,减少文字上的误解,明确了开发工作的完成标准。不过这种思维方式的转变很难一蹴而就,需要交付团队及其利益关系人共同持续努力才能成功。
三是对组织的环境、配置管理及部署流程的挑战。当引入自动化验收测试后,对整个部署流水线的自动化程度会有更高要求。比如部署流水线应该能够自动将应用程序部署到待测试的环境中。如果应用程序依赖数据库,那么还应该能够部署数据库schema。另外一些运行时配置也需要通过脚本完成设置。这当中除了脚本准备之外,组织的环境管理也是要能跟上的。一般情况下,稍微大一些的组织都是有专门的运维团队(而非交付团队)来管理硬件设备和其配置的。因此,这个问题一般也涉及多个团队来协作解决。
面对这三座大山和进度压力,新手团队可能会感慨“信息量略大”而止步不前。这时不妨考虑各个击破,三个问题中的工作方式转变涉及的利益干系人最多,难度也最大;环境管理问题虽然涉及不同团队,但一般还是技术部门内的问题,关起门来好商量;验收测试的实现/维护主要是技术问题,相对最简单。如果时间和资源确实有限,不妨考虑牺牲一部分验收测试的有效性,采用简单的非端到端验收测试,在自动化部署流程方面也可以做一些折中,集中力量转变工作方式。当整个工作已经进入节奏,再去改进某个具体环节时就顺利很多了。团队只要愿意迈出一小步,也能获得很大的价值。
过渡方案:相对简单的非端到端验收测试
如果团队的技术积累还不足,又没有足够的资源,不妨考虑简单一些的验收测试策略作为过渡方案。非端到端的验收测试是指直接调用应用程序内部的逻辑结构来驱动测试。由于测试代码和产品代码都使用同一种语言编写,可以省去比较繁琐的数据格式解析。而在准备测试数据和场景时,直接调用内部逻辑块一般也更方便。以典型的使用SpringFramework的Java WEB应用程序为例,团队可以采用和集成测试类似的基础架构来编写非端到端的验收测试。
这里所说的集成测试的目的是验证应用程序与外部服务的连接能否正常工作。这与应用程序实现的具体功能关系不大,因此一般只加载必需的ApplicationContext。
图表 1 集成测试
非端到端的验收测试可以采用和集成测试一样的测试基础架构,这样你就可以使用熟悉的测试库了,不同的是需要加载整个ApplicationContext以尽可能模拟应用程序被部署后的情况。
图表 2 加载整个上下文
由于可以访问整个ApplicationContext中的任一对象,我们可以通过访问应用程序的内部组件来执行测试,比如应用层的某个Service。但需要注意的是,选取的组件离UI层越远,其模拟真实用户交互的有效性就越差,而且受内部实现变更的影响越大。如果应用程序使用spring-webmvc的3.2以上版本,推荐使用它的mvc测试库。spring-test-mvc提供了类似http请求的DSL,此时虽然测试还是基于ApplicationContext,但并不直接访问内部组件了。这个方案对于新手团队比较友善,但请注意,这仅仅是个过渡方案,因为:
非端到端测试无法提供全面的回归测试,尤其是UI操作。在好几个项目中,我们发现仅采用非端到端测试覆盖的功能,团队不得不保留手工回归测试。如果UI上包含了大量复杂的控制逻辑甚至有业务逻辑泄漏到UI组件中,这会稀释验收测试带来的收益。
由于测试加载的ApplicationContext和Web容器加载的ApplicationContext存在差异,非端到端测试可能会漏掉一些问题。比如在非端到端测试中一次性加载了booking-servlet.xml和root.xml,使他们成为了一个整体的上下文,而实际上在Web容器中并不完全是这样,root.xml中的bean并不能访问和控制booking-servlet.xml中的bean。一个常见问题就是如果在booking-servlet.xml中需要使用占位符,而恰巧我们已经在root.xml中有一个现成的,看起来水到渠成,而且在测试中也没有问题,但实际部署到web容器时,就会加载失败。
非端到端的验收测试不能作为任务完成的最终标准。因为还有UI部分还没有完成。当这类验收测试通过时,我把这个任务称作“可以进入UI调试的”。
因此,如果团队有足够的技能和资源时还是应该直接使用端到端的验收测试,尤其当应用程序提供API(比如WebService)或是采用更易于解析的数据格式与客户端交互时。比如如果应用程序提供了基于JSON的API,完全可以使用http-client来驱动测试。
实现非端到端的验收测试
来看看第一个验收测试,这个案例来自于著名的dddsample,为了让验收测试能够看上去高端大气上档次,我们将使用Cucumber来组织验收测试。验收场景描述的是业务员如何登记航运货件并解释了登记完成后货件的各项状态。
图表 3 第一个用户故事及其验收场景
Cucumber提供了一系列的Annotation来帮助我们验收场景文本与测试代码粘连在一起。
图表 4实现验收测试-1
图表 5 实现验收测试-2
接下来,当运行测试时,你就可以得到一份漂亮的html报告
图表 6 测试运行入口
维护非端到端的验收测试
当团队开始编写验收测试之后,一般没过多久就会发现验收测试的开发进度越来越慢,而且有时遇到测试失败,但其实应用程序并没有缺陷的情况。验收测试对代码质量的要求也很高,相比单元测试,为了要达到测试所需的起始状态,验收测试的准备工作要更复杂。而且由于需要解析应用程序返回的数据,验收测试的断言也会更加琐碎。因此,团队最好尽早开始重构验收测试,下面的建议或许有用处:
建立最小测试数据集并且尽可能隔离测试的数据。有时团队会发现两组测试由于依赖同一批数据而产生冲突,单独执行任一组测试都能通过,但一起执行就会失败。比如在示例代码中,对于不同的货件处理事件登记场景,验收测试都会注册一个新的货件。
隐藏断言细节。这样可以减少重复代码,并提升测试的可读性。把琐碎的解析逻辑隐藏在领域语言编写的方法中。
例如:如果多个测试用例都会对货件的运输状态进行断言,可以把解析细节提取出来,这样可以去除重复代码,并且减少语法噪声。
图表 7 抽取断言
尽可能使用已实现的功能来实现测试场景的准备。有一些步骤可能是多个测试用例都需要来准备数据的,可以把此类步骤抽取出来。这样也可以减少重复的代码,当应用程序随着需求变化时,验收测试会有更强的适应性,而且抽取出来的方法由于隐藏了技术细节,使用起来更简练。直接使用数据脚本的方案看起来很诱人,但一旦内部结构改变,数据脚本也得跟着改。
图表 8 抽取公共步骤
验收测试对实践部署流水线的团队有着重要意义,也是很大的挑战。希望大家都能找到合适自己的方法。最后介绍几个有用的测试库。
Moco,当有外部系统集成需求时,集成测试和验收测试的一大利器。在示例代码中你可以找到一处例子。
GreenMail,如果应用程序需要发送邮件的话,它可以提供一臂之力。不过在部署流水线上的端到端验收测试中,由于一般应用程序和测试并不运行在同一台机器上,很难对邮件进行直接的断言。这时一种方案是修改应用程序的架构,把发送邮件的实现分离到一个专用的应用中去并使用消息队列集成。那么在验收测试中,我们就可以通过监听对应的消息队列来断言了。
Awaitility,在需要对异步处理进行断言时有所帮助。
fun88网东莞金码教育部分班级合影
2017年1月12日,嘉华教育集团在深圳南山文体中心隆重举办了11周年庆典。出席本次庆典的嘉宾有原外交部副部长胡恩才先生、原深圳大学校长
fun88网东莞金码学校各班有兵乓球队和篮球队,学员可以根据自己的兴趣爱好选择球队参加训练及比赛,既锻炼了身体,又能增进同学感情,学员们在宽敞
fun88网东莞金码学校为学生提供住宿条件,干净的楼房,有专人管理打扫,安静环境氛围好,学生可根据意愿选择是否在校住宿。
随着社会的发展,电脑的运用已经普及到我们身边的每一个角落了,或许你会操作电脑,或许你会用电脑帮我们解决一些生活中的难题,但是电脑的功能很强大,你能真正领会到电脑中的奥秘吗?其实电脑里面还有很多东西等着我们去学习,还有很多技术 等着我们去探索,fun88网东莞金码学校就是一所学技术的学习!
据前程无忧发布的无忧指数数据显示,2013年6月,全国网上发布职位数逾274万个,与去年同期相比上涨幅度达23%。从国内十大热门行业来看,除
对于大学生,特别是初涉职场的大学生而言,这还真不是一件容易的事。这中间可面临不少挑战。那么,在试用期该如何摆正自己的位置和心态,让
每个人的职业生涯都有周期,其中20~40岁的这20年最为关键,可以说是职业生涯的黄金阶段。现阶段,由于经济 低 迷,企业裁员、行业萎缩等
面试时有些错一定不能犯!这一话题日前在前程无忧论坛引起了网友们的热烈讨论。但总有马失前蹄的时候,总会一不留神暴露出破绽。在面试时如
简历一定要突出你的能力、成就以及过去经验,重要的是要明确以下几点:1、明确你要寻求的是不是这个职位。只有你明白这个职位做什么,你要
语法是语言的特色,而算法却是灵魂算法不分语言入门的算法要数排序算法今天的算法讲解将以c语言为例子将以下几个排序算法1 桶排序2 插
DDoS带来的破坏是巨大的,你无法阻止黑客对你的网站发动DDoS攻击,除非主动断开Internet连接。如果我们无法防止这种攻击,那么,怎样做才能最大限度地保护我们的企业网络呢?
十二招防护云计算或者说云技术的安全,本身就说明了采用云技术的个人、企业甚至是国家需要更多样的安全防护,而这其中,数据本源的安全防护至关 重要。
每个Android应用都需要一个名为AndroidManifest xml的程序清单文件,这个清单文件名是固定的并且放在每个Android应用的根目录下。
预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的
对于互联网公司来说用户就是上帝,做好客户体验一切才有可能。所以互联网公司都会把钱砸向前端,Web前端程序员也越来越受到企业争相聘用。
2018年高考录取工作正在进行中,无论高考分数多少,考生都渴望进入大学深造。那么对于与该考成绩不理想只有200多分的的学员来说,选择的余地不多,高考是人生一大转折点,要面对从事职业和专业学习学校的选择,所以一定要慎重。对此,fun88网东莞金码学校就业部刘老师向考200多的考生给出了如下分析。
在互联网高度发达的今天,IT行业发展日趋迅猛,行业的产值成倍增长,发展也必然带来人才的需求,而且其高报酬的诱惑、光明的就业前景吸引
就在昨天2月23日,fun88网金码学校开学啦!软件工程师培训班S2T131的学员们,在开学典礼上嗨翻了,打破了以往吃瓜群众们眼中的IT男形象。
“我心目中的嘉华职业教育形象大使”投票活动全面启动