我有一个我正在编写的应用程序,它通过OAuth2.0授权服务器进行身份验证。我想测试那些只有在您登录后才可以访问的部分,但是Oauth服务器是一个外部依赖项,它使我的测试复杂化并变得脆弱。
对我该怎么做有什么建议吗?这个行业的做法是什么?我的直觉是以某种方式模拟服务器,以便它允许访问受保护的资源。
如果重要的话,这是一个使用Flask编写的Python webapp。
我正在使用一个自定义的oauth服务器,它将在我自己的域上运行,虽然可以像FoxMask建议的那样添加某种沙箱功能,但我更希望能够在不需要额外运行服务器的情况下运行测试。
从使用者(即您的应用程序)方面来说,OAuth2进程可以分为两部分:
对于#1,您需要测试的是,当您调用启动身份验证过程的路由时,返回的响应是重定向到OAuth2提供程序。这很容易用烧瓶的test client来完成。响应的状态代码应为302,并将“Location”头设置为OAuth2提供程序的授权URL。注意,您不需要provider来启动,您只是在测试响应是否是重定向,但实际上不需要重定向。
测试#2要复杂一些。您的Flask应用程序有一个特殊的URL,它被指定为OAuth2提供程序发送回授权代码的“重定向URL”。您可以调用这个URL,让Flask测试客户机传递一个模拟代码,这没有问题。
问题是,在处理重定向URL的view函数中,需要调用OAuth2提供程序来交换访问令牌的身份验证代码,这是同步完成的。要防止此事务发生,您必须检查
app.config['TESTING']
,在这种情况下,跳过实际请求并用包含模拟访问令牌的假响应替换它。从那时起,您还需要伪造对OAuth2提供程序的任何其他调用,这些调用发送访问令牌来请求数据。
如果您在Flask应用程序中使用OAuth2客户机库,则无需在应用程序中创建测试异常就可以更轻松地创建模拟提供程序。在我的例子中,我使用的是rauth,为此,我创建了
OAuth2Service
类的一个子类,该子类重写适当的方法,并使用从实际会话捕获的模拟数据进行响应。然后在我的测试设置中,我只创建模拟服务,应用程序被愚弄到认为它在与真正的服务器对话。我希望这能有帮助。
相关问题 更多 >
编程相关推荐