什么是SOA测试?
SOA(面向服务的体系结构)测试是对SOA体系结构风格的测试,其中应用程序组件被设计为通过网络的通信协议进行通信。
在本教程中,将了解-
- 什么是SOA?
- 什么是服务?
- SOA测试
- SOA测试的策略
- SOA测试方法
- SOA测试中的挑战
- SOA测试工具
- SOA测试用例
什么是SOA?
SOA是一种将业务应用程序和流程集成在一起以满足业务需求的方法。
在软件工程领域,SOA为业务流程提供了高速移动和灵活性。对流程或应用程序的更改可以定向到特定组件,而不会影响整个系统。
SOA中的软件开发人员要么开发,要么购买服务的程序块。
什么是服务?

-
服务可以是应用程序或业务流程的功能单元,可以由任何其他应用程序或流程重用或重复。 (例如,在上图中,支付是一项可以被电商网站重用的服务。完成支付后,向电子商务网站发送响应)
- 服务很容易组装,也很容易重新配置组件。
- 可以将服务比作构建块。在应用程序或业务流程中添加和删除很容易。
-
服务更多地是由执行的业务功能定义的,而不是作为代码块定义的。
Web服务
Web服务是独立的应用程序组件,可通过Web使用。可以在网上发布、查找和使用。可以通过互联网进行交流。


- 服务提供商将服务发布到互联网。
- 客户端从Web服务注册表中搜索特定的Web服务
-
返回所需Web服务的URL和WSDL。 通过WSDL和URL,服务提供者和求者之间通过SOAP消息进行通信。
-
当使用者调用Web服务时,将建立到提供者的HTTP连接。 创建SOAP消息以指示提供者调用所需的Web服务逻辑。
-
从提供者接收的响应是一条SOAP消息,将嵌入到HTTP响应中。此HTTP响应是消费者应用程序可以理解的数据格式。
示例
网站的主页和搜索引擎显示每天的天气报告。可以从供应商那里购买天气报告服务,并将其集成到页面中,而不是对天气报告部分进行全面编码。

SOA测试
SOA由各种技术组成。使用SOA构建的应用程序具有松散耦合的各种服务。

SOA测试应关注3个系统层
服务层
这一层由服务组成,由派生自业务功能的系统公开的服务。
例如- 一个Wellness网站,由以下内容组成
- 体重跟踪器
- 血糖跟踪仪
- 血压跟踪器
跟踪器显示各自输入的数据和日期。服务层由从数据库获取相应数据的服务组成-
- 体重跟踪器服务
- 血糖跟踪器服务
- 血压跟踪器服务
- 登录服务
流程层
流程层由流程、服务集合组成,这些服务是单个功能的一部分。 这些进程可能是用户界面(用于EX-A搜索引擎)的一部分,也可能是ETL工具(用于从数据库获取数据)的一部分。
这一层的主要焦点将放在用户界面和流程上。
重量跟踪器的用户界面及其与数据库的集成是主要关注点。
考虑以下功能
- 添加新数据
- 编辑现有数据
- 创建新跟踪器
- 删除数据
消费者层
这一层主要由用户界面组成。

