API 테스트: Postman/Newman
1) 우편 배달부/뉴먼 이유
Postman은 스크립트 및 쿼리 컬렉션에 편리한 IDE입니다. Newman은 CI/CD에서 GUI없이 동일한 컬렉션을 실행하는 CLI 엔진입니다. 그들은 함께합니다:- 반복 가능한 회귀 및 빠른 연기;
- 환경/비밀의 매개 변수화;
- 품질 지표 및 기계 판독 가능 보고서.
2) 기본 모델
컬렉션-공통 스크립트가있는 쿼리 및 폴더 트리.
환경 - 개발/스테이지/prod (IM, 키) 에 대해 '{{vars}}' 을 설정하십시오.
사전 요청 스크립트-준비: 서명, 토큰, 데이터 상관 관계.
테스트-변수/아티팩트의 주장 및 보존.
데이터 파일-데이터 중심 실행을위한 CS/JSON.
모의/모니터-양떼와 정기적 인 점검.
<API v1>
├─ _bootstrap (auth, health, seeds)
├─ Public
├─ Authenticated
│ ├─ Accounts
│ ├─ Payments
│ └─ Reports
└─ _teardown (cleanup)
3) 변수와 비밀
명시 적 접두사 인 'baseUrl', 'tenant', 'clientID' 로 변수를 참조하십시오.
CI 환경 변수에 비밀 (암호, 클라이언트 _ 비밀, HMAC 키) 을 유지하고 저장소에 투입하지 마십시오.
범위를 사용하십시오: 로컬 → 수집 → 환경 → 글로벌.
json
{
"name": "stage-eu",
"values": [
{"key":"baseUrl","value":"https://api. stage. example. com","type":"text","enabled":true},
{"key":"tenant","value":"eu-1","type":"text","enabled":true}
]
}
4) 인증: 템플릿
4. 1 OAuth2/OIDC (클라이언트 자격 증명)
사전 요청:js if (!pm.environment. get("access_token") Date. now() > pm. environment. get("token_exp")) {
pm. sendRequest({
url: pm. environment. get("authUrl"),
method: 'POST',
header: {'Content-Type':'application/x-www-form-urlencoded'},
body: { mode:'urlencoded', urlencoded:[
{key:'grant_type',value:'client_credentials'},
{key:'client_id',value:pm. environment. get('clientId')},
{key:'client_secret',value:pm. environment. get('clientSecret')},
{key:'scope',value:'payments:read payments:write'}
]}
}, (err, res) => {
pm. environment. set("access_token", res. json(). access_token);
pm. environment. set("token_exp", Date. now()+ (res. json(). expires_in-30)1000);
});
}
요청: '승인: 무기명 {액세스 _ 토큰}}'.
4. 2 HMAC (웹 후크/파트너)
사전 요청:js const body = pm. request. body? pm. request. body. raw '': '';
const ts = Math. floor(Date. now()/1000);
const msg = `${ts}.${body}`;
const sig = CryptoJS. HmacSHA256(msg, pm. environment. get('hmacSecret')). toString();
pm. variables. set('ts', ts);
pm. variables. set('sig', sig);
제목: 'X-Timestamp: {{ts}}', 'X-Signature: {{sig}}'.
5) 테스트: 주장 및 상관 관계
오후 사용. 오후 (...) 를 기대하십시오. 테스트 ("...," fn) '.
'pm' 을 통해 후속 단계에 대한 ID를 저장하 수집 변수. 세트 '.
js pm. test("HTTP 200", () => pm. response. to. have. status(200));
pm. test ("Scheme is valid," () => {
const schema = pm. collectionVariables. get("schema_wallet");
pm. expect(tv4. validate(pm. response. json(), JSON. parse(schema))). to. be. true;
});
pm. test ("Contains id," () => {
const id = pm. response. json(). id;
pm. expect(id). to. be. a('string');
pm. collectionVariables. set("wallet_id", id);
});
6) 스키마 검증 (OpenAPI/JSON 스키마)
수집 변수 또는 별도의 파일에 JSON 스키마를 저장하십시오.
OpenAPI의 경우: 'pm을 통해 사전 요청/테스트 (ajv, tv4) 에서 기성품 라이브러리를 사용하십시오. 원시 파일 또는 JSON 인라인으로 sendRequest '.
js pm. collectionVariables. set("schema_wallet", JSON. stringify({
"type":"object",
"required":["id","currency","balance"],
"properties":{
"id":{"type":"string"},
"currency":{"type":"string","pattern":"^[A-Z]{3}$"},
"balance":{"type":"number","minimum":0}
}
}));
7) 데이터 중심 스크립트
(PHP 3 =
email, password, currency u1@example. com, P@ss1, EUR u2@example. com, P@ss2, USD
쿼리는 '{{이메일}}', '{{통화}}' 을 사용합니다.
출시:
newman run collection. json -e stage-eu. json -d users. csv
JSON (개체 배열) - 복잡한 케이스/구조에 편리합니다.
8) 부정적인 경우와 탄력성
표지:- 401/403 (토큰/유효하지 않은 범위/역할 없음).
- 400/422 (체계 검증, 필수 필드, 한계).
- 404 (BOLA/외계인 자원).
- 409 (충돌, dempotent 키).
- 429 (제한) - '재시도 후' 를 확인하십시오.
- 5xx-정확한 저하 및 복고풍 클라이언트.
js pm. test ("There is Retry-After at 429," () => {
if (pm. response. code === 429) pm. expect(pm. response. headers. has('Retry-After')). to. be. true;
});
9) Idempotence, retrae, pagination
'Idempotency-Key' 를 통과하고 반복이 동일한 'id/상태' 를 제공하는지 확인하십시오.
테스트 페이지 매김: '제한/오프셋 '/' 커서', 중복 및 간격 감지.
테스트 스크립트에서 배상을 시뮬레이션합니다. 동일한 키를 사용한 연속 통화.
js pm. test ("Idempotent repetition," () => {
pm. sendRequest(pm. request, (err, res2) => {
pm. expect(res2. code). to. eql(pm. response. code);
pm. expect(res2. json(). id). to. eql(pm. response. json(). id);
});
});
10) 뉴먼 온라인 CI/CD
10. 1 발사
newman run collection. json \
-e stage-eu. json \
-d data. csv \
--timeout-request 30000 \
--reporters cli,htmlextra,junit \
--reporter-htmlextra-export./reports/report. html \
--reporter-junit-export./reports/junit. xml
10. GitHub 동작 2 개 (스 니펫)
yaml
- uses: actions/setup-node@v4 with: { node-version: '20' }
- run: npm i -g newman newman-reporter-htmlextra
- run: newman run collection. json -e stage-eu. json --reporters cli,junit --reporter-junit-export reports/junit. xml
- uses: actions/upload-artifact@v4 with: { name: newman-reports, path: reports }
10. 3 젠킨스/GitLab CI
기본 렌더링을 위해 JUnit ('-reporter-junit-export') 을 내보냅니다.
파이프 라인에서 ja을 분리하십시오: 연기 (빠른), 회귀 (전체), 보안 (음수/경계).
10. 4 도커
docker run --rm -v $PWD:/etc/newman postman/newman \
run collection. json -e stage-eu. json
11) 모키 및 모니터링
Mock 서버 Postman-전면 및 계약을위한 빠른 스택.
모니터-클라우드에서 주기적으로 클라우드를 실행합니다 (대기 시간, 5xx, SS).
저장소에서 결정 론적 모크에 대한 샘플 응답 파일을 유지하십시오.
12) 데이터 테스트 및 청소
(PHP 3 = 3.0.6, PHP 4)
접두사 'e2e _' 및 TTL로 테스트 객체에 라벨을 붙입니다.
상충되는 필드의 경우 랜덤 접미사를 사용하십시오
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));
13) "무릎에" 성능
Postman은로드 도구가 아니지만 다음과 같습니다
측정 'pm. 응답. 응답 시간 ';
5-10 회 반복을 실행하고 p95/임계 값을 수정하십시오.
JMeter/k6/Gatling (이 기사 외부) 에서 성능이 뛰어납니다.
14) 현지화 및 다중 임대
변수 '테넌트', '지역', '랑'; 환경에서 전환합니다.
테스트는 세입자간에 데이터가 "흐름" 되지 않는지 확인해야합니다 (BOLA 읽기, 세입자 간 금지).
지역 기능 (한계, 통화) 에 대한 별도의 컬렉션/폴더.
15) 보고 및 인공물
저장 CI 아티팩트: HTML보고, 'junit. xml ', 응답 기관.
충격 방울에 대해서는 슬랙/팀 알림을 연결하십시오.
16) 품질 및 적용 범위
코팅 매트릭스:- 자원 당 CRUD (200/201/204 + 네거티브).
- 승인: 역할/스코프/멀티 테넌트.
- 페이지 분석/필터/정렬.
- 이념과 후퇴.
- 한계: 413/414/431/429.
- 형식과 스키마 (JSON Schema/OpenAPI).
- 통합 (HMAC/mTLS가있는 웹 후크) - 재생 방지.
17) 안티 패턴
부정적인 테스트가없는 하나의 "행복한 방법".
컬렉션/저장소에서 오래 지속되는 토큰.
테스트 데이터와 생산 데이터를 혼합합니다
명시적인 상관 관계없이 잠재 테스트 순서 종속성.
샘플링없이 거대한 데이터 파일.
JUnit/HTML이보고되지 않음 → CI의 가시성이 없습니다.
18) Prod 준비 점검표
- 컬렉션은 도메인별로 분류되며 '_ bootstrap/_ teardown' 이 있습니다.
- 개발/단계/prod에 대한 환경; CI 비밀 저장소의 비밀.
- 사전 요청 자정 (OAuth2/HMAC); 토큰이 캐시되고 회전됩니다.
- 테스트: 양수 + 음수, 체계 (JSON Schema), 페이지 매김, 429/Redue-After.
- Idempotency: 'Idempotency-Key', 이중 통화 등가.
- 데이터 중심 CS/JSON, 독창성을위한 랜덤 접미사.
- CI의 Newman: JUnit/HTML보고, 빌드 출력으로서의 아티팩트.
- 주요 경로의 모크/모니터; 무화과에 SLA.
- 변수, 태그 및 시작 순서의 문서.
19) TL; DR
Postman 컬렉션, 환경의 매개 변수에 테스트 로직을 저장하고 JUnit/HTM 보고서가있는 Newman을 통해 CI에서 실행합니다. 네거티브, 스키마, demempotency, pagination 및 한계를 다룹니다. 단계를 변수와 연관시키고 데이터 중심 입력을 사용하며 세척/모니터를 사용합니다. CI에서만 비밀은 인공물을 만듭니다.