silverstripe/testsession

基于浏览器的测试会话的支持模块,例如用于Behat行为测试

安装次数: 426,831

依赖者: 2

建议者: 0

安全: 0

星标: 3

关注者: 16

分支: 20

开放问题: 5

类型:silverstripe-vendormodule


README

CI

概述

重要:此模块仅适用于开发和测试,在生产服务器上使用存在安全风险。 如果此模块安装在活站点上,任何用户都可能成为管理员,或执行其他恶意操作。

此模块在浏览器中启动测试会话,以便在干净状态下测试Silverstripe应用程序。通常,会话是在一个全新的数据库上启动的,只加载默认记录。还可以从YAML固定文件或数据库转储中加载更多数据。

会话持久保存在一个文件中,该文件在启动会话时生成。只要此文件存在,测试会话就被认为是进行的,无论是通过Web浏览器还是通过命令行执行。默认情况下,该文件存储在webroot的assets/TESTS_RUNNING-<id>.json下。<id>值是存储在浏览器会话中的随机令牌,以便使测试会话特定于执行浏览器,并允许多人在同一webroot中使用自己的测试会话。

模块还在数据库中保留一些关于会话状态元数据,以便客户端也可以使用它。例如,silverstripe-behat-extension可以通过此模块API使用它,使我们能够引入一些灰盒测试技术。

该模块还充当Silverstripe Behat扩展的初始化器(Silverstripe Behat Extension)。这是Behat所必需的,因为Behat CLI测试运行器需要仅针对测试的浏览器连接持久化测试配置,该配置可在任意的URL端点上使用。例如,我们设置了一个测试邮件器,它将每封电子邮件写入一个临时数据库表,以便通过基于CLI的过程进行检查。

设置

只需在Silverstripe webroot中要求此模块(3.0或更高版本)

composer require --dev silverstripe/behat-extension

使用方法

您可以通过手动请求特定的URL来启动测试会话,并通过其他URL端点与之交互。

命令

  • dev/testsession: 显示启动测试会话的选项
  • dev/testsession/start: 设置测试状态,最常见的是将构建测试数据库,并将您的浏览器会话修改为使用此数据库。请参阅下面的“参数”文档。
  • dev/testsession/end: 删除测试状态,并重置为原始数据库。
  • dev/testsession/loadfixture?fixture=<path>: 将固定文件加载到现有测试状态中。
  • dev/testsession/clear: 清空测试状态。
  • dev/testsession/browsersessionstate: 设置或取消设置浏览器会话状态(与测试会话状态不同)。使用查询参数定义状态。

虽然您可以使用界面设置测试会话状态,但通过“dev/testsession/start”上的查询参数以编程方式设置它们可能很有用。

  • fixture: 以SapphireTest通常接受的格式加载YAML固定文件(请参阅固定文件格式文档)。路径应该是相对于webroot的。
  • createDatabase: 创建临时数据库。
  • importDatabasePath: 加载到新创建的临时数据库中的数据库转储的绝对路径。
  • importDatabaseFilename: 相对于TestSessionController.database_templates_path的数据库转储文件名。
  • requireDefaultRecords: 包括模型类上定义的默认记录。
  • 数据库:在当前浏览器会话中将一个替代的数据库名称设置为一个cookie。实际上并不创建数据库,这通常由SapphireTest::create_temp_db()处理。注意:出于安全考虑,数据库名称限制在特定的命名规范内:以“ss_tmpdb”前缀和七个随机数字序列。这可以避免用户访问同一连接上的其他生产数据库。
  • mailerMailer的子类,通常用于记录邮件而不是实际发送它们。
  • datetime:为所有框架操作设置一个模拟的日期。格式为"yyyy-MM-dd HH:mm:ss"(例如:"2012-12-31 18:40:59")。
  • globalTestSession:独立于当前浏览器会话激活测试会话,实际上将网站设置为测试会话模式,适用于所有用户的多个浏览器。仅在"dev"模式下可用。例如,在Chrome中创建一个全局测试会话,然后您可以在Firefox中共享会话数据。但是,如果在启动全局会话之前在某处启动了非全局会话,那么在浏览器中将优先考虑该非全局会话。

带有参数的示例用法

dev/testsession/start?database=ss_tmpdb_1234567&fixture=cms/tests/controller/CMSMainTest.yml