概述
集成测试是为了在集成时测试模块/组件,以验证它们是否按预期工作,即测试单独工作的模块在集成时没有问题。
在使用黑盒测试技术测试大型应用程序时,涉及多个彼此紧密耦合的模块的组合。我们可以应用集成测试技术概念来测试这些类型的场景。
什么是集成测试?
集成测试的含义非常简单- 将单元测试模块逐个集成/组合,并将行为测试为组合单元。
该测试的主要功能或目标是测试单元/模块之间的接口。
我们通常在“单元测试”之后进行集成测试。一旦创建并测试了所有单个单元,我们就开始组合这些“单元测试”模块并开始进行集成测试。
该测试的主要功能或目标是测试单元/模块之间的接口。
首先单独测试各个模块。模块经过单元测试后,逐个集成,直到所有模块都集成在一起,检查组合行为,验证需求是否正确实现。
在这里我们应该理解,集成测试不会在周期结束时发生,而是与开发同时进行。因此,在大多数情况下,所有模块实际上都无法测试,这就是测试不存在的东西的挑战!
为何进行集成测试
我们认为集成测试很复杂,需要一些开发和逻辑技能。确实如此!那么将这个测试集成到我们的测试策略中的目的是什么?
以下是一些原因:
- 在现实世界中,当开发应用程序时,它被分解为更小的模块,并且为每个开发人员分配1个模块。一个开发人员实现的逻辑与另一个开发人员完全不同,因此检查开发人员实现的逻辑是否符合预期并根据规定的标准呈现正确的值变得很重要。
- 很多时候,当数据从一个模块移动到另一个模块时,数据的面或结构会发生变化。附加或删除某些值,这会导致后续模块出现问题。
- 模块还与某些第三方工具或API进行交互,这些工具或API也需要进行测试,以确保该API /工具接受的数据是正确的,并且生成的响应也是预期的。
- 测试中一个非常常见的问题 - 频繁更改需求!:)许多时间开发人员在没有单元测试的情况下部署更改。当时集成测试变得很重要。
好处
这种测试有几个优点,下面列出的很少的一部分。
- 此测试可确保集成模块/组件正常工作。
- 一旦要测试的模块可用,就可以开始集成测试。它不需要完成其他模块以进行测试,因为Stubs和Drivers可以用于相同的操作。
- 它检测与接口相关的错误。
挑战
下面列出的是集成测试中涉及的一些挑战。
- 集成测试意味着测试两个或多个集成系统,以确保系统正常工作。不仅应该测试集成链接,还应该考虑环境进行详尽的测试,以确保集成系统正常工作。
- 管理集成测试变得复杂,因为它涉及的因素很少,如数据库,平台,环境等。
- 在将任何新系统与遗留系统集成时,需要进行大量的更改和测试工作。在集成任何两个遗留系统时也是如此。
- 如果在任何一个系统中进行任何更改都不确定,那么两个不同公司开发的两个不同系统的集成对于其中一个系统如何影响另一个系统是一个巨大的挑战。
为了最大限度地减少开发系统时的影响,应该考虑很少的事情,例如可能与其他系统集成等。
集成测试的类型
下面给出了一种测试集成及其优缺点。
大爆炸方法:
Big bang方法一次性集成了所有模块,即它不会逐个集成模块。它会在集成后验证系统是否按预期工作。如果在完全集成的模块中检测到任何问题,则很难找出导致该问题的模块。
大爆炸方法是一个耗时的过程,找到一个自身有缺陷的模块,因为这需要时间,一旦检测到缺陷,修复相同的方法会花费很高,因为在后期检测到缺陷。
大爆炸方法的优点:
- 这对于小型系统来说是一种很好的方法。
大爆炸方法的缺点:
- 很难检测出导致问题的模块。
- Big Bang方法需要所有模块一起进行测试,这反过来会导致更少的测试时间,因为设计,开发,集成将占用大部分时间。
- 测试仅在一次进行,因此不会孤立地进行关键模块测试。
集成测试步骤:
- 准备集成测试计划。
- 准备集成测试场景和测试用例。
- 准备测试自动化脚本。
- 执行测试用例。
- 报告缺陷。
- 跟踪并重新测试缺陷。
- 重新测试和测试一直持续到集成测试完成。
测试集成方法
从根本上说,有两种方法可以进行测试集成:
- 自下而上的方法
- 自上而下的方法。
让我们考虑用下图来表述该测试方法:
自下而上的方法:
自下而上的测试,从应用程序的最低或最里面的单位开始,逐渐向上移动。集成测试从最低模块开始,逐步向应用程序的上层模块发展。这种集成一直持续到所有模块都集成在一起,整个应用程序作为一个单元进行测试。
在这种情况下,模块B1C1,B1C2和B2C1,B2C2是经过单元测试的最低模块。模块B1和B2尚未开发。模块B1和B2的功能是调用模块B1C1,B1C2和B2C1,B2C2。由于B1和B2还没有开发,我们需要一些程序或“刺激器”来调用B1C1,B1C2和B2C1,B2C2模块。这些刺激计划称为驱动程序。
简单来说,DRIVERS是虚拟程序,用于在调用函数不存在的情况下调用最低模块的函数。自底向上技术要求模块驱动程序将测试用例输入提供给被测模块的接口。
这种方法的优点是,如果在程序的最低单元存在重大故障,则更容易检测到它,并且可以采取纠正措施。
缺点是在最后一个模块被集成和测试之前,主程序实际上不存在。因此,只会在最后检测到更高级别的设计缺陷。
自上而下的方法:
该技术从最顶层的模块开始,逐渐向较低的模块发展。只有顶层模块是单独进行单元测试的。在此之后,下层模块逐个集成。重复该过程,直到所有模块都被集成和测试。
在我们的图中,测试从模块A开始,下层模块B1和B2逐个集成。现在,较低的模块B1和B2实际上不可用于集成。因此,为了测试最顶层的模块A,我们开发了“ STUBS ”。
“Stubs”可以称为代码片段,它接受来自顶层模块的输入/请求并返回结果/响应。这样,尽管模块较低,但是不存在,我们能够测试顶层模块。
在实际情况中,存根的行为并不像看起来那么简单。在这个复杂模块和体系结构的时代,被调用模块大多数时候都涉及复杂的业务逻辑,如连接数据库。因此,创建Stubs变得像真实模块一样复杂和耗时。在某些情况下,Stub模块可能会比受激模块更大。
Stub和驱动程序都是虚拟代码,用于测试“不存在”模块。它们触发函数/方法并返回响应,并将其与预期行为进行比较
让我们总结一下Stubs和Driver之间的一些区别:
Stubs | Driver |
---|---|
用于自上而下的方法 | 用于自下而上的方法 |
首先测试最顶层的模块 | 首先测试最低模块。 |
刺激较低级别的组件 | 刺激更高级别的组件 |
较低级别组件的虚拟程序 | 高级组件的虚拟程序 |
唯一的变化是这个世界的常数,所以我们有另一种称为“ 三明治测试 ”的方法,它结合了自上而下和自下而上方法的特征。当我们测试像操作系统这样的大型程序时,我们必须拥有一些更有效的技术并增强信心。三明治测试在这里起着非常重要的作用,其中,自上而下和自下而上的测试同时开始。
集成从中间层开始,同时向上和向下移动。在我们的图中,我们的测试将从B1和B2开始,其中一个臂将测试上部模块A,另一个臂将测试下部模块B1C1,B1C2和B2C1,B2C2。
由于这两种方法同时开始,这种技术有点复杂,需要更多的人以及特定的技能组合,从而增加了成本。
GUI应用程序集成测试
现在让我们谈谈我们如何暗示黑盒技术中的集成测试。
我们都知道Web应用程序是一个多层应用程序。我们有一个可供用户看到的前端,我们有一个中间层,它有业务逻辑,我们有一些更多的中间层做一些验证,集成一些第三方API等,然后我们有后层,这是数据库。
集成测试示例:
我们来看看下面的例子:
我是一家广告公司的老板,我在不同的网站上发布广告。在本月底,我想看看有多少人看过我的广告以及有多少人点击了我的广告。我需要显示我的广告的报告,并相应地向我的客户收取费用。
GenNext软件为我和以下开发了这个产品的架构:
UI - 用户界面模块,对最终用户可见,其中给出了所有输入。
BL - 是业务逻辑模块,具有所有计算和业务特定方法。
VAL - 是Validation模块,它具有输入正确性的所有验证。
CNT - 具有所有静态内容的内容模块,特定于用户输入的输入。这些内容显示在报告中。
EN - 是Engine模块,该模块读取来自BL,VAL和CNT模块的所有数据,并提取SQL查询并将其触发到数据库。
Scheduler- 是否根据用户选择(每月,每季度,每半年和每年)安排所有报告的模块
DB - 是数据库。
现在,在看过整个Web应用程序的体系结构后,作为一个单元,在这种情况下,集成测试将关注模块之间的数据流。
这里的问题是:
- BL,VAL和CNT模块如何读取和解释在UI模块中输入的数据?
- BL,VAL和CNT模块是否从UI接收正确的数据?
- BL,VAL和CNT的数据以哪种格式传输到EQ模块?
- EQ如何读取数据并提取查询?
- 查询是否正确提取?
- 调度程序是否获得了正确的报告数据?
- EN收到的结果集是否正确并且符合预期?
- EN是否能够将响应发送回BL,VAL和CNT模块?
- UI模块是否能够读取数据并将其适当地显示到界面?
在现实世界中,数据通信以XML格式完成。因此,无论用户在UI中输入什么数据,它都会转换为XML格式。
在我们的场景中,在UI模块中输入的数据被转换为XML文件,该文件由3个模块BL,VAL和CNT解释。EN模块读取由3个模块生成的结果XML文件,并从中提取SQL并查询到数据库中。EN模块还接收结果集并将其转换为XML文件并将其返回到UI模块,该模块以用户可读的形式转换结果并显示它。
在中间,我们有调度程序模块,它从EN模块接收结果集,创建和调度报告。
那么整合测试的确在哪里?
那么,测试信息/数据是否正确流动将是您的集成测试,在这种情况下将验证XML文件。XML文件是否正确生成?他们有正确的数据吗?数据是否正确地从一个模块传输到另一个模块?所有这些都将作为集成测试的一部分进行测试。
尝试生成或获取XML文件并更新标记并检查行为。这与测试人员通常所做的常规测试非常不同,但这将为测试人员的知识和对应用程序的理解增加价值。
其他几个样本测试条件可能如下:
- 菜单选项是否生成正确的窗口?
- 窗户是否能够调用被测窗口?
- 对于每个窗口,标识应用程序应允许的窗口的函数调用。
- 识别从窗口到应用程序应允许的其他功能的所有调用
- 识别可逆调用:关闭被调用窗口应返回调用窗口。
- 识别不可逆转的呼叫:在出现被叫窗口之前调用窗口关闭。
- 测试执行对另一个窗口的调用的不同方式,例如 - 菜单,按钮,关键字。
启动集成测试的步骤
- 了解应用程序的体系结构。
- 确定模块
- 了解每个模块的功能
- 了解数据如何从一个模块传输到另一个模块。
- 了解数据如何输入和接收到系统中(应用程序的入口点和出口点)
- 隔离应用程序以满足您的测试需求。
- 确定并创建测试条件
- 一次采取一个条件并记下测试用例。
集成测试的进入/退出标准
进入标准
- 集成测试计划文档已签署并批准。
- 已经准备好集成测试用例。
- 测试数据已创建。
- 开发的模块/组件的单元测试已完成。
- 所有关键和高优先级缺陷都已关闭。
- 测试环境设置为集成。
退出标准:
- 所有集成测试用例都已执行。
- 没有关键和优先级P1和P2缺陷被打开。
- 测试报告已经准备好了。
集成测试用例
集成测试案例主要关注模块之间的接口,集成链接,模块之间的数据传输,作为已经过单元测试的模块/组件,即功能和其他测试方面已经涵盖。
因此,主要思想是测试集成时两个工作模块的集成是否按预期工作。
对于示例集成Linkedin应用程序的测试用例包括:
- 验证登录页面和主页之间的接口链接,即当用户输入凭证并记录时,应将其定向到主页。
- 验证主页和配置文件页面之间的接口链接,即配置文件页面应该打开。
- 验证网络页面和连接页面之间的接口链接,即单击网络邀请页面上的接受按钮,一旦点击,就会在连接页面中显示接受的邀请。
- 验证通知页面之间的界面链接并说出恭喜按钮,即单击说恭喜按钮应指向新的消息窗口。
可以为此特定站点编写许多集成测试用例。以上四点只是了解测试中包含哪些Integration测试用例的一个示例。
集成是白盒还是黑盒技术?
集成测试技术可以在黑盒子和白盒技术中统计。黑盒技术是测试人员不需要任何系统内部知识的地方,即不需要编码知识,而白盒技术需要应用程序的内部知识。
现在,在执行集成测试时,它可能包括测试两个集成Web服务,这些服务将从数据库中获取数据并根据需要提供数据,这意味着可以使用白盒测试技术进行测试,而可以测试在网站中集成新功能使用黑匣子技术。
因此,集成测试不是黑盒子或白盒技术。
集成测试工具
有几种工具可用于此测试。
以下是工具列表:
- Rational Integration Tester
- TESSY
- Protractor
- Steam
系统集成测试
系统集成测试用于测试完整的集成系统。
在集成组件之前,模块或组件在单元测试中单独测试。
一旦测试了所有模块,就可以通过集成所有模块来完成系统集成测试,并对整个系统进行测试。
集成测试和系统测试之间的区别
集成测试是一种测试,其中集成了一个或两个经过单元测试的模块进行测试和验证,以验证集成模块是否按预期工作。
系统测试是对整个系统进行测试的测试,即所有模块/组件都集成在一起,以验证系统是否按预期工作,并且由于集成模块而不会出现问题。
结论
这是关于集成测试及其在白盒和黑盒技术中的实现。希望我们用相关的例子清楚地解释它。
测试集成是测试周期的一个重要部分,因为它可以在集成两个或多个模块时更容易找到缺陷,以便在第一步中将所有模块集成在一起。
它有助于在早期发现缺陷,从而节省了工作量和成本。它确保集成模块按预期正常工作。
转载于:https://my.oschina.net/hechunc/blog/3031766
最后
以上就是端庄猎豹为你收集整理的什么是集成测试(集成测试示例教程)的全部内容,希望文章能够帮你解决什么是集成测试(集成测试示例教程)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复