有人有使用 Python Zeep 和 Mock 对 SOAP API 进行单元测试的示例吗?

2024-04-06

我正在构建一个使用 Python-zeep 访问第三方 SOAP API 的 Python 应用程序。我想使用模拟响应来实现一些单元测试,因为我并不总是有一个实时服务器来运行我的测试。

我是单元测试的新手,不太确定从哪里开始。我见过使用模拟与请求库的示例,但不太确定如何将其转换为 Zeep。

在我的一个模型上,我有一种从 SOAP API 获取所有设备池的方法。这是相关代码的摘录(我使用辅助方法来提供服务对象,因为我计划在许多其他方法中使用它)。

# Get Zeep Service Object to make AXL API calls
service = get_axl_client(self)

# Get list of all DevicePools present in the cluster
resp = service.listDevicePool(searchCriteria={'name': '%'},
                              returnedTags={'name': '', 'uuid': ''})

我想模拟 resp 对象,但是这是 zeep.objects.ListDevicePoolRes 类型(基于 WSDL 解析的动态类型),并且我不能只用静态值实例化对象。

也许我在这里走错了路,必须更深入一点,实际上模拟 zeep 库的一些内部结构,并在 zeep 解析 XML 之前替换请求响应?

如果有人有类似的例子,我们将不胜感激。


在查看了 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有人有使用 Python Zeep 和 Mock 对 SOAP API 进行单元测试的示例吗? 的相关文章

随机推荐

  • JSF 2.0 中的显式 url 重定向

    我下面有以下两页 你好 xhtml 由 hello jsf url 呈现
  • 访问 MS Access 应用程序中的原始代码

    我一直在尝试查找一些有关访问 MS Access 中的原始代码的信息 我使用 v2007 但可能应该适用于所有版本 举例来说 我想列出应用程序中每个代码隐藏表单和模块中的所有函数并列出它们的参数 你将如何实现这一目标 注意 我当然假设该应用
  • 如何使用 jq 过滤 JSON 对象数组?

    我有以下 JSON 输入 zk kafka InstanceType t2 medium zkMemory 16 kafkaMemory 8 InstanceType t2 small zkMemory 8 kafkaMemory 4 es
  • 限制 ADFS 2.0 使用特定 OU 而不是域级别访问

    考虑以下示例场景 我有一个用于生产 测试 和开发的单个 Active Directory 域 每个域在 OU 级别分开 我想在测试 OU 级别安装 ADFS 并且不希望在测试 OU ADFS 上经过身份验证的用户能够访问 读取和写入 其他
  • jQuery 简单值与 .val() 出现问题

    我有以下代码 document ready function alert font someClass val 这里有一个Fiddle http jsfiddle net 2wwzD 1 用它 有谁知道为什么我无法返回字体标签的值 我是否假
  • 求树的深度?

    我对二叉树和递归非常陌生 我的程序是找到树的高度 但我有点困惑为什么我的程序不起作用 struct Node int value Node left Node right int heightOfTree Node node if node
  • 当属性名称为参数时如何查询属性值?

    通常我们可以查询属性值 例如 Match n Product where n name iPhone X return n 但是 就我而言 我不知道应该匹配哪个属性 但我只知道值 在这种情况下属性名称就变成了一种变量 我想要这样的东西 Ma
  • 如何收到 wifi 网络状态变化的通知?

    我正在编写一个通过 wifi 连接到 telnet 服务器的应用程序 我有一个管理套接字连接的服务 一切正常 但当手机休眠时 它会断开 wifi 无线电 这会导致套接字连接中断 并抛出 SocketException 我觉得我应该能够设置一
  • 如何在 Windows 中使用命令提示符创建多个空文件

    我正在开发一个项目 需要创建多个空文件 过去 我使用过 touch 命令 但这只能让我一次创建一个文件 有没有办法在 Windows 中使用命令提示符创建多个空文件 我感谢您提出的任何建议或解决方案 谢谢你 A FOR循环将允许您创建任意数
  • alias_method 和 class_methods 不能混合使用吗?

    我一直在尝试修补全局缓存模块 但我不明白为什么这不起作用 有没有人有什么建议 这是错误 NameError undefined method get for module Cache from irb 21 in alias method
  • 使用 Dataset API 在 Tensorflow 中批量滑动窗口

    有没有办法修改一批图像的组成 目前 当我创建例如大小为 4 的批次 我的批次将如下所示 Batch1 Img0 Img1 Img2 Img3 第2批 Img4 Img5 Img6 Img7 我需要修改批次的组成 以便它只会转移到下一个图像一
  • 运行 .net 应用程序而不安装 .net 客户端配置文件?

    我在framework 4 0中构建了一个c net应用程序 我不反对为客户端的电脑安装 net 但是在客户端安装它太大了 这不可能有一些小的安装程序或redist包吗 安装并有助于轻松运行 net 应用程序 因为仅为小型应用程序安装完整的
  • 在 Go 中不睡眠的情况下测试异步结果

    我的代码中有相当多的组件具有持久的 go 例程 用于侦听事件以触发操作 大多数时候 他们没有理由 除了测试之外 在完成该操作后发回通知 但是 我的单元测试正在使用 sleep 来等待这些异步任务完成 Send notification ev
  • JUnit 4 与 TestNG - 更新 2013 - 2014 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 JUnit 4 和 TestNG 曾经具有可比性 这两个测试框架有何优缺点 我今天比较了 TestNG 和 JUnit4 以我有限的测试框架经验
  • 将区间表示法解析为 Guava Range

    我需要将包含标准间隔表示法 即 8 100 6 10 等 的字符串解析为 Guava Range 对象 我将如何在 Java 中做到这一点 是否有一个实用程序包可以将字符串解析为构建 Guava Range 对象所需的组件 如果我们看一下这
  • 无法读取未定义的属性“native-element”

    我用的是离子2 我需要获取 HTML 元素值 其实我用的是viewchild 这是我的html模板代码 div class messagesholder last callFunction div p class chat date cha
  • 检索已排序的可手动实例内的隐藏标头

    使用时手动表 http handsontable com 似乎很难从上下文菜单中检索行的标题 考虑以下数据源 var data function return 1212 roman i ii iii 3121 numeric 1 2 3 4
  • 在 JavaScript 中覆盖对象的括号 [index] getter/setter?

    我目前正在构建一个双向链表 http en wikipedia org wiki Doubly linked list执行 我正在尝试 或希望 做的是使用 setter getter 来设置列表中的元素 就像在数组中一样 var index
  • 如何使 svg 元素(例如矩形)scrollIntoView?

    我在图形面板中有一个 svg svg 中的所有节点都在另一个面板中列出 我希望通过单击节点列表中的节点 svg 可以滚动到该节点 每个节点都是一个矩形 但我发现只有上边框在视图中 而节点的其余部分仍然在视图之外 有什么办法可以解决这个问题吗
  • 有人有使用 Python Zeep 和 Mock 对 SOAP API 进行单元测试的示例吗?

    我正在构建一个使用 Python zeep 访问第三方 SOAP API 的 Python 应用程序 我想使用模拟响应来实现一些单元测试 因为我并不总是有一个实时服务器来运行我的测试 我是单元测试的新手 不太确定从哪里开始 我见过使用模拟与