這篇文章主要介紹了Java接口自動(dòng)化測(cè)試框架設(shè)計(jì)之Get請(qǐng)求方法和測(cè)試的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),唐縣企業(yè)網(wǎng)站建設(shè),唐縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,唐縣網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,唐縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
1.Get請(qǐng)求API舉例
瀏覽器打開網(wǎng)址https://reqres.in,然后下拉一屏,我們就可以看到這個(gè)網(wǎng)站的API舉例,我們來看看顯示用戶的get接口。
通過這個(gè)圖,我們能夠獲取這些信息
1)網(wǎng)站host地址:https://reqres.in/
2)用戶展示請(qǐng)求方式是: Get
3)接口的url 是: /api/users
4)接口的響應(yīng)狀態(tài)碼是200,還可以看到響應(yīng)body的JSON內(nèi)容。
獲取上面這些接口信息之后,我們?cè)诒镜豴ostman上來測(cè)試一下,如果沒有postman請(qǐng)安裝一個(gè)和postman差不多的能做接口手工測(cè)試的圖形化界面工具,例如jmeter等。
這個(gè)接口,我們通過postman手動(dòng)測(cè)試,發(fā)現(xiàn)和網(wǎng)站提供的是一樣結(jié)果,說明這get請(qǐng)求的接口測(cè)試通過。那么如果我們想通過Java代碼實(shí)現(xiàn),需要怎么做呢?接下來,才是本篇的重點(diǎn)內(nèi)容。
2.代碼過程
前面一篇文章,我們介紹了基礎(chǔ)環(huán)境的搭建過程,這里,接著前面的環(huán)境來逐步完成一個(gè)Get請(qǐng)求的設(shè)計(jì)和測(cè)試過程。
2.1 設(shè)計(jì)配置文件
我們這個(gè)序列是要教會(huì)大家設(shè)計(jì)接口自動(dòng)化測(cè)試框架的目的,所以我們一些設(shè)計(jì)和組織項(xiàng)目結(jié)構(gòu)的方式,需要參考框架的思維。寫一個(gè)配置文件,很簡(jiǎn)單,意義就是方便測(cè)試多套環(huán)境下的接口測(cè)試。我們工作中,一個(gè)項(xiàng)目,分測(cè)試環(huán)境,預(yù)發(fā)布環(huán)境和線上生產(chǎn)環(huán)境,這三套環(huán)境,接口肯定是一樣,只不過服務(wù)器地址不同,所以,我們框架設(shè)計(jì)需要支持寫一套接口測(cè)試用例,在三套環(huán)境上可以跑得同。
在src/main/java下新建一個(gè)包:com.qa.config,然后在新包下新建一個(gè)config.properties文件,文件內(nèi)容如下。
然后在src/main/java下新建一個(gè)包:com.qa.base,新建一個(gè)TestBase.java,這個(gè)類作為所有接口請(qǐng)求測(cè)試的父類,都需要繼承這個(gè)父類,目前我們就寫一個(gè)構(gòu)造方法,實(shí)現(xiàn)加載讀取properties文件。
TestBase.java 代碼如下:
package com.qa.base; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; public class TestBase { public Properties prop; //寫一個(gè)構(gòu)造函數(shù) public TestBase() { try { prop = new Properties(); FileInputStream fis = new FileInputStream(System.getProperty("user.dir")+ "/src/main/java/com/qa/config/config.properties"); prop.load(fis); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
這里來復(fù)習(xí)下構(gòu)造函數(shù)的作用,上面我們把加載配置文件的代碼寫在空參構(gòu)造里,好處就是,每初始化這個(gè)類的對(duì)象就會(huì)執(zhí)行構(gòu)造函數(shù)的代碼,即執(zhí)行讀取配置文件這么一個(gè)作用。關(guān)于上面配置文件路徑是否拼接正確,你可以新建一個(gè)main方法的類,執(zhí)行打印語句:System.out.println(System.getProperty("user.dir"));
目前,項(xiàng)目結(jié)構(gòu)圖如下
2.2 Get請(qǐng)求方法代碼實(shí)現(xiàn)
在src/main/java下新建一個(gè)包:com.qa.restclient,然后新建一個(gè)RestClient.java文件,下面是具體代碼,實(shí)現(xiàn)了get請(qǐng)求,和得到相應(yīng)狀態(tài)碼和響應(yīng)頭信息,以及響應(yīng)主體的json內(nèi)容。
package com.qa.restclient; import java.io.IOException; import java.util.HashMap; import org.apache.http.Header; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class RestClient { //1. Get 請(qǐng)求方法 public void get(String url) throws ClientProtocolException, IOException { //創(chuàng)建一個(gè)可關(guān)閉的HttpClient對(duì)象 CloseableHttpClient httpclient = HttpClients.createDefault(); //創(chuàng)建一個(gè)HttpGet的請(qǐng)求對(duì)象 HttpGet httpget = new HttpGet(url); //執(zhí)行請(qǐng)求,相當(dāng)于postman上點(diǎn)擊發(fā)送按鈕,然后賦值給HttpResponse對(duì)象接收 CloseableHttpResponse httpResponse = httpclient.execute(httpget); //拿到Http響應(yīng)狀態(tài)碼,例如和200,404,500去比較 int responseStatusCode = httpResponse.getStatusLine().getStatusCode(); System.out.println("response status code -->"+responseStatusCode); //把響應(yīng)內(nèi)容存儲(chǔ)在字符串對(duì)象 String responseString = EntityUtils.toString(httpResponse.getEntity(),"UTF-8"); //創(chuàng)建Json對(duì)象,把上面字符串序列化成Json對(duì)象 JSONObject responseJson = JSON.parseObject(responseString); System.out.println("respon json from API-->" + responseJson); //獲取響應(yīng)頭信息,返回是一個(gè)數(shù)組 Header[] headerArray = httpResponse.getAllHeaders(); //創(chuàng)建一個(gè)hashmap對(duì)象,通過postman可以看到請(qǐng)求響應(yīng)頭信息都是Key和value得形式,所以我們想起了HashMap HashMap<String, String> hm = new HashMap<String, String>(); //增強(qiáng)for循環(huán)遍歷headerArray數(shù)組,依次把元素添加到hashmap集合 for(Header header : headerArray) { hm.put(header.getName(), header.getValue()); } //打印hashmap System.out.println("response headers -->"+ hm); } }
上面的get方法代碼寫得比較亂,需要認(rèn)真看注釋,不然層次不清晰。這段代碼肯定需要以后重構(gòu)的,我們剛開始,方便我們測(cè)試就先這樣去寫就好。目前,項(xiàng)目結(jié)構(gòu)圖如下
2.3 TestNG用例測(cè)試Get方法
在src/test/java下新建一個(gè)包:com.qa.tests,然后新建一個(gè)GetApiTest.java類,寫一個(gè)TestNG的測(cè)試用例來測(cè)試下我們上面寫的Get請(qǐng)求方法。
package com.qa.tests; import java.io.IOException; import org.apache.http.client.ClientProtocolException; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import com.qa.base.TestBase; import com.qa.restclient.RestClient; public class GetApiTest extends TestBase{ TestBase testBase; String host; String url; RestClient restClient; @BeforeClass public void setUp() { testBase = new TestBase(); host = prop.getProperty("HOST"); url = host + "/api/users"; } @Test public void getAPITest() throws ClientProtocolException, IOException { restClient = new RestClient(); restClient.get(url); } }
選擇run as testng,運(yùn)行,輸出結(jié)果如下:
[RemoteTestNG] detected TestNG version 6.14.3 response status code -->200 respon json from API-->{"per_page":3,"total":12,"data":[{"last_name":"Bluth","id":1,"avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg","first_name":"George"},{"last_name":"Weaver","id":2,"avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg","first_name":"Janet"},{"last_name":"Wong","id":3,"avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg","first_name":"Emma"}],"page":1,"total_pages":4} response headers -->{Transfer-Encoding=chunked, Server=cloudflare, CF-RAY=41e822894b39336d-HKG, Access-Control-Allow-Origin=*, ETag=W/"1bb-D+c3sZ5g5u/nmLPQRl1uVo2heAo", Connection=keep-alive, Set-Cookie=__cfduid=d9d93dc43c046707f916670ef491f4c8e1526917157; expires=Tue, 21-May-19 15:39:17 GMT; path=/; domain=.reqres.in; HttpOnly, Date=Mon, 21 May 2018 15:39:17 GMT, Content-Type=application/json; charset=utf-8, X-Powered-By=Express, Expect-CT=max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"} PASSED: getAPITest
接下來,我們把響應(yīng)內(nèi)容的的body的json內(nèi)容拷貝到一個(gè)在線的Josn格式化顯示網(wǎng)站(https://www.json.cn/),看看效果如下。
這個(gè)結(jié)果和postman上一樣,數(shù)據(jù)都對(duì)得上,本篇關(guān)于Java代碼基于Httpclient開源庫實(shí)現(xiàn)Get請(qǐng)求的過程就介紹到這里。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Java接口自動(dòng)化測(cè)試框架設(shè)計(jì)之Get請(qǐng)求方法和測(cè)試的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
文章名稱:Java接口自動(dòng)化測(cè)試框架設(shè)計(jì)之Get請(qǐng)求方法和測(cè)試的示例分析
文章鏈接:http://jinyejixie.com/article44/pddjee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航、網(wǎng)站營銷、小程序開發(fā)、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
移動(dòng)網(wǎng)站建設(shè)知識(shí)