GH GambleHub

Δοκιμή 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):
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 - σωστή υποβάθμιση και ρετρό πελάτη.
Παράδειγμα δοκιμής «Retry-After»:
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. Καλύπτονται τα αρνητικά, τα σχήματα, η ιδιαιτερότητα, η σελιδοποίηση και τα όρια. Συσχετίζονται βήματα με μεταβλητές, χρησιμοποιούνται εισροές που βασίζονται σε δεδομένα και πλύσεις/οθόνες. Μυστικά - μόνο από τον ΚΚΠ, αναφορές - κατασκευάζουν αντικείμενα.

Contact

Επικοινωνήστε μαζί μας

Επικοινωνήστε για οποιαδήποτε βοήθεια ή πληροφορία.Είμαστε πάντα στη διάθεσή σας.

Telegram
@Gamble_GC
Έναρξη ολοκλήρωσης

Το Email είναι υποχρεωτικό. Telegram ή WhatsApp — προαιρετικά.

Το όνομά σας προαιρετικό
Email προαιρετικό
Θέμα προαιρετικό
Μήνυμα προαιρετικό
Telegram προαιρετικό
@
Αν εισαγάγετε Telegram — θα απαντήσουμε και εκεί.
WhatsApp προαιρετικό
Μορφή: κωδικός χώρας + αριθμός (π.χ. +30XXXXXXXXX).

Πατώντας «Αποστολή» συμφωνείτε με την επεξεργασία δεδομένων.