【发布时间】:2017-08-29 23:50:31
【问题描述】:
我可以通过 Guzzle 从 Laravel 使用外部 api 进行连接。该 api 需要使用授权码通过 oAuth2 进行身份验证。我想知道如何仅使用用户名和密码来集成测试重定向场景?
换句话说:如何通过重定向来模拟浏览器操作,以便在集成测试中从重定向的 uri 中“获取”授权码?
流程
- 我请求(GET)外部api的登录页面
- 我必须填写用户名和密码
- 正确登录后,我将被重定向到指定的重定向uri,并以de授权码作为查询参数
自动化测试
- 我可以连接 api,并且可以执行 GET、POST 和 PUT 请求
- 重定向场景通过浏览器工作,但是在集成测试场景中,我只有用户名和密码,没有CSRF、viewState等字段
问题
在第一个 GET 请求(获取登录表单)的响应中,有多个隐藏字段(CSRF、viewState)。我无法在我的 POST 请求中模拟的那些字段。我只有用户名和密码字段。所以在这种情况下,我从未被重定向,但它再次返回登录页面。因为我错过了关键的隐藏字段。
【问题讨论】:
-
你想达到什么目的?对相关逻辑进行单元测试,或者使用伪造/模拟的 oauth 服务器创建集成测试?
-
我想从重定向 uri 中获取授权码。伪造或模拟的身份验证服务器有什么用处?
-
这取决于您的用例。您真的想从测试中调用外部 api,然后将其成功与外部 api 耦合吗?阅读您的问题,我很难理解您想要实现的目标。
-
感谢您的快速评论。我想使用外部演示 api(集成测试)测试真正的身份验证,而无需模拟或伪造。身份验证后,我想通过将 XML 发布到该 api 来测试真正的通信(已经有效)。
-
@schellingerht 我也在尝试对身份验证代码流进行单元测试。你找到解决办法了吗?
标签: php laravel unit-testing oauth-2.0 guzzle