레이블이 API Test인 게시물을 표시합니다. 모든 게시물 표시
레이블이 API Test인 게시물을 표시합니다. 모든 게시물 표시

2020년 1월 17일 금요일

Spec by Exam

API spec 분석 후 해당 API에 대해 예상되는 intput값과 output값을 기입하는 문서.

TC No Test Level Assertion Precondition Input Output Comment

Test Level

Positive
P-Mandatory : 필수 파라메타로 기본 기능 검증
P-ALL : 모든 파라메타로 기본 기능 검증
P-InRange : 필수 파라메타에 대한 범위 검증, 조건부 필수 파라메타에 대한 범위 내 검증, 옵션 파라메타에 대한 범위 내 검증

Negative
N-isMandatory : 파라메타 존재에 대한 예외 처리 검증
N-OutRange : 유효하지 않은 값에 대한 예외 처리 검증
N-Restriction : 파라메타 별 제약 사항 검증


Response Data 추출 시 NullPointerException으로 테스트가 종료되지 않게 하려면

데이터 추출 후 assertion 시 isNotNull로 하려고 했으나 데이터 추출하는 부분에서 NullPointerException이 발생하게 되면 assert를 하지 않고 바로 테스트가 종료된다.

리포트에서도 NullPointerException으로 fail이 발생했다고만 나와서 왜 NullPointerException이 났는지 코드를 봐야 하는 문제점이 있다.

해결책으로는 MapUtils(org.apache.commons.collections)를 사용하면 된다.
MapUtils의 get Method들은 내부적으로 null 체크를 한다.

<response>
{
"data": {
"dealSrl": [
1111111111
],
"total": 1
},
"httpStatus": "OK",
"httpCode": 200
}
"assertion  : data.dealSrl[0]의 dealSrl 값 확인" 이라고 했을 때 

Map<Object, Object> resMap = jsonPath.get("data");
List<Long> dealSrlList = (List) MapUtils.getObject(resMap, "dealSrl");
softAssertions.assertThat(dealSrlList.size()).as(methodName).isEqualTo(total);
 
Long dealSrl = dealSrlList.get(0);
logger.debug("dealSrl : " + dealSrl);
softAssertions.assertThat(dealSrl).as(methodName).isNotNull();

2019년 7월 18일 목요일

API Test 진행 시 profile 선택 관련 정리 - Maven profile, yaml, lombok

1. jenkins에서 profile 선택하여 빌드 및 테스트 수행
mvn clean test -P ${evn}
env : env는 jenkins의 string parameter나 choice parameter를 이용한다.
ex) evn = qa or release or stage

2. intelliJ에서는

3. 프로파일별 테스트 데이터 관리는 yaml 파일로 관리한다.
 
 yaml file 위치

testdata.yaml
userId : test
password : qwe123

TestData.java
TestData.java는 lombok library를 이용하여 코드를 간결화 한다.
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.yaml.snakeyaml.Yaml;

import java.io.InputStream;

@Getter 
@Setter
public class TestData {
 private String userId;
 private String password;

 @Override
 public String toString() {
  return ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE);
 }

 public TestData getTestData() {
  Yaml yaml = new Yaml();
  InputStream inputStream = TestData.class.getResourceAsStream("/testdata.yaml");
  return yaml.loadAs(inputStream, TestData.class);
 }
}

사용법

TestData testData = new TestData();
testData = testData.getTestData();
RestAssured.baseURI = testData.getTargetURL();

2019년 6월 28일 금요일

Jenkins API를 이용한 원격 빌드 방법

시나리오
1) 해당 레포지토리를 빌드하는 Jenkins(A)와 API Test를 하는 Test용 Jenkins(B)가 있다.
2) A에서 빌드가 완료되고 서버의 인스턴스가 올라오면 B에서 테스트가 자동으로 시작된다.
즉, 물리적인 장비가 다르다.

위 시나리오에 맞춰 Jenkins를 구성할 때 아래의 방법을 이용한다.

1. B에서 해당 계정(빌드를 수행할 계정)의 API Token을 얻어온다.
  • http://JENKINS_URL/me/configure 에 접속
  • API Token 란의 show Legacy API Token 클릭(add new token 해도 된다.)
2. A에서 Post Step 란에 Excute Shell을 클릭하고 아래의 URL을 입력한다.
  • http://JENKINS_URL/job/JOBNAME/build or http://JENKINS_URL/job/JOBNAME/buildWithParameters
  • /build 와 /buildWithParameters의 차이 : 빌드 시 parameter 유무
  • ex: curl -d  "branch=master&env=qa" http://JENKINS_URL/job/JOBNAME/buildWithParameters?token=API_TOKEN
3. B에서 빌드 유발에서 "빌드를 원격으로 유발" 클릭하고 Authentication Token에 API Token을 입력한다.


2018년 10월 29일 월요일

Json schema test 방법

1. Json Shechma 생성
https://jsonschema.net/#/
Number Type에 대해 체크
2. 생성된 스키마에서 required 부분 확인할 것
-> API 명세에서 response에 대한 필수값이 체크되지 않았으면 json schema 에서 required 부분을 꼭 확인하여 필수값이 아닌 키값에 대해서 삭제해주자.

3. RestAussured 확인
 1) 1번에서 생성한 스키마를 test/resources 에 json 파일로 저장
 2) .body(matchesJsonSchemaInClasspath("cancellations_json_schema.json"))

4. Postman 확인
 1) 1번에서 생성한 스키마를 enviornment에 저장
 2) pm.test("schema check", function(){
    pm.expect(tv4.validate(pm.response.json(), pm.environment.get("cancel_schema"), false, true), tv4.error).to.be.true;
})