如何模拟HTTP身份验证功能测试
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何模拟HTTP身份验证功能测试
在功能测试可以验证请求减缓整个测试套件。这可能成为一个问题尤其是测试复制相同的步骤,用户进行身份验证,如提交登录表单或使用OAuth身份验证服务。
本文解释了两种最受欢迎的技术来避免这些问题,当使用身份验证创建快速测试。
仅供测试使用更快的身份验证机制
当你的应用程序使用form_login
身份验证,您可以让您的测试更快通过允许他们使用HTTP身份验证。这种方式测试验证的简单和快速的HTTP基本方法当你真正的用户仍然登录通过正常的登录表单。
诀窍是使用http_basic
身份验证应用程序防火墙,但只有在配置文件中所使用的测试:
- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/包/测试/ security.yaml安全:防火墙:#替换“主要”的自己的防火墙主要:http_basic:~
1 2 3 4 5 6 7
< !——配置/包/测试/安全。xml - - ><安全:配置>< !——取代“主要”自己的防火墙的名称- - ><安全:防火墙的名字=“主要”><安全:http基本/ >< /安全:防火墙>< /安全:配置>
1 2 3 4 5 6 7 8 9
/ /配置/包/测试/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [/ /替换“主要”的自己的防火墙“主要”= > [“http_basic”= > []]]]);
测试现在可以通过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”= >“爸爸$ $词”]);
创建身份验证令牌
如果您的应用程序使用一个更高级的身份验证机制,不能使用前面的技巧,但它仍然可能使测试更快。目前的策略是绕过身份验证过程,创建身份验证令牌自己并将其存储在会话中。
这种技术需要安全组件内部的一些知识,但下面的例子展示了一个完整的示例,可以适应你的需要:
1 2 3 4 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娱乐下载\组件\安全\核心\身份验证\令牌\UsernamePasswordToken;类DefaultControllerTest扩展WebTestCase{私人美元客户端=零;公共函数设置(){美元这- >客户=静态::createClient ();}公共函数testSecuredHello(){美元这- >登录();美元履带=美元这- >客户端- >请求(“得到”,“/管理”);美元这- >assertSame(响应::并,美元这- >客户端- >getResponse ()- >getStatusCode ());美元这- >assertSame (“管理仪表板”,美元履带- >过滤器(“标题”)- >text ());}私人函数登录(){美元会话=美元这- >客户端- >getContainer ()- >get (“会话”);美元firewallName=“secure_area”;/ /如果你不定义多个连接防火墙,防火墙上下文默认名称/ / https://symob娱乐下载fony.com/doc/current/reference/configuration/security.html firewall-context见美元firewallContext=“secured_area”;/ /您可能需要使用一个不同的令牌类取决于您的应用程序。/ /例如,当使用保护认证必须实例化PostAuthenticationGuardToken美元令牌=新UsernamePasswordToken (“管理”,零,美元firewallName,(“ROLE_ADMIN”]);美元会话- >集(“_security_”。美元firewallContext序列化(美元令牌));美元会话- >save ();美元饼干=新饼干(美元会话- >getName (),美元会话- >getId ());美元这- >客户端- >getCookieJar ()- >集(美元饼干);}}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。