跳转到主要内容

Zope应用程序测试支持

项目描述

zope.app.testing

Latest Version Supported Python versions Build Status Code Coverage

此包为Zope 3应用程序提供测试支持。除了提供许多设置便利函数外,它还实现了一个测试设置,允许用户调用发布者,从而可以编写功能测试。

FDocTest(如何做)

开始步骤

  1. 使用干净的/缺失的 Data.fs

  2. 创建一个名为“mgr”,密码“mgrpw”的管理员,并授予 zope.Manager 角色。

  3. 安装 tcpwatch。

  4. 创建一个临时目录以记录 tcpwatch 输出。

  5. 使用以下命令运行 tcpwatch:tcpwatch.py -L 8081:8080 -s -r tmpdir(端口号是监听端口和转发到的端口;第二个需要与Zope配置匹配)

  6. 在浏览器中,连接到监听端口并执行需要记录的操作。

  7. 关闭 tcpwatch。

  8. 运行脚本 src/zope/app/testing/dochttp.py: python2.4 src/zope/app/testing/dochttp.py tmpdir > somefile.txt

  9. 编辑生成的文本文件,添加说明并省略输出中的不感兴趣部分。

  10. 在功能测试模块(通常是 ftests.py)中,从 zope.app.testing.functional 导入 FunctionalDocFileSuite 并实例化它,传递包含测试的文本文件名称。

DocTest功能测试

此文件记录并测试基于 doctest 的功能测试和基本的 Zope 网络应用程序功能。

请求/响应功能测试

您可以将功能测试作为 doctests 创建。通常,这是通过使用 src/zope/app/testing/dochttp.py 这样的脚本将 tcpwatch 记录的输出转换为 doctest 来完成的,然后对其进行编辑以提供说明并删除不感兴趣的内容。这正是此文件是如何创建的。

在这里,我们将测试一些最基本类型的访问。

首先,我们将测试在没有凭据的情况下访问受保护的页面

>>> print(http(r"""
... GET /@@contents.html HTTP/1.1
... """))
HTTP/1.1 401 Unauthorized
Cache-Control: no-store, no-cache, must-revalidate
Content-Length: ...
Content-Type: text/html;charset=utf-8
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Pragma: no-cache
WWW-Authenticate: basic realm="Zope"
<BLANKLINE>
<!DOCTYPE html PUBLIC ...

这里我们看到我们得到了

  • 一个 401 响应,

  • 一个 WWW-Authenticate 标头,以及

  • 一个包含错误消息的 html 主体

  • 一些技术标题,以使 squid 满意

请注意,我们使用了省略号来表示不感兴趣的内容。

接下来,我们将使用凭据访问同一页面

>>> print(http(r"""
... GET /@@contents.html HTTP/1.1
... Authorization: Basic mgr:mgrpw
... """))
HTTP/1.1 200 OK
Content-Length: ...
Content-Type: text/html;charset=utf-8
<BLANKLINE>
<!DOCTYPE html PUBLIC ...

重要提示:您必须使用用户名“mgr”和密码“mgrpw”。

然后我们得到了正常的输出。

接下来,我们将尝试访问网站管理。由于我们使用了“/manage”,因此我们被重定向了

>>> print(http(r"""
... GET /++etc++site/@@manage HTTP/1.1
... Authorization: Basic mgr:mgrpw
... Referer: https://127.0.0.1:8081/
... """))
HTTP/1.1 303 See Other
Content-Length: 0
Content-Type: text/plain;charset=utf-8
Location: @@contents.html
<BLANKLINE>

请注意,在这种情况下,我们得到了 303 响应。303 响应是 HTTP 1.1 中此类重定向的首选响应。如果我们使用 HTTP 1.0,我们将得到 302 响应

>>> print(http(r"""
... GET /++etc++site/@@manage HTTP/1.0
... Authorization: Basic mgr:mgrpw
... Referer: https://127.0.0.1:8081/
... """))
HTTP/1.0 302 Moved Temporarily
Content-Length: 0
Content-Type: text/plain;charset=utf-8
Location: @@contents.html
<BLANKLINE>

让我们访问我们被重定向到的页面

>>> print(http(r"""
... GET /++etc++site/@@contents.html HTTP/1.1
... Authorization: Basic mgr:mgrpw
... Referer: https://127.0.0.1:8081/
... """))
HTTP/1.1 200 OK
Content-Length: ...
Content-Type: text/html;charset=utf-8
<BLANKLINE>
<!DOCTYPE html PUBLIC ...

最后,让我们访问网站的默认页面

>>> print(http(r"""
... GET / HTTP/1.1
... Authorization: Basic mgr:mgrpw
... """))
HTTP/1.1 200 OK
Content-Length: ...
Content-Type: text/html;charset=utf-8
<BLANKLINE>
<!DOCTYPE html PUBLIC ...

访问对象系统

您可以使用 getRootFolder() 函数

>>> root = getRootFolder()
>>> root
<zope.site.folder.Folder object at ...>

您可以将 HTTP 请求与常规 Python 调用混合使用。请注意,但是,发出 http() 调用意味着事务提交。如果您想放弃在 Python 代码中做出的更改,请在 HTTP 请求之前中止事务。

>>> print(http(r"""
... POST /@@contents.html HTTP/1.1
... Authorization: Basic mgr:mgrpw
... Content-Length: 73
... Content-Type: application/x-www-form-urlencoded
...
... type_name=BrowserAdd__zope.site.folder.Folder&new_value=f1""",
... handle_errors=False))
HTTP/1.1 303 See Other
Content-Length: ...
Content-Type: text/html;charset=utf-8
Location: https://127.0.0.1/@@contents.html
<BLANKLINE>
<!DOCTYPE html ...

