在查看了 Python Zeep 源代码后,我发现了一些使用 requests-mock 库的测试示例,我可以将其应用到我的解决方案中。这是一个可行的示例,以防其他人尝试做类似的事情。
在这个例子中我没有做任何断言,因为我首先想证明我可以让 zeep 正确解析模拟响应的概念。
# -*- coding: utf-8 -*-
from zeep import Client
from zeep.cache import SqliteCache
from zeep.transports import Transport
from zeep.exceptions import Fault
from zeep.plugins import HistoryPlugin
from requests import Session
from requests.auth import HTTPBasicAuth
from urllib3 import disable_warnings
from urllib3.exceptions import InsecureRequestWarning
from lxml import etree
import requests_mock
disable_warnings(InsecureRequestWarning)
username = 'administrator'
password = 'password'
host = 'cucm-pub'
wsdl = 'file://C:/path/to/axlsqltoolkit/schema/current/AXLAPI.wsdl'
location = 'https://{host}:8443/axl/'.format(host=host)
binding = "{http://www.cisco.com/AXLAPIService/}AXLAPIBinding"
session = Session()
session.verify = False
session.auth = HTTPBasicAuth(username, password)
transport = Transport(cache=SqliteCache(), session=session, timeout=20)
history = HistoryPlugin()
client = Client(wsdl=wsdl, transport=transport, plugins=[history])
service = client.create_service(binding, location)
def test_listPhone():
text = """<?xml version="1.0" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:listDevicePoolResponse xmlns:ns="http://www.cisco.com/AXL/API/11.5">
<return>
<devicePool uuid="{1B1B9EB6-7803-11D3-BDF0-00108302EAD1}">
<name>AU_PER_DP</name>
</devicePool>
<devicePool uuid="{BEF5605B-1DB0-4157-0176-6C07814C47AE}">
<name>DE_BLN_DP</name>
</devicePool>
<devicePool uuid="{B4C65CAB-86CB-30FB-91BE-6F6E712CACB9}">
<name>US_NYC_DP</name>
</devicePool>
</return>
</ns:listDevicePoolResponse>
</soapenv:Body>
</soapenv:Envelope>
"""
with requests_mock.Mocker() as m:
m.post(location, text=text)
resp = service.listDevicePool(searchCriteria={'name': '%'},
returnedTags={'name': '',
'uuid': ''})
return resp
test_listPhone()
然后,这给了我以下结果(为了简洁起见,已手动删除了 Zeep 包含的所有带有“none”的属性):
{
'return': {
'devicePool': [
{
'name': 'AU_PER_DP',
'uuid': '{1B1B9EB6-7803-11D3-BDF0-00108302EAD1}'
},
{
'name': 'DE_BLN_DP',
'uuid': '{BEF5605B-1DB0-4157-0176-6C07814C47AE}'
},
{
'name': 'US_NYC_DP',
'uuid': '{B4C65CAB-86CB-30FB-91BE-6F6E712CACB9}'
}
]
},
'sequence': None
}