Java語言搭建介面自動化框架學習八(鑑權)
3種常見的鑑權方式
1、cookie
2、session
3、token
3者的原理和區別需要查詢網路資料好好理解下
HttpUtils類修改抽取請求頭和返回響應body
前面的註冊和登入介面都是不需要有鑑權資訊就可以完成的介面測試,但是想充值、投資等需要有對應使用者登入成功前提下才能測試的介面,就需要考慮鑑權的處理。
示例背景以token為例子,token生成在登入響應報文中,以及充值介面請求頭需增加token值
產生2個問題:
1、需要獲取到登入響應報文中的token值
2、充值請求報文中報文頭增加token值
為解決以上2個問題,需要改造HttpUtils類,把請求頭從自定義的get、post方法中抽取出來,並且需要得到把請求的響應報文儲存起來
// 設定請求頭
public static void setHeaders(HttpRequest request,Map<String,String> headers) {
//得到所有的請求頭鍵值
Set<String> keys = headers.keySet();
//迴圈遍歷得到鍵值對應的values值
for (String key : keys) {
String value = headers.get(key);
request.setHeader(key,value);
}
}
自定義的get、post、call方法修改入參,把請求頭作為入參傳入,並把返回值從void改為String型別,示例為get方法的程式碼修改,post和call方法類似
// 傳送get請求方法,修改返回值為String和增加入參headers
public static String get(String url,Map<String,String> headers) throws Exception {
HttpGet get = new HttpGet(url);
// 修改程式碼:呼叫新寫的setHeaders方法吧請求頭傳入
setHeaders(get, headers);
HttpClient httpClient = HttpClients.createDefault();
HttpResponse httpResponse = httpClient.execute(get);
//修改程式碼:獲取響應體作為返回值
return returnResponseBody(httpResponse);
}
新建EnvUtils類用來儲存環境變數
可以理解成一樣做介面測試的工具:postman裡的環境變數,設定成鍵值對的形式
public class EnvUtils {
public static Map<String, String> env = new HashMap<String, String>();
}
case類修改
原有的登入和註冊案例類均需要修改@Test裡的程式碼,以LoginCase為例子
@Test(dataProvider = "Datas")
public void test(ApiInfo api, CaseInfo c) {
//因為post方法中設定請求頭值的方法被抽取出來了,所以根據介面需要的情況設定,以Content-Type為例子
Map<String, String> headers = new HashedMap<String, String>();
headers.put("Content-Type", "application/json");
//call方法改造增加了返回值和請求頭入參
String body = HttpUtils.call(api.getApiUrl(), api.getApiMethod(), c.getParams(), headers);
// fastjson裡的jsonpath從響應報文中提取token欄位值
Object token = JSONPath.read(body, "$.data.token_info.token");
if (token != null) {
//如果token不為空,則把token值儲存到環境變數中,環境變數名為token
EnvUtils.env.put("${token}", token.toString());
//同時從登入響應報文中獲取充值介面需要的id值,程式碼寫法和token獲取一致省略程式碼
}
}
}
新增RechargeCase類
public class RechargeCase {
@Test(dataProvider = "Datas")
public void test(ApiInfo api,CaseInfo c) {
Map<String, String> headers = new HashedMap<String, String>();
headers.put("Content-Type", "application/json");
//從環境變數中獲取到登入介面儲存的token值
String token = EnvUtils.env.get("${token}");
//如果token不為空,則把token值放入請求頭的Authorization
if(StringUtils.isNotBlank(token)) {
headers.put("Authorization", "Bearer " + token);
}
String body = HttpUtils.call(api.getApiUrl(),api.getApiMethod(),c.getParams(),headers);
}
@DataProvider
public Object[][] Datas(){
//充值介面的在介面資訊excel裡的ApiId=3
Object[][] datas = ExcelUtils.getApiAndCaseByApiId("3");
return datas;
}
}
修改excel,新增充值介面測試案例引數後,以testng執行檢查下是否可以充值成功
相關文章
- Java語言搭建介面自動化框架學習一(單介面請求和響應)Java框架
- python--介面自動化鑑權例項Python
- 介面自動化(四):框架搭建(Python)框架Python
- 介面自動化實戰之框架搭建框架
- 介面自動化測試框架搭建的思路框架
- 介面自動化測試框架搭建總結框架
- pytest+request+allure 介面自動化框架搭建分享框架
- 學習Python自動化能做什麼?Python程式語言Python
- go語言學習-介面Go
- java 自動化與 python 自動化哪種程式語言吃香?JavaPython
- java語言學習Java
- Jmeter+Ant+Jenkins介面自動化測試框架搭建for WindowsJMeterJenkins框架Windows
- 突破!自然語言強化學習(NLRL):一個可處理語言反饋的強化學習框架強化學習框架
- 介面自動化測試框架 HttpFPT框架HTTP
- 前端鑑權知識學習前端
- 8.17----學習JAVA語言Java
- 7.27----學習JAVA語言Java
- java自動化——web自動化複習JavaWeb
- 四.unittest介面自動化框架介紹框架
- Jmeter+Ant+Jenkins介面自動化框架JMeterJenkins框架
- 【python介面自動化】初識unittest框架Python框架
- 學會Python+Selenium,分分鐘搭建Web自動化框架!PythonWeb框架
- 小白學習Golang(八)Go語言集合類(上)Golang
- 鑑權理論知識學習
- 自動化測試如此容易!多語言自動化測試框架 Selenium 程式設計(C#篇)框架程式設計C#
- 基於Python+requests搭建的自動化框架-實現流程化的介面串聯Python框架
- Python+Pytest+Allure+Jenkins 介面自動化框架PythonJenkins框架
- Jmeter+Ant+Jenkins介面自動化框架(續)JMeterJenkins框架
- Java語言入門:該如何學習JavaJava
- 如何學習一門程式語言或框架框架
- 透過示例學習-Go-語言-2023-八-Go
- 學習 java 做自動化測試相關Java
- Go語言核心36講(Go語言進階技術八)--學習筆記Go筆記
- Go語言學習筆記 - PART9 - 介面Go筆記
- Go語言學習之路-11-方法與介面Go
- <討論>2020年 的 python 介面自動化框架Python框架
- Python+Pytest+Allure+Git+Jenkins介面自動化框架PythonGitJenkins框架
- java+appium 自動化環境搭建JavaAPP