基于该层,SOA应用程序的测试分为三个级别。
- 服务级别
- 接口级
- 端到端
- 测试设计采用自顶向下的方法。
- 测试执行采用自下而上的方法。
SOA测试的策略
测试计划方法,
- SOA测试人员应该了解应用程序的完整体系结构。
- 需要将应用程序分解为独立的服务(服务,请求和响应结构,不依赖于任何其他服务来形成响应)。
- 应用程序结构需要重新组织为三个组件-数据、服务和前端应用程序。
- 所有组件都需要仔细分析,并用勾画出业务场景。
- 业务场景应分为通用场景和应用特定场景。
- 应该准备一个可追溯性矩阵,并且所有的测试用例都应该追溯到业务场景。
测试执行方法
- 应该测试每个服务组件。
- 应该对服务组件进行集成测试,以验证通过服务的数据流和数据完整性。
- 应该对整个模型进行系统测试,以验证前端应用程序和数据库之间的数据流。
- 应该进行性能测试,以实现微调和最佳性能。
SOA测试方法
- 业务场景驱动的基于数据的测试,
- 应该分析与系统相关的各种业务方面。
- 场景的开发应基于
- 应用程序的各种Web服务
- Web服务和应用程序。
- 应根据上述场景设置数据。
- 数据设置也应涵盖端到端场景。
- 存根
- 将创建虚拟接口来测试服务。
- 通过这些接口可以提供各种输入,并且可以验证输出。
- 当应用程序使用到外部服务(不在测试中的第三方服务)的接口时,可以在集成测试期间创建存根。
- 回归测试
- 当存在多个版本时,应对应用程序进行回归测试,以确保系统的稳定性和可用性。
- 将创建一个全面的回归测试套件,涵盖构成应用程序重要部分的服务。
- 此测试套件可以在项目的多个版本中重用。
- 服务级别测试
服务级别测试包括测试组件的功能性、安全性、性能和互操作性。
每项服务都需要首先进行独立测试。
- 功能测试
应该对每个服务进行功能测试,以
- 确保服务为每个求提供正确的响应。
- 对于具有无效数据、坏数据等的求,接收正确的错误。
- 检查服务在运行时必须执行的每个操作的每个求和响应。
- 在服务器、客户端或网络级别发生错误时验证故障消息。
- 验证收到的回复格式是否正确。
- 验证响应上接收的数据是否与求的数据相对应。
- 安全测试
Web服务的安全性测试是SOA应用程序服务级别测试过程中的一个重要方面,保证了应用程序的安全性。
测试过程中需要考虑以下因素:
- Web服务应该遵守WS-Security测试定义的行业标准。
- 安全措施应该全面。
- 对文档上的数据和数字签名进行加密
- 身份验证和授权
- SQL注入、恶意软件、XSS、CSRF等漏洞都将在XML上进行测试。
- 拒绝服务攻击
- 性能测试
需要对服务进行性能测试,因为服务是可重用的,并且多个应用程序可能正在使用相同的服务。
测试过程中会考虑以下因素:
- 服务的性能和功能需要在重负载下进行测试。
- 服务的性能需要在单独工作时进行比较,也需要在应用程序内进行比较。
- 应执行服务的负载测试
- 要验证响应时间,执行以下操作
- 要检查瓶颈,执行以下操作
- 验证CPU和内存的利用率
- 要预测可扩展性,执行以下操作
- 集成测试
- 服务级别测试只确保单个服务的正常工作,不能保证耦合组件的工作。
- 集成测试主要集中在接口上。
- 此阶段涵盖所有可能的业务场景。
- 在此阶段,应用程序的非功能测试应该再做一次。安全性、合规性和性能测试从各个方面保证了系统的可用性和稳定性。
- 应该对通信和网络协议进行测试,以验证服务之间数据通信的一致性。
- 端到端测试
此阶段确保应用程序在功能和非功能上都符合业务需求。 保证在端到端测试过程中测试以下项目
- 集成后所有服务均按预期工作
- 异常处理
- 应用程序的用户界面
- 正确的数据流通过所有组件
- 业务流程
SOA测试中的挑战
- 缺少服务接口
- 测试流程跨越多个系统,因此产生了复杂的数据需求
- 应用程序是倾向于更改的各种组件的集合。回归测试的需求更加频繁。
- 由于多层体系结构,很难隔离缺陷。
- 由于服务将在不同的接口中使用,因此很难预测负载,从而使性能测试计划变得繁琐。
- SOA是异构技术的集合。测试SOA应用程序需要具有不同技能集的人员,这反过来又增加了规划和执行成本。
- 由于应用程序是多个服务的集成,因此安全测试也有其自身的问题。验证身份验证和授权相当困难。
SOA测试工具
市场上有许多SOA测试工具可以帮助测试人员测试SOA应用程序。以下是一些流行的SOA测试工具:
1) SOAP UI
“SOAPUI”是一个用于服务和API测试的开源功能测试工具。
- 桌面应用程序
- 支持多种协议-SOAP、REST、HTTP、JMS、AMF、JDBC
- 可以开发、检查和调用Web服务。
- 还可以用于负载测试、自动化测试和安全测试
- 存根可以由MockServices创建
- Web服务求和测试可以通过其Web服务客户端自动生成。
- 有内置的报告工具
- 由SmartBear开发
2) iTKO Lisa
“LISA”是为SOA等分布式系统提供功能测试解决方案的产品套件。
- 还可以用于回归、集成、负载和性能测试。
- 由iTKO(CA Technologies)开发
- 可用于设计和执行测试。
- HP服务测试
服务测试是一种功能测试工具,既支持UI测试,也支持共享服务测试
- 服务的功能和性能测试都可以由单个脚本完成。
- 与HP QC集成。
- 海量的服务和数据是可以管理的。
- 通过模拟JEE、AXIS和DotNet客户端环境支持互操作性测试。
- 由惠普开发。
4) Parasoft SOA Test
SOA Test是为API和API应用程序测试开发的测试和分析工具套件。
- 支持Web Services、REST、JSON、MQ、JMS、TIBCO、Http、XML等技术。
- 可以进行功能测试、单元测试、集成测试、回归测试、安全性测试、互操作性测试、符合性测试和性能测试。
- 可以使用Parasoft Virtualize创建存根,它比SOAP UI更智能。
- 由Parasoft开发
SOA测试用例
考虑一个电子商务网站,它包含以下功能和子功能:
订单处理

