欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java接口自動(dòng)化測(cè)試框架設(shè)計(jì)之Get請(qǐng)求方法和測(cè)試詳解

 更新時(shí)間:2019年07月04日 16:28:56   作者:Anthony_tester  
這篇文章主要介紹了Java接口自動(dòng)化測(cè)試框架設(shè)計(jì) Get請(qǐng)求方法和測(cè)試,框架設(shè)計(jì)我們只是介紹基本的組件,而且框架設(shè)計(jì)沒(méi)有想象那么難,一步一步跟著做就會(huì)了。這篇我們來(lái)演示,如果通過(guò)Java代碼來(lái)實(shí)現(xiàn)一個(gè)用純代碼實(shí)現(xiàn)Http中的Get請(qǐng)求過(guò)程,需要的朋友可以參考下

我來(lái)介紹通過(guò)代碼逐步實(shí)現(xiàn)接口自動(dòng)化測(cè)試框架的設(shè)計(jì)過(guò)程。先不要著急,框架設(shè)計(jì)我們只是介紹基本的組件,而且框架設(shè)計(jì)沒(méi)有想象那么難,一步一步跟著做就會(huì)了。這篇我們來(lái)演示,如果通過(guò)Java代碼來(lái)實(shí)現(xiàn)一個(gè)用純代碼實(shí)現(xiàn)Http中的Get請(qǐng)求過(guò)程。

1.Get請(qǐng)求API舉例

瀏覽器打開(kāi)網(wǎng)址https://reqres.in,然后下拉一屏,我們就可以看到這個(gè)網(wǎng)站的API舉例,我們來(lái)看看顯示用戶(hù)的get接口。

通過(guò)這個(gè)圖,我們能夠獲取這些信息

1)網(wǎng)站host地址:https://reqres.in/

2)用戶(hù)展示請(qǐng)求方式是: Get

3)接口的url 是: /api/users

4)接口的響應(yīng)狀態(tài)碼是200,還可以看到響應(yīng)body的JSON內(nèi)容。

 獲取上面這些接口信息之后,我們?cè)诒镜豴ostman上來(lái)測(cè)試一下,如果沒(méi)有postman請(qǐng)安裝一個(gè)和postman差不多的能做接口手工測(cè)試的圖形化界面工具,例如jmeter等。

這個(gè)接口,我們通過(guò)postman手動(dòng)測(cè)試,發(fā)現(xiàn)和網(wǎng)站提供的是一樣結(jié)果,說(shuō)明這get請(qǐng)求的接口測(cè)試通過(guò)。那么如果我們想通過(guò)Java代碼實(shí)現(xiàn),需要怎么做呢?接下來(lái),才是本篇的重點(diǎn)內(nèi)容。

 2.代碼過(guò)程

前面一篇文章,我們介紹了基礎(chǔ)環(huán)境的搭建過(guò)程,這里,接著前面的環(huán)境來(lái)逐步完成一個(gè)Get請(qǐng)求的設(shè)計(jì)和測(cè)試過(guò)程。

2.1 設(shè)計(jì)配置文件

 我們這個(gè)序列是要教會(huì)大家設(shè)計(jì)接口自動(dòng)化測(cè)試框架的目的,所以我們一些設(shè)計(jì)和組織項(xiàng)目結(jié)構(gòu)的方式,需要參考框架的思維。寫(xiě)一個(gè)配置文件,很簡(jiǎn)單,意義就是方便測(cè)試多套環(huán)境下的接口測(cè)試。我們工作中,一個(gè)項(xiàng)目,分測(cè)試環(huán)境,預(yù)發(fā)布環(huán)境和線(xiàn)上生產(chǎn)環(huán)境,這三套環(huán)境,接口肯定是一樣,只不過(guò)服務(wù)器地址不同,所以,我們框架設(shè)計(jì)需要支持寫(xiě)一套接口測(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è)類(lèi)作為所有接口請(qǐng)求測(cè)試的父類(lèi),都需要繼承這個(gè)父類(lèi),目前我們就寫(xiě)一個(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;
	
	//寫(xiě)一個(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();
		}		
	}	
}

這里來(lái)復(fù)習(xí)下構(gòu)造函數(shù)的作用,上面我們把加載配置文件的代碼寫(xiě)在空參構(gòu)造里,好處就是,每初始化這個(gè)類(lèi)的對(duì)象就會(huì)執(zhí)行構(gòu)造函數(shù)的代碼,即執(zhí)行讀取配置文件這么一個(gè)作用。關(guān)于上面配置文件路徑是否拼接正確,你可以新建一個(gè)main方法的類(lèi),執(zhí)行打印語(yǔ)句: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ì)象,通過(guò)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方法代碼寫(xiě)得比較亂,需要認(rèn)真看注釋?zhuān)蝗粚哟尾磺逦_@段代碼肯定需要以后重構(gòu)的,我們剛開(kāi)始,方便我們測(cè)試就先這樣去寫(xiě)就好。目前,項(xiàng)目結(jié)構(gòu)圖如下

