Zope应用程序测试支持
项目描述
zope.app.testing
此包为Zope 3应用程序提供测试支持。除了提供许多设置便利函数外,它还实现了一个测试设置,允许用户调用发布者,从而可以编写功能测试。
FDocTest(如何做)
开始步骤
使用干净的/缺失的 Data.fs
创建一个名为“mgr”,密码“mgrpw”的管理员,并授予 zope.Manager 角色。
安装 tcpwatch。
创建一个临时目录以记录 tcpwatch 输出。
使用以下命令运行 tcpwatch:tcpwatch.py -L 8081:8080 -s -r tmpdir(端口号是监听端口和转发到的端口;第二个需要与Zope配置匹配)
在浏览器中,连接到监听端口并执行需要记录的操作。
关闭 tcpwatch。
运行脚本 src/zope/app/testing/dochttp.py: python2.4 src/zope/app/testing/dochttp.py tmpdir > somefile.txt
编辑生成的文本文件,添加说明并省略输出中的不感兴趣部分。
在功能测试模块(通常是 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.folder 和 zope.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)
修复了所有功能测试中的内存泄漏。请参阅:https://bugs.launchpad.net/zope3/+bug/251273
3.4.2 (2008-02-02)
修复了请求中的冲突错误 599。请参阅:http://mail.zope.org/pipermail/zope-dev/2008-January/030844.html
3.4.1 (2007-10-31)
修复了 ZopeSecurityPolicy 的弃用警告。
3.4.0 (2007-10-27)
首次发布,独立于主 Zope 树。
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。