java如何模拟请求_单元测试如何模拟用户请求
python web自動化測試設計構工具書
40.9元
包郵
(需用券)
去購買 >
錯誤
正當我高高興興寫完后臺c層的測試代碼準備提交時,測試機器人報了很多401錯誤,把代碼拉下來一看,原來當我寫代碼時,我的伙伴已經寫好后臺的攔截器了,只有綁定了token的用戶才能訪問后臺,所以當我單元測試c層模擬請求時就會報錯,
因為我的模擬前臺請求就像是一個沒有登陸的用戶請求,經過攔截器必然是被攔截了下來。
解決經過
一開始有點不知所錯。我們的模擬請求失敗是因為后臺在沒有綁定token的情況下請求了其他接口,而我們的攔截器也沒有發token給模擬請求。我們正常要使用系統的話要先登錄,第一次登錄的話后臺會發送一個token給前臺并與用戶綁定,以后就會帶著后臺發來的token去請求。
所以首先模擬一下正常的登錄流程。創造一個方法loginUser(),在方法上添加注釋@Before,用于在每個測試方法前執行。在這個先新建一個用戶用來當我們的模擬用戶,我們用這個用戶的username和password來進行登錄,然后在進行請求。
@Test
public void loginUser() throws Exception
{
String url = "/user/login";
String username = RandomString.make(6);
String password = RandomString.make(6);
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", username);
jsonObject.put("password", password);
// 當以參數username, password調用userService.login方法時,返回true
Mockito.when(this.userService.login(username, password)).thenReturn(true);
// 觸發C層并斷言返回值
this.mockMvc.perform(MockMvcRequestBuilders.post(url)
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(jsonObject.toJSONString()))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("true"));
}
但是兩次模擬請求并不是同一個用戶,我們需要在第一次請求的時候獲取token并保存用戶,在后續請求攜帶token發出模擬請求。這就需要引入request類。
上述方法太麻煩了,在學長的建議下,研究攔截器原理,發現攔截器通過isLogin()函數里判斷token來判斷這個用戶是否登陸過,如果把isLogin方法mock一下,讓他永遠返回true就無論傳什么token就都可以不被攔截了。
@Before
public void loginUser() throws Exception {
Mockito.when(this.userService.isLogin(Mockito.any(String.class))).thenReturn(true);
}
但是只是在mock方法里規定傳入string類型是不行的,我們模擬請求默認token是null,所以我們應該在模擬請求時加入header的token信息,隨意一個字符串就好。
this.mockMvc.perform(
MockMvcRequestBuilders.get(url)
.header("auth-token", "key")
.param("page", "1")
.param("size", "2"))
.andExpect(MockMvcResultMatchers.status().isOk());
我們也可以在mock方法里設置傳入任一參數都返回true,這樣我們就不用在后續模擬請求中發送token了。
@Before
public void loginUser() throws Exception {
Mockito.when(this.userService.isLogin(Mockito.any())).thenReturn(true);
}
總結
不斷改進自己的解決辦法,從中學到更多解決問題的方法,同時加深了對攔截器和token的了解。
java 11官方入門(第8版)教材
79.84元
包郵
(需用券)
去購買 >
總結
以上是生活随笔為你收集整理的java如何模拟请求_单元测试如何模拟用户请求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java调用kafka接口发送数据_Ja
- 下一篇: java enum 报错_enum报错问