现在我们可以看到新文件夹已被添加

>>> [str(x) for x in root.keys()]
['f1']

CHANGES

5.0 (2023-02-10)

  • 支持 Python 3.8、3.9、3.10、3.11。

  • 取消对 Python 2.7、3.5、3.6 的支持。

4.0.0 (2018-10-24)

  • 移除 zope.app.testing.testbrowser。它与 zope.testbrowser 版本 5 不兼容。

  • 添加对 Python 3.5、3.6 和 3.7 的基本支持。

3.10.0 (2012-01-13)

  • 移除了对 zope.app.authentication 的测试依赖。

    zope.testbrowser 4 依赖于这个更改(非常严重),如果它找到了 zope.app.testing。

3.9.0 (2011-03-14)

  • 将 zope.app.testing testbrowser 功能移入 zope.app.testing。这需要 zope.testbrowser 版本 4.0.0 或更高版本。

3.8.1 (2011-01-07)

  • 在请求环境中包含 REMOTE_ADDR('127.0.0.1')。

3.8.0 (2010-09-14)

  • 移除无效的 HTTP_REFERER 默认值。(我们都不希望默认值允许其他人测试而没有 referer,而且“localhost”也不是一个合理的默认值。)这改善了 #98437 的情况

  • 使 xmlrpc 代码与 Python 2.7 兼容。

  • 移除了对 zope.app.zptpage 的测试依赖。

  • 将测试依赖从 zope.app.securitypolicy 更改为 zope.securitypolicy

3.7.7 (2010-09-14)

  • 将 3.7.5 重新发布为 3.7.7 以修复棕色袋发布。

3.7.6 (2010-09-14)

  • 棕色袋发布:它破坏了 zope.testbrowser 的测试。

3.7.5 (2010-04-10)

  • 将 doctests 转换为使用 stdlib doctest 模块,而不是已弃用的 zope.testing.doctest 变体。

3.7.4 (2010-01-08)

  • 在 zope.site 中移动后,从 zope.component 导入 import hooks 功能。

  • 在 zope.location 中移动后,从 zope.component 导入 ISite。这消除了对 zope.location 的依赖。

  • 修复了使用较新 zope.publisher 的测试,该 publisher 需要 zope.login。

3.7.3 (2009-08-20)

  • 修复了针对 python 2.4、python 2.5 和 2.6 的测试;版本 3.7.1 中的更改在 python 2.4 中引入了测试回归。

3.7.2 (2009-07-24)

  • zope.component 中修复了引用的内存泄漏问题后,调整了测试。

3.7.1 (2009-07-21)

  • 修复了失败的测试。代码显示测试期望了错误的价值。

3.7.0 (2009-06-19)

  • 依赖新的 zope.processlifetime 接口,而不是使用来自 zope.app.appsetup 的 BBB 导入。

  • 移除了对 zope.app.component 的未使用依赖。

3.6.2 (2009-04-26)

  • 移除了已弃用的 back35 模块,并失去了对 zope.deferredimport 的依赖。

  • 适应于对 zope.app.authentication 的重构。现在我们依赖于 zope.password

  • 适应于最新的 zope.app.security 重构。我们不再需要这个包。

3.6.1 (2009-03-12)

  • 在 HTTPCaller 中使用 ISkinnable.providedBy(request) 代替 IBrowserRequest 作为调用 setDefaultSkin 的条件。这同时消除了对 zope.publisher 的浏览器部分的依赖。

  • 适应于 IDefaultViewName 从 zope.component.interfaces 移动到 zope.publisher.interfaces。

  • 删除 zpkg 的 DEPENDENCIES.cfg 文件。

3.6.0 (2009-02-01)

  • 修复了 zope.app.testing.setup.setUpTestAsModule 中的 AttributeError(在没有 name 参数的情况下调用)。

  • 使用 zope.container 代替 zope.app.container

  • 在某些部分使用 zope.site 代替 zope.app.folderzope.app.component

3.5.6 (2008-10-13)

  • 修改 provideAdapter 中的参数变量名,以避免与 Python 2.6 中的内置关键字冲突。

3.5.5 (2008-10-10)

  • 重新配置了功能测试设置,以创建特定于测试的 HTTPCaller 实例,确保测试套件中的 doctests 不会共享 cookie。

3.5.4 (2008-08-25)

  • 清理了功能测试设置中的某些事务管理。

3.5.3 (2008-08-22)

  • 修复了围绕单个测试的产品配置的隔离强制措施。

3.5.2 (2008-08-21)

  • 在 setup.py 中添加了缺失的依赖信息。

  • 添加了缺失的导入。

  • 修复了 3.4.3 版本中发布的内存泄漏修复,使其在存在代的情况下更加合理。

3.5.1 (2008-08-20)

  • 纠正了 Fred 的“我是个傻瓜”发布。

3.5.0 (2008-08-20)

  • 添加了对产品配置作为功能层一部分的支持;这更接近于正常操作时的配置顺序。

3.4.3 (2008-07-25)

3.4.2 (2008-02-02)

3.4.1 (2007-10-31)

  • 修复了 ZopeSecurityPolicy 的弃用警告。

3.4.0 (2007-10-27)

  • 首次发布,独立于主 Zope 树。

下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分发

zope.app.testing-5.0.tar.gz (41.1 kB 查看散列)

构建分发

zope.app.testing-5.0-py3-none-any.whl (45.1 kB 查看散列)

上传于 Python 3

由...

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面