Betikler ve test onayları
Ön istek betikleri, test betikleri ve Testnizer için tam pm API referansı.
Testnizer betikleri sandboxlanmış bir iframe’de değil, Node ana sürecinde çalıştırır.
Bu, require()’ın çalıştığı anlamına gelir — geçici çözümler olmadan kripto, path
veya uygulamaya yüklü herhangi bir paketi içe aktarabilirsiniz.
Betikler HTTP isteklerine (ve koleksiyon klasörlerine) eklenir. Her isteğin iki betik yuvası vardır:
- Ön istek betiği — istek gönderilmeden önce çalışır
- Testler — yanıt geldikten sonra çalışır
pm API referansı
pm.environment
Aktif ortamdaki değişkenleri okuyun ve yazın.
pm.environment.get('baseUrl') // → string | undefined
pm.environment.set('token', 'abc123') // değişkeni ayarlar (veya oluşturur)
pm.environment.unset('token') // değişkeni siler
pm.environment.has('token') // → boolean
pm.environment.toObject() // → { key: value, ... } anlık görüntü
Ön istek betiğinde yapılan değişiklikler, istek URL’si, başlıkları ve gövdesinde görünür olur. Test betiğinde yapılan değişiklikler, bir koleksiyon çalıştırıcısı dizisindeki bir sonraki isteğe kadar kalıcı olur.
pm.collectionVariables
pm.environment ile aynı API, ancak ortam yerine koleksiyona (projeye) kapsamlıdır.
Paylaşılan ortamı kirletmeden istekler arasında veri aktarmak için kullanışlıdır.
pm.collectionVariables.set('nextPageToken', body.nextPage)
pm.variables
Tüm değişken kapsamlarının salt okunur birleşik görünümü (koleksiyon → ortam → global). Hangi kapsamdan geldiğinden bağımsız olarak çözümlenmiş değeri istediğinizde bunu kullanın:
const baseUrl = pm.variables.get('baseUrl')
Yalnızca geçerli istek yürütmesi için görünür olan geçici bir “yerel” kapsama da yazabilirsiniz (kalıcı değil):
pm.variables.set('tempSig', computeSignature())
pm.request (yalnızca ön istek betiği)
Giden isteği gönderilmeden önce inceleyin ve değiştirin.
pm.request.url.toString() // tam URL dizesi
pm.request.method // 'GET', 'POST', …
pm.request.body.raw // ham gövde dizesi
// Başlık ekleyin veya güncelleyin
pm.request.headers.add({ key: 'X-Nonce', value: nonce })
pm.request.headers.upsert({ key: 'Authorization', value: 'Bearer ' + token })
// URL'yi güncelleyin
pm.request.url = 'https://example.com/v2/users'
pm.response (yalnızca test betiği)
pm.response.status // 'OK', 'Not Found', …
pm.response.code // 200, 404, …
pm.response.responseTime // ms (sayı)
pm.response.text() // yanıt gövdesi dize olarak
pm.response.json() // JSON olarak ayrıştırılmış yanıt gövdesi
pm.response.headers.get('Content-Type')
pm.response.cookies.get('session')
pm.test
Adlandırılmış bir test senaryosu tanımlayın. Geri çağrı hemen çalışır; geçti veya başarısız Testler panelinde kaydedilir.
pm.test('durum 200', function () {
pm.response.to.have.status(200)
})
Betik başına birden fazla pm.test çağrısı uygundur — her biri bağımsız bir
geçti/başarısız satırı üretir.
pm.expect
Chai tarzı onay. Daha temiz başarısızlık mesajları için pm.test geri çağrılarının
içinde kullanın:
pm.test('kullanıcının id ve e-postası var', function () {
const body = pm.response.json()
pm.expect(body).to.be.an('object')
pm.expect(body).to.have.property('id').that.is.a('number')
pm.expect(body.email).to.match(/@/)
})
Yaygın onaylar:
pm.expect(value).to.equal(expected)
pm.expect(value).to.deep.equal({ key: 'val' })
pm.expect(value).to.include('substring')
pm.expect(value).to.be.above(0)
pm.expect(value).to.be.a('string')
pm.expect(arr).to.have.lengthOf(3)
pm.expect(obj).to.have.property('name')
pm.expect(str).to.match(/regex/)
pm.response.to.have (kısayol onaylar)
pm.response.to.have.status(200)
pm.response.to.have.status('OK')
pm.response.to.have.header('Content-Type')
pm.response.to.have.header('Content-Type', 'application/json; charset=utf-8')
pm.response.to.have.jsonBody()
pm.response.to.have.jsonBody('id') // özellik var
pm.response.to.have.jsonBody('id', 42) // özellik değeriyle birlikte var
pm.response.to.be.ok // 2xx
pm.response.to.not.be.ok // 2xx değil
pm.execution
Koleksiyon çalıştırıcısı yürütme akışını kontrol edin.
pm.execution.skipRequest() // geçerli isteği atla (yalnızca ön istek betiği)
pm.execution.setNextRequest('İstek adı') // adlandırılmış bir isteğe atla
pm.execution.setNextRequest(null) // bu istekten sonra çalıştırmayı durdur
require()
Electron’un Node ortamında mevcut olan her modül require edilebilir:
const crypto = require('crypto')
const path = require('path')
const fs = require('fs')
const assert = require('assert')
Betikler tarayıcı bağlamında değil ana süreçte çalıştığından window veya
document yoktur. DOM API’leri kullanılamaz.
Yaygın tarifler
Ön istekte HMAC imzası
const crypto = require('crypto')
const secret = pm.environment.get('signingSecret')
const ts = String(Date.now())
const body = pm.request.body.raw || ''
const payload = ts + '\n' + body
const sig = crypto.createHmac('sha256', secret).update(payload).digest('hex')
pm.request.headers.upsert({ key: 'X-Timestamp', value: ts })
pm.request.headers.upsert({ key: 'X-Signature', value: 'sha256=' + sig })
İstekleri zincirleme — ID’yi bir sonraki isteğe aktarma
// "Kullanıcı oluştur" test betiğinde:
const userId = pm.response.json().id
pm.environment.set('createdUserId', String(userId))
// "Kullanıcıyı getir" URL'sinde:
// GET {{baseUrl}}/users/{{createdUserId}}
429’da yeniden deneme
// Test betiğinde:
if (pm.response.code === 429) {
pm.execution.setNextRequest(pm.info.requestName) // bu isteği tekrarla
}
Yanıt süresini onaylama
pm.test('yanıt 300 ms altında', function () {
pm.expect(pm.response.responseTime).to.be.below(300)
})
XML yanıtını ayrıştırma
const { XMLParser } = require('fast-xml-parser')
const parser = new XMLParser()
const data = parser.parse(pm.response.text())
pm.test('sipariş id mevcut', function () {
pm.expect(data.Order.Id).to.be.a('string')
})
Betik hataları
Bir betik yakalanmamış bir istisna fırlatırsa, betiğin tamamı iptal edilir ve hata Konsol sekmesinde gösterilir. Hatadan önce çalışan diğer test senaryoları yine de kaydedilir.