자바 인터페이스 자동화 테스트 프레임 워 크 및 단언 상세 설명

상편우 리 는 Get 방법의 디자인 과정 과 테스트 결 과 를 소개 했다.지금 우 리 는 앞의 코드 를 재 구성 하고 수정 해 야 한다.본 편 은 다음 과 같은 목 표를 달성 해 야 한다.
  • 1)재 구성 Get 방법
  • 2)JSON 해석 을 어떻게 하 는가
  • 3)TestNG 방법 으로 테스트 단언 을 한다
  • 1.Get 재 구성 방법
    앞의 글 에서 말 했 듯 이 이전에 쓴 Get 방법 은 비교적 번 거 로 웠 다.Get 요청 을 어떻게 하 는 지 뿐만 아니 라 http 응답 상태 코드 와 JSON 변환 을 가 져 오 는 방법 도 썼 다.지금 우 리 는 추출 을 해 야 합 니 다.Get 요청 방법 을 설계 하고 한 가지 일 만 해 야 합 니 다.그것 은 get 요청 을 어떻게 보 내 는 지,다른 것 은 상관 하지 마 세 요.
    요청 후 HTTP 응답 대상 을 되 돌려 주 는 것 을 알 고 있 습 니 다.따라서 get 방법의 반환 값 형식 을 응답 대상 으로 바 꾸 고 반환 문 구 를 가 져 와 코드 를 재 구성 한 후 get 방법 코드 는 다음 과 같 습 니 다.
    
    package com.qa.restclient;
    import java.io.IOException;
    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;
    public class RestClient {
     //1. Get     
     public CloseableHttpResponse get(String url) throwsClientProtocolException, IOException {
      //        HttpClient  
      CloseableHttpClienthttpclient = HttpClients.createDefault();
      //    HttpGet     
      HttpGethttpget = newHttpGet(url);
      //    ,   postman       ,     HttpResponse    
      CloseableHttpResponsehttpResponse = httpclient.execute(httpget);
      return httpResponse;
     }
    }
    HTTP 응답 상태 코드 200 과 같은 하 드 인 코딩 을 코드 에 쓰 고 싶 지 않 기 때문에 TestBase.java 에서 상태 코드 를 상수 로 써 서 모든 TestNG 테스트 용례 를 호출 하여 단언 할 수 있 도록 합 니 다.
    
    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;
       public int RESPNSE_STATUS_CODE_200 = 200;
       public int RESPNSE_STATUS_CODE_201 = 201;
       public int RESPNSE_STATUS_CODE_404 = 404;
       public int RESPNSE_STATUS_CODE_500 = 500;
       //       
       public TestBase() {
         try{
           prop= new Properties();
           FileInputStreamfis = 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();
         }
       }
    }
    현재 우리 의 테스트 코드 를 수정 한 후 다음 과 같다.
    
    package com.qa.tests;
    import java.io.IOException;
    importorg.apache.http.client.ClientProtocolException;
    importorg.apache.http.client.methods.CloseableHttpResponse;
    import org.testng.Assert;
    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;
       CloseableHttpResponse closeableHttpResponse;
       @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();
         closeableHttpResponse= restClient.get(url);
         //        200
         int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
         Assert.assertEquals(statusCode,RESPNSE_STATUS_CODE_200, "response status code is not 200");
       }
    }
    테스트 운행 이 통과 되 었 으 니 문제 가 없다.
    2.JSON 해석 도구 클래스 쓰기
    위 부분 에 서 는 Get 요청 과 상태 코드 가 200 인지 에 대한 단언 만 적 었 습 니 다.그 다음 에 우 리 는 JSON 해석 도구 류 를 써 서 제 이 슨 의 내용 에 대한 단언 을 편리 하 게 해 야 한다.
    다음은 JSON 데이터 캡 처.

    위 는 표준적 인 제 이 슨 의 응답 내용 캡 처,첫 번 째 붉 은 동그라미'perpage"는 json 대상 입 니 다."per "에 따라페이지 에서 대응 하 는 값 을 찾 으 려 면 3 이 고 두 번 째 빨 간 동그라미 인'data'는 대상 이 아 닌 JSON 배열 입 니 다.안에 있 는 값 을 직접 받 을 수 없고 배열 을 옮 겨 다 녀 야 합 니 다.
    다음은 JSON 이 분석 한 도구 방법 류 를 쓰 겠 습 니 다.첫 번 째 빨 간 동그라미 의 JSON 대상 이 라면 해당 하 는 값 을 되 돌려 줍 니 다.data 배열 에 있 는 json 대상 의 값 을 분석 해 야 한다 면 구조 방법 은 배열 의 첫 번 째 요소 의 내용 을 기본 으로 해석 합 니 다.
    src/main/java 에 가방 을 새로 만 듭 니 다:com.qa.util,그리고 새 가방 에 TestUtil.java 클래스 를 만 듭 니 다.
    
    package com.qa.util;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    public class TestUtil {
     /**
     *
     * @param responseJson ,              json   json  
     * @param jpath,  jpath         json         
     * jpath    :1) per_page 2)data[1]/first_name ,data   json  ,[1]    
     * /first_name   data          json      first_name
     * @return,  first_name  json        
     */
     //1 json    
     public static String getValueByJPath(JSONObject responseJson, String jpath){
      Objectobj = responseJson;
      for(String s : jpath.split("/")) {
      if(!s.isEmpty()) {
       if(!(s.contains("[") || s.contains("]"))) {
        obj = ((JSONObject) obj).get(s);
       }else if(s.contains("[") || s.contains("]")) {
        obj =((JSONArray)((JSONObject)obj).get(s.split("\\[")[0])).get(Integer.parseInt(s.split("\\[")[1].replaceAll("]", "")));
       }
      }
      }
      return obj.toString();
     }
    }
    위의 코드 를 간단하게 설명 하면 주로 두 가지 json 대상 의 값 을 조회 하 는 것 입 니 다.첫 번 째 는 가장 간단 합 니 다.이 json 대상 은 전체 json 문자열 의 1 층 에 있 습 니 다.예 를 들 어 위 에서 캡 처 한 perpage,이 perpage 는 jpath 라 는 매개 변 수 를 통 해 들 어 오 는 것 입 니 다.돌아 오 는 결 과 는 3.두 번 째 jpath 의 조회 입 니 다.예 를 들 어 data 의 첫 번 째 사용자 정보 에 있 는 first 를 조회 하고 싶 습 니 다.name 의 값,이때 jpath 의 쓰 기 는 data[0]/first 입 니 다.name,검색 결 과 는 Eve 일 것 입 니 다.
    3.TestNG 테스트 용례
    다음은 저희 TestNG 테스트 용례 코드 는 다음 과 같 습 니 다.
    
    package com.qa.tests;
    import java.io.IOException;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.util.EntityUtils;
    import org.testng.Assert;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Test;
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.qa.base.TestBase;
    import com.qa.restclient.RestClient;
    import com.qa.util.TestUtil;
    public class GetApiTest extends TestBase{
    	TestBase testBase;
    	String host;
    	String url;
    	RestClient restClient;
    	CloseableHttpResponse closeableHttpResponse;
    	@BeforeClass
    	public void setUp() {
    		testBase = new TestBase();
    		host = prop.getProperty("HOST");
    		url = host + "/api/users?page=2";
    	}
    	@Test
    	public void getAPITest() throws ClientProtocolException, IOException {
    		restClient = new RestClient();
    		closeableHttpResponse = restClient.get(url);
    		//        200
    		int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
    		Assert.assertEquals(statusCode, RESPNSE_STATUS_CODE_200, "response status code is not 200");
    		//              
      String responseString = EntityUtils.toString(closeableHttpResponse.getEntity(),"UTF-8"); 
      //  Json  ,          Json   
      JSONObject responseJson = JSON.parseObject(responseString); 
      //System.out.println("respon json from API-->" + responseJson); 
      //json    
      String s = TestUtil.getValueByJPath(responseJson,"data[0]/first_name");
      System.out.println(s);
    	}	
    }
    테스트 결과 실행:
    
    [RemoteTestNG] detected TestNGversion 6.14.3
    
    Eve
    
    PASSED: getAPITest
    이 json 분석 도구 류 를 테스트 하기 위해 jpath 를 몇 개 더 쓸 수 있 습 니 다.
    
    String s = TestUtil.getValueByJPath(responseJson,"data[1]/id");
    String s = TestUtil.getValueByJPath(responseJson,"per_page");
    4.TestNG 자체 테스트 단언 방법
    여기 서 TestNG 의 단언 방법 을 간단히 말씀 드 리 겠 습 니 다.우 리 는 일반적으로 단언 코드 를 써 야 합 니 다.그렇지 않 으 면 이러한 단원 테스트 코드 는 의미 가 없습니다.다음은 status Code 와 json 에서 해석 한 first단언
    
    package com.qa.tests;
    import java.io.IOException;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.util.EntityUtils;
    import org.testng.Assert;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Test;
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.qa.base.TestBase;
    import com.qa.restclient.RestClient;
    import com.qa.util.TestUtil;
    public class GetApiTest extends TestBase{
    	TestBase testBase;
    	String host;
    	String url;
    	RestClient restClient;
    	CloseableHttpResponse closeableHttpResponse;
    	@BeforeClass
    	public void setUp() {
    		testBase = new TestBase();
    		host = prop.getProperty("HOST");
    		url = host + "/api/users?page=2";
    	}
    	@Test
    	public void getAPITest() throws ClientProtocolException, IOException {
    		restClient = new RestClient();
    		closeableHttpResponse = restClient.get(url);
    		//        200
    		int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
    		Assert.assertEquals(statusCode, RESPNSE_STATUS_CODE_200, "response status code is not 200");
    		//              
      String responseString = EntityUtils.toString(closeableHttpResponse.getEntity(),"UTF-8"); 
      //  Json  ,          Json   
      JSONObject responseJson = JSON.parseObject(responseString); 
      //System.out.println("respon json from API-->" + responseJson); 
      //json    
      String s = TestUtil.getValueByJPath(responseJson,"data[0]/first_name");
      System.out.println(s);
      Assert.assertEquals(s, "Eve","first name is not Eve");
    	}
    }
    자주 사용 하 는 테스트 단언:
    
    Assert.assertEquals(“    ”, "    ","            ");
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기