在 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.
該測試會通過:
文章略短, 就介紹到這.