java介面自動化1——一個get請求
1、前提條件:
(1).本機環境安裝了maven並配置環境變數,如果是idea不用安裝,已經集成了
(2).本機環境安裝了idea軟體
(3).本機環境安裝了Java jdk 8版本
(4).本機需要能連線上網際網路
新建maven專案就不寫了,前面ui自動化寫過了
2、新增必要的依賴包:httpclient、httpcore、Fastjson、Testng
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.10</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.10</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.29</version> </dependency>
Httpcore主要是網路相關的元件,我們使用Http請求就需要網路相關底層方法。Testng主要是是一個單元測試框架,方便我們編寫介面自動化用例。Fastjson是阿里巴巴的一個json的開源的元件,據說是最快的json的元件,主要用來json序列化和反序列操作。
3、寫一個get請求的例子
(1)開啟網站:https://reqres.in/,往下拉看到如圖所示:
通過這個圖,我們能夠獲取這些資訊
1)網站host地址:https://reqres.in/
2)使用者展示請求方式是: Get
3)介面的url 是: /api/users
4)介面的響應狀態碼是200,還可以看到響應body的JSON內容。
有了這些資訊我們可以在Jmeter或者postman上面來測試一下:
執行一下:
和網站圖片上顯示一樣,說明測試通過了。
(2)開始寫程式碼:
1)設計配置檔案:在src/main/java下新建一個包:com.qa.config,然後在新包下新建一個config.properties檔案,檔案內容如下。
2)新建一個TestBase.java,在src/main/java下新建一個包:com.qa.base包,將這個類寫在該包中,該類作為所有介面請求測試的父類,都需要繼承這個父類。目前我們就寫一個構造方法,實現載入讀取properties檔案:
package com.qa.base; import org.testng.TestException; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; public class TestBase { public Properties prop; 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(); } } //mian函式主要是為了檢測user.dir目錄是否正確,執行結果:E:\Java_project\MavenProject_script正是當前專案的目錄 public static void main(String[] args){ System.out.println(System.getProperty("user.dir")); } }
上面我們把載入配置檔案的程式碼寫在空參建構函式裡,好處就是,每初始化這個類的物件就會執行建構函式的程式碼,即執行讀取配置檔案這麼一個作用
3)新建一個RestClient.java類,實現get請求的程式碼。在src/main/java下新建一個包:com.qa.restclient,最要實現:實現了get請求,和得到相應狀態碼和響應頭資訊,以及響應主體的json內容
package com.qa.restclient;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
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 java.io.IOException;
import java.util.HashMap;
public class RestClient {
//1. Get 請求方法
public void get(String url) throws ClientProtocolException, IOException {
//建立一個可關閉的HttpClient物件
CloseableHttpClient httpclient= HttpClients.createDefault();
//建立一個HttpGet的請求物件
HttpGet httpget=new HttpGet(url);
//執行請求,相當於jmeter上點選執行按鈕,然後賦值給HttpResponse物件接收
CloseableHttpResponse httpResponse=httpclient.execute(httpget);
//拿到Http響應狀態碼,例如和200,404,500去比較
int respinseStatusCode=httpResponse.getStatusLine().getStatusCode();
System.out.println("response status code-->"+respinseStatusCode);
//把響應內容儲存在字串物件
String responseString= EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
//建立Json物件,把上面字串序列化成Json物件
JSONObject responseJson= JSON.parseObject(responseString);
System.out.println("respon json from API->"+responseJson);
//獲取響應頭資訊,返回是一個數組
Header[] headerArray=httpResponse.getAllHeaders();
//建立一個hashmap物件,通過jmeter可以看到請求響應頭資訊都是Key和value得形式,所以我們想起了HashMap
HashMap<String,String> hm=new HashMap<String,String>();
//增強for迴圈遍歷headerArray陣列,依次把元素新增到hashmap集合
for(Header header:headerArray){
hm.put(header.getName(),header.getValue());
}
//列印HashMap
System.out.println("response headers-->"+hm);
}
}
4)寫一個測試類:GetApiTest.java類,在src/test/java下新建一個包:com.qa.tests。測試上面的get請求
package com.qa.tests;
import com.qa.base.TestBase;
import com.qa.restclient.RestClient;
import org.apache.http.client.ClientProtocolException;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.io.IOException;
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);
}
}
執行結果:
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=459a199309239559-NRT, Access-Control-Allow-Origin=*, ETag=W/"1bb-D+c3sZ5g5u/nmLPQRl1uVo2heAo", Connection=keep-alive, Set-Cookie=__cfduid=d746298a777ed31a0deaa8ed5264067471536836319; expires=Fri, 13-Sep-19 10:58:39 GMT; path=/; domain=.reqres.in; HttpOnly, Date=Thu, 13 Sep 2018 10:58:39 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"}
請求成功,目前的目錄如下 :
參考博文: