GH GambleHub

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):
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에서만 비밀은 인공물을 만듭니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.