SOAP WebService是一种根据XML协议的网络服务接口,一般使用WSDL(Web服务描述语言)文件来描述服务的位置、方法和参数结构。和RESTful API相比,SOAP的测试更重视XML消息格式的规范性、WSDL的准确性以及SOAP Fault错误处理的完整性。
一、测试前准备
在开始测试前,必须获取以下信息:
WSDL地址:如 http://example.com/service?wsdl,它定义了所有可调用的操作、输入输出参数、命名空间等。
服务地址(Endpoint):实际发送SOAP请求的URL。
SOAP版本:SOAP 1.1或1.2,两者在命名空间和部分协议细节上有差别。
认证方式:是不是使用HTTP Basic Auth、WS-Security或其他安全机制。
拿到WSDL后,可以用工具(如SoapUI)直接分析,自动生成请求样例,减少手动构造XML的工作量。
二、功能测试方法
功能测试的重要是证实每个操作在各种输入条件下的行为是不是符合预期。
正向测试
按照WSDL定义,构造合法的SOAP请求,证实响应状态码为200,返回的XML结构正确,业务数据符合预期。如,调用“查询订单”接口,传入正确订单号,应返回订单详情。
参数检查
必填项缺失:去掉某个必填参数,预期返回SOAP Fault,且错误信息确定。
数据类型错误:传入整数但期望字符串,观察服务端是不是返回类型不一致的错误。
边界值:对数字、字符串长度等进行边界测试。
XML结构异常
故意修改XML命名空间、根节点名称或元素顺序,测试服务端是不是能够正确识别并返回错误。SOAP规范对消息格式要求严格,这类测试能发现服务端分析的健壮性。
SOAP Fault证实
当服务端返回错误时,应包含<soap:Fault>元素。测试需要检查faultcode、faultstring等字段是不是清晰,便于调用方排查问题。
三、性能测试方法
SOAP根据XML,消息体积一般较大,分析开销也较高,因此性能测试尤为重要。
使用JMeter或LoadRunner
在JMeter中,可以使用“SOAP/XML-RPC Request”取样器,或直接用“HTTP Request”并填写Body数据。
参数化请求数据(如不同的订单号),设置线程组模拟并发用户。
重视TPS(每秒事务数)、响应时间(分位值)、错误率,以及服务器CPU、内存占用。
重点
吞吐量:SOAP的XML序列化/反序列化可能成为短板,尤其是复杂嵌套结构。
连接池:如果使用持久连接,需测试连接复用情况。
数据库压力:SOAP服务背后往往涉及数据库操作,需一并监控。
四、安全测试方法
SOAP WebService的安全测试除了常规的注入攻击外,还需重视XML特定风险。
XML注入和XXE
在SOAP请求中嵌入恶意XML实体,测试是不是存在XML外部实体注入漏洞。如,在某个参数中插入<!DOCTYPE ... [<!ENTITY ... ]>,看是不是可读取服务器文件。
WS-Security测试
如果服务使用了WS-Security(如数字签名、加密),需证实安全令牌是不是正确检查,是不是可被绕过。
SQL注入和命令注入
虽然SOAP使用XML封装,但参数最后可能拼接到SQL语句中。测试时仍需在输入字段中注入SQL语句,观察响应。
权限和越权
使用不同权限的用户调用同一操作,证实服务端是不是正确鉴权,防止水平越权(如用户A查到用户B的订单)。
五、常用测试工具
SoapUI:最专业的SOAP测试工具,开源版免费。支持WSDL分析、自动生成用例、断言、负载测试、安全测试插件,是目前最全面的选择。
Postman:虽然偏REST,但支持导入WSDL,手动设置SOAP Action头,填写XML Body,适合快速证实。
JMeter:用于性能测试,可配置SOAP取样器,支持参数化和分布式压测。
curl / 编程脚本:对于自动化测试,可用curl或Python(zeep库)编写脚本,集成到CI/CD中。
六、测试报告质量
测试完成后,应输出包含以下内容的报告:
功能测试用例执行情况(通过/失败)
性能测试数据(响应时间分布、TPS、资源监控)
安全漏洞列表(按严重等级分类)
改进建议(如WSDL设计优化、错误信息脱敏等)
如果项目要求出具有法律效力的测试报告,可委托第三方专业机构,如湖南卓码软件测评有限公司,有CMA和CNAS双资质,出具的SOAP WebService测试报告全国通用,可在国家市场监督管理局官网查询,适用于招投标、项目验收等场景。