Δοκιμή API: Ταχυδρόμος/Newman
1) Γιατί ταχυδρόμος/Newman
Το ταχυδρόμο είναι ένα εύχρηστο IDE για σενάρια και συλλογές ερωτημάτων. Το Newman είναι ένας κινητήρας CLI που τρέχει τις ίδιες συλλογές χωρίς GUI σε CI/CD. Μαζί δίνουν:- επαναλαμβανόμενες οπισθοδρομήσεις και ταχείς καπνιστές·
- παραμετροποίηση περιβάλλοντος/μυστικών·
- ποιοτικές μετρήσεις και μηχαναγνώσιμες εκθέσεις.
2) Βασικό υπόδειγμα
Συλλογή - ένα δέντρο ερωτημάτων και φακέλων με κοινά σενάρια.
Περιβάλλοντα - σύνολο '{vars}}' για dev/stage/prod (URL, κλειδιά).
Σενάριο πριν από την αίτηση - προετοιμασία: υπογραφές, μάρκες, συσχέτιση δεδομένων.
Δοκιμές - ισχυρισμοί και διατήρηση μεταβλητών/αντικειμένων.
Αρχεία δεδομένων - CSV/JSON για εκτέλεση με βάση δεδομένα.
Mock/Monitor - σμήνη και περιοδικοί έλεγχοι.
<API v1>
├─ _bootstrap (auth, health, seeds)
├─ Public
├─ Authenticated
│ ├─ Accounts
│ ├─ Payments
│ └─ Reports
└─ _teardown (cleanup)
3) Μεταβλητές και μυστικά
Ανατρέξτε στις μεταβλητές ως ρητό πρόθεμα: 'baseUrl', 'ενοικιαστής', 'clientId'.
Κρατήστε μυστικά (κωδικοί πρόσβασης, client_secret, κλειδιά HMAC) στις μεταβλητές περιβάλλοντος CI, μην δεσμευτείτε στο αποθετήριο.
Χρήση του πεδίου εφαρμογής: συλλογή τοπικών → → περιβάλλον → παγκόσμια κλίμακα.
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);
});
}
Στην αίτηση: «Εξουσιοδότηση: Bearer {{access _ token}}».
4. 2 HMAC (Webhooks/Partners)
Προκαταρκτική αίτηση: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) Δοκιμές: ισχυρισμοί και συσχέτιση
Χρήση 'pm. αναμένουν (...) «и» μμ. δοκιμή (... "," fn) ".
Φυλάσσετε τις ταυτότητες για τα επόμενα βήματα µέσω της ένεσης. Μεταβλητές. σύνολο '.
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 Schema)
Αποθήκευση του συστήματος JSON σε μεταβλητές συλλογής ή σε ξεχωριστό αρχείο.
Για το OpenAPI: χρησιμοποιήστε έτοιμα libs στην προ-αίτηση/δοκιμή (ajv, tv4) - μέσω 'pm. Αίτημα sendRequest 'to raw file ή JSON inline.
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) Σενάρια βασιζόμενα σε δεδομένα
CSV:
email, password, currency u1@example. com, P@ss1, EUR u2@example. com, P@ss2, USD
Το ερώτημα χρησιμοποιεί '{email}}', '{νόμισμα}}'.
Έναρξη:
newman run collection. json -e stage-eu. json -d users. csv
JSON (σειρά αντικειμένων) - βολικό για πολύπλοκες περιπτώσεις/δομές.
8) Αρνητικές περιπτώσεις και ανθεκτικότητα
Καλύψτε:- 401/403 (καμία ένδειξη/άκυρο πεδίο εφαρμογής/ρόλος).
- 400/422 (επικύρωση του συστήματος, υποχρεωτικά πεδία, όρια).
- 404 (BOLA/ξένος πόρος).
- 409 (συγκρούσεις, ευφυή κλειδιά).
- 429 (όρια) - έλεγχος 'Retry-After'.
- 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/status'.
Επισήμανση δοκιμής: 'όριο/όφσετ '/' δρομέας', ανίχνευση αντιγράφων και κενών.
Προσομοίωση retrays σε σενάριο δοκιμής: διαδοχικές κλήσεις με το ίδιο κλειδί.
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) Newman в 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. 2 Δράσεις GitHub (snippet)
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 Jenkins/GitLab CI
Εξαγωγή JUnit ('--- reporter-junit-export) για εγχώρια απόδοση.
Στον αγωγό, διαχωρίζονται τα τρυπήματα: καπνός (γρήγορα), παλινδρόμηση (πλήρης), ασφάλεια (αρνητικά/όρια).
10. 4 Docker
docker run --rm -v $PWD:/etc/newman postman/newman \
run collection. json -e stage-eu. json
11) Moki και παρακολούθηση
Mock servers Postman - γρήγορες στοίβες για το μέτωπο και τα συμβόλαια.
Οθόνες - περιοδική ροή νεφών από το νέφος (καθυστέρηση, 5xx, SSL).
Στο αποθετήριο, κρατήστε αρχεία απόκρισης δείγματος για ντετερμινιστικά μοτοποδήλατα.
12) Δεδομένα δοκιμών και καθαρισμός
Δημιουργία/διαγραφή οντοτήτων (_bootstrap/_teardown).
Αντικείμενα δοκιμής επισήμανσης με το πρόθεμα 'e2e _' και TTL.
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));
13) Απόδοση «στο γόνατο»
Ο ταχυδρόμος δεν είναι εργαλείο φόρτωσης, αλλά:- μέτρο 'pm. απόκριση. numberTime ',
- εκτελεί 5-10 επαναλήψεις και καθορίζει p95/κατώφλια·
- βαριές επιδόσεις - σε JMeter/k6/Gatling (εκτός του παρόντος άρθρου).
14) Εντοπισμός και πολυπλοκότητα
Μεταβλητές «ενοικιαστής», «περιφέρεια», «lang». αλλαγή περιβάλλοντος.
Οι δοκιμές πρέπει να ελέγχουν ότι τα δεδομένα δεν «ρέουν» μεταξύ ενοικιαστών (BOLA-read, cross-renant απαγορεύσεις).
Ξεχωριστές συλλογές/φάκελοι για περιφερειακά χαρακτηριστικά (όρια, νομίσματα).
15) Υποβολή εκθέσεων και τεχνουργήματα
Αποθήκευση αντικειμένων CI: HTML reports, 'junit. xml ', σώµατα απόκρισης.
Σύνδεση ειδοποιήσεων Slack/Teams για σταγόνες σοκ.
16) Ποιότητα και κάλυψη
Μήτρα επίχρισης:- CRUD ανά πόρο (200/201/204 + αρνητικά).
- Εξουσιοδότηση: ρόλοι/πεδία/πολυκατοικίες.
- Pagination/φίλτρα/διαλογή.
- Ιδεολογία και υποχωρήσεις.
- Όρια: 413/414/431/429.
- Μορφότυποι και σχήματα (JSON Schema/OpenAPI).
- Ενσωμάτωση (webhooks με HMAC/mTLS) - αντι-αναπαραγωγή.
17) Αντιπατερίδια
Ένας «ευτυχισμένος τρόπος» χωρίς αρνητικές δοκιμές.
Μακροχρόνιες μάρκες στη συλλογή/αποθετήριο.
Ανάμειξη δεδομένων δοκιμών με δεδομένα παραγωγής.
Λανθάνουσα εξάρτηση από τη σειρά δοκιμής χωρίς ρητή συσχέτιση.
Γιγαντιαία αρχεία δεδομένων χωρίς δειγματοληψία.
Καμία αναφορά JUnit/HTML δεν → ορατότητα στον ΚΚΠ.
18) Κατάλογος ελέγχου ετοιμότητας Prod
- Οι συλλογές κατανέμονται ανά τομέα, υπάρχει '_ bootstrap/_ teardown'.
- Περιβάλλοντα για dev/stage/prod. μυστικά από μυστική αποθήκευση CI.
- Προαπαιτούμενο auth (OAuth2/HMAC)· οι μάρκες αποθηκεύονται και περιστρέφονται.
- Δοκιμές: θετικές + αρνητικές, σχήματα (JSON Schema), σελιδοποίηση, 429/Retry-After.
- Idempotency: Check 'Idempotency-Key', ισοδύναμο διπλής κλήσης.
- CSV/JSON με βάση δεδομένα, τυχαία επιθέματα για μοναδικότητα.
- Newman in CI: JUnit/HTML reports, articacts as build outputs.
- Μοτοσυκλέτες/οθόνες για βασικές διαδρομές. SLA για σύκα.
- Τεκμηρίωση μεταβλητών, ετικετών και εντολής εκτόξευσης.
19) TL, DR
Αποθηκεύστε τη λογική δοκιμών σε συλλογές Postman, παραμέτρους σε περιβάλλοντα, και εκτελέστε σε CI μέσω Newman με αναφορές JUnit/HTML. Καλύπτονται τα αρνητικά, τα σχήματα, η ιδιαιτερότητα, η σελιδοποίηση και τα όρια. Συσχετίζονται βήματα με μεταβλητές, χρησιμοποιούνται εισροές που βασίζονται σε δεδομένα και πλύσεις/οθόνες. Μυστικά - μόνο από τον ΚΚΠ, αναφορές - κατασκευάζουν αντικείμενα.