2.3 TestNG用例測(cè)試Get方法

在src/test/java下新建一個(gè)包:com.qa.tests,然后新建一個(gè)GetApiTest.java類(lèi),寫(xiě)一個(gè)TestNG的測(cè)試用例來(lái)測(cè)試下我們上面寫(xiě)的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

接下來(lái),我們把響應(yīng)內(nèi)容的的body的json內(nèi)容拷貝到一個(gè)在線(xiàn)的Josn格式化顯示網(wǎng)站(https://www.json.cn/),看看效果如下。

這個(gè)結(jié)果和postman上一樣,數(shù)據(jù)都對(duì)得上,本篇關(guān)于Java代碼基于Httpclient開(kāi)源庫(kù)實(shí)現(xiàn)Get請(qǐng)求的過(guò)程就介紹到這里。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 面試題:Java 實(shí)現(xiàn)查找旋轉(zhuǎn)數(shù)組的最小數(shù)字

    面試題:Java 實(shí)現(xiàn)查找旋轉(zhuǎn)數(shù)組的最小數(shù)字

    這篇文章主要介紹了Java 實(shí)現(xiàn)查找旋轉(zhuǎn)數(shù)組的最小數(shù)字,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • List集合多個(gè)復(fù)雜字段判斷去重的案例

    List集合多個(gè)復(fù)雜字段判斷去重的案例

    今天小編就為大家分享一篇關(guān)于List集合多個(gè)復(fù)雜字段判斷去重的案例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • Java中加鎖的方式代碼示例

    Java中加鎖的方式代碼示例

    這篇文章主要給大家介紹了關(guān)于Java中加鎖方式的相關(guān)資料,我們平時(shí)開(kāi)發(fā)的過(guò)程中難免遇到多線(xiàn)程操作共享資源的時(shí)候,這時(shí)候一般可以通過(guò)加鎖的方式保證操作的安全性,需要的朋友可以參考下
    2023-09-09
  • Spring Boot CLI安裝教程

    Spring Boot CLI安裝教程

    Spring Boot是一個(gè)命令行工具,用于使用Spring進(jìn)行快速原型搭建。本文重點(diǎn)給大家介紹Spring Boot CLI安裝教程,感興趣的朋友參考下吧
    2017-08-08
  • 在Java 8中將List轉(zhuǎn)換為Map對(duì)象方法

    在Java 8中將List轉(zhuǎn)換為Map對(duì)象方法

    這篇文章主要介紹了在Java 8中將List轉(zhuǎn)換為Map對(duì)象方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • feign調(diào)用返回object類(lèi)型轉(zhuǎn)換方式

    feign調(diào)用返回object類(lèi)型轉(zhuǎn)換方式

    這篇文章主要介紹了feign調(diào)用返回object類(lèi)型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之堆(優(yōu)先隊(duì)列)的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之堆(優(yōu)先隊(duì)列)的實(shí)現(xiàn)

    堆(優(yōu)先隊(duì)列)是一種典型的數(shù)據(jù)結(jié)構(gòu),其形狀是一棵完全二叉樹(shù),一般用于求解topk問(wèn)題。本文將利用Java語(yǔ)言實(shí)現(xiàn)堆,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • SpringBoot前后端分離實(shí)現(xiàn)驗(yàn)證碼操作

    SpringBoot前后端分離實(shí)現(xiàn)驗(yàn)證碼操作

    驗(yàn)證碼的功能是防止非法用戶(hù)惡意去訪(fǎng)問(wèn)登錄接口而設(shè)置的一個(gè)功能,今天我們就來(lái)看看在前后端分離的項(xiàng)目中,SpringBoot是如何提供服務(wù)的
    2022-05-05
  • Feign如何解決服務(wù)之間調(diào)用傳遞token

    Feign如何解決服務(wù)之間調(diào)用傳遞token

    這篇文章主要介紹了Feign如何解決服務(wù)之間調(diào)用傳遞token,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java控制Pdf自動(dòng)打印的小例子

    java控制Pdf自動(dòng)打印的小例子

    java控制Pdf自動(dòng)打印的小例子,需要的朋友可以參考一下
    2013-04-04

最新評(píng)論