使用Python和Suds库进行WebService自动化测试的完整指南

如今,兼职测试工程师拥有 WebService 服务。虽然SoapUI提供了非常好的WS服务测试功能,但是作为一个有理想有追求的程序员怎么能放弃任何写代码的机会,所以一个用户天生就是用Python写自动化测试脚本的。

使用Python和Suds库进行WebService自动化测试的完整指南

SoapUI的官方网站也有源代码。如果有兴趣可以研究一下WS调用的内部原理。

suds是一个基于SOAP的python客户端,可以实时读取wsdl的内容,然后调用wsdl中定义的WebService服务,可以满足我的测试需求(当然不仅仅是为了测试)

首先,您需要安装肥皂水。您可以通过 pip 安装此模块。

pip 安装肥皂水

安装完成后,可以通过import suds使用python代码中的相关功能。

一般用法

url = 'http://localhost:8080/webservice/simpleService?wsdl'
client = suds.client.Client(url)
service = client.service

简单类型参数可以直接传递,如string、boolean、int

例如下面调用doSomething服务方法

result = service.doSomething('I am a request!')

复杂的对象类型需要通过客户端提供的工厂方法生成

例如

#创建Request对象,该类型定义在wsdl中,如果有多个schema,则需要增加前缀,比如ns0、ns1等
request = client.factory.create('Request')
#打印request对象,可以查看对象内部的字段
print request
#设置request对象中info字段的值
request.info = ''
#调用doSomething服务,参数为request对象,返回值为response对象
response = service.doSomething(request)
#打印response对象,查看返回对象的内容
print response

上面的simpleService是我自己写的一个例子,用来说明suds的简单使用。

那么问题来了。实际测试的WebService中定义了多个schema。每个模式都有不同的、相互嵌套的已定义类型,例如:

ns0 中定义了类型 A 的对象,ns1 中定义了类型 B 的对象,并且对象 A 中有一个类型 B 的属性。

A类{

私人B级;

通过client.factory.create('ns0:A')构造A对象,报如下错误:

构建 (ns3:A) 的实例时发生错误。因此

无法构造您请求的对象。推荐

您使用 Suds 对象手动构造类型。

请打开带有此错误说明的票证。

原因:未找到类型:'(B,****************,)'

一开始我以为是因为wsdl中没有定义B,后来我使用client.factory.create('ns1:B')成功创建了B对象。

我查了很多资料,但只是关于如何使用泡沫。这个问题没有被提及。苦思冥想,突然发现wsdl中的标签下定义了很多schema。我想知道是否由于跨架构引用而找不到类型,所以我报告了TypeNotFound。 。于是我就去找官方文档。

发现创建client对象的方法中有一个options参数,其中包含一个bool类型值autoblend。

该文档规定了确保 WSDL 中定义的模式相互导入的 Flag。

意思是这个参数导致wsdl中定义的schema互相引入,所以之前的猜测可能是正确的。

抱着试一试的心态,我改了代码 client=suds.client.Client(url,autoblend=True)

宾果!成功。

总结:归根结底是对WebService的原理和机制没有很好的理解,尤其是对WSDL的内容不熟悉,导致无法第一时间实现问题。如果有时间,可以仔细看看 WSDL 的解析原理以及为什么要互相引入 schema。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读