如何在功能测试中模拟HTTP认证

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.3,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何在功能测试中模拟HTTP认证

在功能测试中验证请求会降低整个测试套件的速度。这可能会成为一个问题,特别是当测试重现用户进行身份验证时所遵循的相同步骤时,例如提交登录表单或使用OAuth身份验证服务。

本文将介绍两种最流行的技术,以避免这些问题并在使用身份验证时创建快速测试。

仅对测试使用更快的身份验证机制

当您的应用程序使用form_login身份验证,您可以通过允许测试使用HTTP身份验证来加快测试速度。这样,您的测试使用简单快速的HTTP Basic方法进行身份验证,而您的实际用户仍然通过正常的登录表单登录。

诀窍是使用http_basic应用程序防火墙中的身份验证,但仅在测试使用的配置文件中:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6
#配置/包/测试/ security.yaml安全:防火墙:#将'main'替换为您自己防火墙的名称主要:http_basic:

的第二个参数将用户名和密码作为服务器变量传递给HTTP,测试现在可以通过HTTP进行身份验证createClient ()

1 2 3 4
客户端静态::createClient ([], [“PHP_AUTH_USER”= >“用户名”“PHP_AUTH_PW”= >“爸爸$ $词”]);

用户名和密码也可以根据每个请求传递:

1 2 3 4
客户端->请求(“删除”' / post / 12, [], [], [“PHP_AUTH_USER”= >“用户名”“PHP_AUTH_PW”= >“爸爸$ $词”]);

创建认证令牌

如果应用程序使用更高级的身份验证机制,则不能使用前面的技巧,但仍然可以使测试更快。现在的诀窍是绕过身份验证过程,创建身份验证令牌并将其存储在会话中。

这种技术需要一些安全组件内部知识,但下面的示例显示了一个完整的示例,您可以根据自己的需要进行调整:

12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
/ /测试/控制器/ DefaultControllerTest.php名称空间应用程序测试控制器使用ob娱乐下载FrameworkBundle测试WebTestCase使用ob娱乐下载组件BrowserKit饼干使用ob娱乐下载组件HttpFoundation响应使用ob娱乐下载组件安全核心身份验证令牌UsernamePasswordTokenDefaultControllerTest扩展WebTestCase私人客户端公共函数设置()->客户=静态::createClient ();}公共函数testSecuredHello()->登录();履带->客户端->请求(“得到”“/管理”);->assertSame(响应::并,->客户端->getResponse ()->getStatusCode ());->assertSame (“管理仪表板”履带->过滤器(“标题”->text ());}私人函数登录()会话->客户端->getContainer ()->get (“会话”);firewallName“secure_area”//如果您没有定义多个连接的防火墙,则上下文默认为防火墙名称//见https://symfob娱乐下载ony.com/doc/current/reference/configuration/security.html#firewall-contextfirewallContext“secured_area”//你可能需要使用不同的令牌类,这取决于你的应用程序。//例如,当使用Guard认证时,必须实例化PostAuthenticationGuardToken令牌UsernamePasswordToken (“管理”firewallName, (“ROLE_ADMIN”]);会话->集(“_security_”firewallContext序列化(令牌));会话->save ();饼干饼干(会话->getName (),会话->getId ());->客户端->getCookieJar ()->集(饼干);}}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。