什么是 SOA 测试?教程与示例
什么是SOA测试?
SOA(面向服务架构)测试是对SOA架构风格的测试,其中应用程序组件通过通信协议(通常通过网络)进行通信。
什么是SOA?
SOA是一种将业务应用程序和流程集成在一起以满足业务需求的方法。
在软件工程中,SOA为业务流程提供敏捷性和灵活性。对流程或应用程序的更改可以定向到特定组件,而不会影响整个系统。
SOA中的软件开发人员开发或购买称为服务的程序块。
什么是服务?
- 服务可以是应用程序或业务流程的功能单元,可以被任何其他应用程序或流程重用或重复。(例如,在上图中,支付网关是一个服务,可以被任何电子商务网站重用。当需要进行支付时,电子商务网站会调用/请求支付网关服务。在网关完成支付后,响应会发送到电子商务网站)
- 服务是易于组装和易于重新配置的组件。
- 服务可以与积木相媲美。它们可以构建任何所需的应用程序。从应用程序或业务流程中添加和删除它们很容易。
- 服务更多地由它们执行的业务功能定义,而不是作为代码块。
Web 服务
Web服务是独立的应用程序组件,可通过网络访问。
它们可以在网络上发布、查找和使用。它们可以通过互联网进行通信。
- 服务提供商将服务发布到互联网。
- 客户端从Web服务注册表中搜索特定的Web服务。
- 返回所需Web服务的URL和WSDL。使用WSDL和URL,服务提供商和请求方之间的通信通过SOAP消息进行。
- 当消费者调用Web服务时,将建立到提供商的HTTP连接。
创建SOAP消息以指示提供商调用所需的Web服务逻辑。 - 从提供商收到的响应是一个SOAP消息,它将嵌入到HTTP响应中。此HTTP响应是消费者应用程序可以理解的数据格式。
示例
网站主页和搜索引擎每天显示天气预报。与其将天气预报部分全部编码,不如从供应商处购买天气预报服务并集成到页面中。
SOA测试
SOA由各种技术组成。使用SOA构建的应用程序具有各种松散耦合的服务。
SOA测试应侧重于3个系统层
服务层
此层包含服务,即系统从业务功能派生出来的服务。
例如 –
考虑一个包含以下内容的健康网站:
- 体重追踪器
- 血糖追踪器
- 血压追踪器
追踪器显示各自的数据和输入日期。服务层包含从数据库获取相应数据的服务——
- 体重追踪服务
- 血糖追踪服务
- 血压追踪服务
- 登录服务
流程层
流程层包含流程,即作为单个功能一部分的服务集合。
这些流程可能是用户界面的一部分(例如——搜索引擎),ETL工具的一部分(用于从数据库获取数据)。
此层的主要关注点将是用户界面和流程。
体重追踪器的用户界面及其与数据库的集成是主要关注点。
以下功能将受到考虑:
- 添加新数据
- 编辑现有数据
- 创建新的追踪器
- 删除数据
消费者层
此层主要由用户界面组成。
根据层级,SOA应用程序的测试分为三个级别。
- 服务级别
- 接口级别
- 端到端级别
- 测试设计采用自上而下的方法。
- 测试执行采用自下而上的方法。
SOA测试策略
测试规划方法,
- SOA测试人员应了解应用程序的完整架构。
- 应用程序需要分解成独立的服务(服务,它们有自己的请求和响应结构,不依赖于任何其他服务来形成响应)。
- 应用程序结构需要重新组织成三个组件——数据、服务和前端应用程序。
- 所有组件都需要仔细分析,并制定业务场景。
- 业务场景应分类为通用场景和特定于应用程序的场景。
- 应准备追溯矩阵,并且所有测试用例都应追溯到业务场景。
测试执行方法
SOA测试方法
1) 业务场景驱动的基于数据的测试,
- 应分析与系统相关的各种业务方面。
- 应根据以下各项的集成开发场景:
- 应用程序的各种Web服务
- Web服务和应用程序。
- 应根据上述场景设置数据。
- 应设置数据以涵盖端到端场景。
2) 存根
- 将创建虚拟接口来测试服务。
- 可以通过这些接口提供各种输入,并可以验证输出。
- 当应用程序使用外部服务(非测试范围内的第三方服务)的接口时,可以在集成测试期间创建存根。
3) 回归测试
- 当有多个版本时,应对应用程序进行回归测试,以确保系统的稳定性和可用性。
- 将创建一个全面的回归测试套件,涵盖构成应用程序重要部分的服务。
- 该测试套件可以在项目的多个版本中重用。
4) 服务级别测试
服务级别测试包括测试组件的功能、安全性、性能和互操作性。
每个服务都需要首先独立测试。
5) 功能测试
应对每项服务进行功能测试以:
- 确保服务对每个请求提供正确的响应。
- 对于包含无效数据、错误数据等的请求,收到正确的错误。
- 检查服务在运行时必须执行的每个操作的每个请求和响应。
- 验证服务器、客户端或网络级别发生错误时的故障消息。
- 验证收到的响应格式正确。
- 验证响应中收到的数据与请求的数据相对应。
6) 安全测试
Web服务的安全测试是SOA应用程序服务级别测试中的一个重要方面;这确保了应用程序的安全性。
测试期间需要涵盖以下因素:
- Web服务应遵守WS-Security测试定义的行业标准。
- 安全措施应完美无瑕地工作。
- 数据加密和文档上的数字签名
- 身份验证和授权
- SQL注入、恶意软件、XSS、CSRF和其他漏洞应在XML上进行测试。
- 拒绝服务攻击
7) 性能测试
由于服务是可重用的,并且多个应用程序可能使用相同的服务,因此需要对服务进行性能测试。
测试期间考虑以下因素:
- 需要在高负载下测试服务的性能和功能。
- 需要比较服务单独工作时以及与其耦合的应用程序内部工作时的性能。
- 应执行服务负载测试
- 以验证响应时间
- 以检查瓶颈
- 以验证CPU和内存的利用率
- 以预测可伸缩性
8) 集成级别测试
- 服务级别测试仅确保服务单独正常工作,它不能保证耦合组件的工作。
- 集成测试主要侧重于接口。
- 此阶段涵盖所有可能的业务场景。
- 此阶段应再次进行应用程序的非功能测试。安全性、合规性和性能测试可确保系统在所有方面的可用性和稳定性。
- 应测试通信和网络协议,以验证服务之间数据通信的一致性。
9) 端到端测试
此阶段确保应用程序在功能和非功能上都符合业务要求。
在端到端测试期间,确保测试以下各项:
- 集成后所有服务按预期工作
- 异常处理
- 应用程序的用户界面
- 所有组件之间的数据流正确
- 业务流程
SOA测试中的挑战
- 缺少服务接口
- 测试过程跨越多个系统,从而产生复杂的数据需求
- 应用程序是各种组件的集合,这些组件倾向于变化。回归测试的需求更频繁。
- 由于多层架构,难以隔离缺陷。
- 由于服务将在不同的接口中使用,因此难以预测负载,从而使性能测试计划变得繁琐。
- SOA是异构技术的集合。SOA应用程序的测试需要具有不同技能的人员,这反过来又增加了规划和执行成本。
- 由于应用程序是多个服务的集成,安全测试也有其自身的难题。身份验证和授权的验证相当困难。
SOA测试工具
市场上有许多SOA测试工具可以帮助测试人员测试SOA应用程序。以下是一些流行的SOA测试工具:
1) SOAP UI
“SOAP UI”是一个用于服务和API测试的开源功能测试工具。
- 桌面应用程序
- 支持多种协议——SOAP、REST、HTTP、JMS、AMF、JDBC
- 可以开发、检查和调用Web服务。
- 也可用于负载测试、自动化测试和安全测试。
- 存根可以通过MockServices创建。
- Web服务请求和测试可以通过其Web服务客户端自动生成。
- 内置报告工具
- 由SmartBear开发
2) iTKO LISA
“LISA”是一个产品套件,为SOA等分布式系统提供功能测试解决方案。
- 也可用于回归、集成、负载和性能测试。
- 由iTKO(CA Technologies)开发
- 可用于设计和执行测试。
3) HP Service Test
“Service Test”是一款功能测试工具,支持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测试用例
考虑一个电子商务网站,它包含以下功能和子功能
订单处理
阶段 1
在SOA测试的第一阶段,即测试策略阶段,应用程序被分解为服务和业务功能。
让我们考虑以下是应用程序中的服务。
- 创建订单
- 检查客户状态
- 更改订单状态
- 检查订单状态
- 检查库存
业务功能与网站功能相同。
注意:测试策略文档将包含服务列表和必须测试的功能。
阶段 2
测试计划阶段。为每个级别编写测试用例。
- 端到端级别。为每个业务用例和流程编写测试用例。以下是测试用例的示例:
- 使用活跃用户创建订单。
- 使用非活跃用户创建订单。
- 使用可用产品创建订单,订单数量 < 可用数量。
- 使用可用产品创建订单,订单数量 > 可用数量。
- 创建包含多个项目的订单。
- 完全取消订单。
- 部分取消订单。
- 集成级别。为数据库和用户界面的集成编写测试用例。以下是示例测试用例。
- 创建包含单个项目的新订单。验证订单是否在数据库中创建。
- 创建包含单个项目的新订单。验证订单计算的价格是否正确。
- 创建包含单个项目的新订单。验证可用产品的数量是否小于订单数量。
- 验证UI上显示的订单状态与数据库中的订单状态是否相同。
- 取消订单并验证订单状态是否在数据库中修改。
- 对于首次付款,验证UI上输入的付款详细信息是否已保存到数据库中。
- 对于返回付款,验证数据库中的付款详细信息是否显示在UI上。
- 服务级别。针对所有数据条件测试每个服务。
以下是一些例子。
编号 | 订单详情 | 订单状况 |
---|---|---|
1 | 创建订单。商品数量 = 1 | 订单数量 < 数据库数量 |
2 | 创建订单。商品数量 > 1 | 订单数量 < 数据库数量。 |
3 | 创建订单。商品数量 = 1 | 订单数量 > 数据库数量 |
4 | 检查订单状态 | 数据库状态 = 活跃 |
5 | 检查订单状态 | 数据库状态 = 已发货 |
6 | 检查订单状态 | 数据库状态 = 已取消 |
7 | 检查订单状态 | 订单 ID = 无效 |
8 | 检查产品可用性 | 产品数量 > 0 |
9 | 检查产品可用性 | 产品数量 = 0 |
10 | 检查产品可用性 | 产品 ID = 无效 |
阶段 3 – 测试执行
测试执行采用自下而上的方法,即首先进行服务级别测试,然后进行集成级别测试,最后进行端到端测试。
1) 服务级别
让我们考虑使用Soapui工具来测试应用程序。
在SOAP的测试窗口中浏览WSDL和URL。
每个服务的请求将显示在请求窗口中。
通过根据服务级别测试用例修改数据,为每个测试用例创建请求。
测试用例 | 请求 | 预期响应 |
---|---|---|
创建订单。商品数量 = 1 订单数量 < 数据库数量 | <productid>x2</productid><quantity>2</quantity> | <orderid>o3251</orderid><message>成功</message> |
创建订单。商品数量 > 1 订单数量 < 数据库数量 | <productid>y1</productid><quantity>1</quantity><productid>y2</productid><quantity>3</quantity> | <orderid>o3251</orderid><message>成功</message> |
创建订单。商品数量 = 1 订单数量 > 数据库数量 | <productid>x23</productid><quantity>200</quantity> | <orderid>null</orderid><message>失败</message> |
检查订单状态。数据库状态 = 活跃 | <orderid>o9876</orderid> | <status>活跃</status><message>成功</message> |
检查订单状态。数据库状态 = 已发货 | <orderid>o9656</orderid> | <status>已发货</status><message>成功</message> |
检查订单状态。订单 ID = 无效 | <orderid>y5686</orderid> | <status>null</status><message>失败</message> |
检查产品可用性。产品数量 > 0 | <productid>d34</productid> | <quantity>34</quantity><available>是</available><message>成功</message> |
检查产品可用性。产品数量 = 0 | <productid>y34</productid> | <quantity>0</quantity><available>否</available><message>成功</message> |
检查产品可用性。产品 ID = 无效 | <productid>sder</productid> | <message>失败</message> |
2) 集成级别
集成级别测试用例在用户界面和数据库上执行。
- 创建包含单个项目的订单——
- 用户打开网站。
- 前往下单。
- 选择有效的产品和数量,然后保存订单。
- 应显示“订单已成功下单”的消息。
- 用户打开数据库并检查订单详细信息是否与网站上输入的相同。
3) 端到端级别
业务流程和用例在用户界面上执行。
- 创建包含多个商品的订单——
- 用户打开一个网站。
- 前往下单。
- 查询有效产品和数量,并将其添加到购物车。
- 添加其他有效产品和有效数量,并保存订单。通过新的支付方式完成支付并下单。
- 应显示“订单成功”的消息。
- 测试人员应验证整个流程在数据不偏离的情况下完成。
结论
通过制定正确的测试策略、资源、工具和合规性以提供优质服务,SOA测试可以交付完全且完美测试的应用程序。