第一阶段
在SOA测试的第一阶段,即测试策略阶段,应用程序被分解为服务和业务功能。
下面让我们考虑一下应用程序中的服务。
- 创建订单
- 检查客户状态
- 变更单状态
- 检查订单状态
- 检查库存
业务功能与网站功能相同。
注意:测试策略文档将包含必须测试的服务和功能的列表。
第二阶段
测试计划阶段。测试用例是为每个级别编写的。
- 端到端级别。测试用例是为每个业务用例和流程编写的。
下面是测试用例的示例
* 使用活动用户创建订单。
* 使用非活动用户创建订单。
* 使用订单量<可用数量的可用产品创建订单。
* 使用订货量>可用量的可用产品创建订单。
* 创建包含多个项目的订单
* 完全取消订单。
* 部分取消订单。
- 集成级别。编写测试用例,实现数据库与用户界面的集成。
下面是示例测试用例。
* 使用单个项目创建新订单。验证是否在数据库上创建了订单。
* 使用单个项目创建新订单。验证为订单计算的价格是否正确。
* 使用单个项目创建新订单。验证可用产品的数量是否比订单金额少。
* 验证UI上显示的订单状态与数据库上显示的订单状态是否相同。
* 取消订单并验证订单状态在数据库中是否已修改。
* 对于第一次付款,验证在UI上输入的付款详细信息是否保存在数据库中。
* 对于退款,验证UI上是否显示了数据库上的付款详细信息。
- 服务级别。针对所有数据条件测试每个服务。
下面是几个例子。
编号 | 订单详细信息 | 订购条件 |
---|---|---|
1 | 创造秩序,订购数=1 | 订单数量<数据库数量 |
2 | 创造秩序,订购数>1 | 订单数量<数据库数量。 |
3 | 创建订单编号订购数=1 | 订单数量>数据库数量 |
4 | 检查订单状态 | 数据库上的状态=活动 |
5 | 检查订单状态 | 数据库上的状态=已发运 |
6 | 检查订单状态 | 数据库上的状态=已取消 |
7 | 检查订单状态 | 订单ID=无效 |
8 | 检查产品供应情况 | 产品数量>0 |
9 | 检查产品供应情况 | 产品数量=0 |
10 | 检查产品供应情况 | 产品ID=无效 |
阶段3-测试执行
测试执行使用自下而上的方法,即首先进行服务级别测试,然后进行集成级测试,最后进行端到端测试。
1) 服务级别
考虑使用Soapui工具来测试应用程序。 WSDL和URL被浏览到SOAP的测试窗口中。 每项服务的求将显示在求窗口上。 通过根据服务级别测试用例修改数据,可以为每个测试用例创建求。
测试用例 | 请求 | 预期响应 |
---|---|---|
创造秩序。项目数=1订单数量<数据库数量 |
|
|
创建订单。编号。项目数>1订单数量<数据库数量 |
|
|
创建订单号。项目数=1订单数量>数据库数量 |
|
|
检查订单状态数据库上的状态=活动 |
|
|
检查订单状态数据库上的状态=已发运 |
|
|
检查订单状态订单ID=无效 |
|
|
检查产品可用性>0的产品数量 |
|
|
检查产品可用性产品数量=0 |
|
|
检查产品可用性产品ID=无效 |
|
|
2) 集成级别
集成级测试用例在用户界面和数据库上执行。
- 使用单个项目创建订单-
- 用户打开该网站。
- 下订单。
- 选择有效的产品和数量并保存订单。
- 显示一条消息,说明订单已成功下达。
- 用户打开数据库,检查订单的详细信息是否与网站上输入的相同。
3) 端到端级别
业务流和用例在用户界面上执行。
- 创建包含多个项目的订单-
- 用户打开网站。
- 下订单。
- 查询有效产品和数量会将其添加到购物车中。
- 以有效数量添加其他有效产品,并保存订单。付款是通过一种新的付款方式完成的,并下了订单。
- 应该会显示一条消息,提示“订单已成功下达”。
- 测试人员应该验证整个流程是在没有异常数据的情况下完成的。
结论:
通过勾勒出正确的测试策略、资源、工具和遵从性来提供良好的服务,SOA测试可以交付经过全面和完美测试的应用程序。