1. 程式人生 > >java介面自動化1——一個get請求

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"}

請求成功,目前的目錄如下 :

參考博文:

https://blog.csdn.net/u011541946/article/details/80399990