您现在的位置是:网站首页> 内容页

ASP.NET Core Web API 集成测试中使用 Bearer Token

  • ag 5500aaa
  • 2019-01-06
  • 36人已阅读
简介在 ASP.NETCoreWebAPI集成测试一文中我介绍了ASP.NETCoreWebAPI的集成测试. 在那里我使用了测试专用的Startup类里面的配置和开发时

在 ASP.NET Core Web API 集成测试一文中 我介绍了ASP.NET Core Web API的集成测试. 

在那里我使用了测试专用的Startup类 里面的配置和开发时有一些区别 例如里面去掉了用户身份验证相关的中间件.

但是有些被测试的行为里面需要用到身份/授权信息.

所以本文就介绍一下在API集成测试中发送请求时使用Bearer Token作为Authorization Header的情况.

 

集成测试中使用Bearer Token

我这个项目里生产时使用的是Identity Server 4 而进行集成测试时使用Identity Server 4可能会不太方便 所以我决定简化一下 把这项工作就仅限制在API和测试项目这两个项目里.

 

首先为被测试系统添加授权/身份验证中间件 修改StartupIntegrationTest:

在ConfigureServices()方法里 首先添加一个权限策略 要求所有的MVC Controller只有授权的用户才能访问.

随后使用AddAuthentication()添加身份验证中间件 并设置Bearer作为方案 通过AddJwtBearer()进行一些参数配置.

这里需要用到一个secret 因为测试项目会用到 所以暂时我把它弄成静态属性了.

最后在Configure()方法里使用该中间件即可.

 

来到集成测试项目的TestServerFixture类 先要要做的就是使用上面的secret生成token 并在HttpClient里设置Authorization Header即可:

生成token的代码里可以设置Identity Claims. 这里我只添加了Name和Role.

 

然后我们试试 找一个集成测试进行调试 我使用的是VSCode 点击方法上面的debug:

 

我在被测试方法里添加了一些傻代码 以便调试用户信息:

查看Claims:

可以看到在测试代码里设置了Identity Claims了 说明使用Bearer Token成功了.

 

测试身份验证中间件

被测试系统使用了身份中间件: app.UserAnthentication() 我们也可以测试一下这个中间件的功能 如果Token不正确的话 就应该返回401 UnAuthorized状态码:

这个测试代码很简单 就是设置了一个不正确的token 并Assert返回状态码是401.

 

该测试会通过:

 

文章略短 就介绍到这.

 

文章评论

Top