Kısaca
Manuel istek yürütme sırasında ayarlanan değişkenler, aynı koleksiyonu Postman'ın Koleksiyon Çalıştırıcısı'nda çalıştırdığınızda sıklıkla kaybolur. Temel neden, bir değişken kapsamı uyuşmazlığıdır: pm.environment.set çalıştırıcıda manuel moddan farklı davranır ve koleksiyon değişkenleri ortam değişkenlerinden farklı çalışır. Bu kılavuz, bunun neden tam olarak böyle olduğunu ve nasıl düzeltileceğini açıklar, ardından Apidog'un değişken kapsamını yanlışlıkla yanlış yapılandırmayı zorlaştıracak bir şekilde nasıl ele aldığını gösterir.
Giriş
Postman'de bir API'yi manuel olarak test ediyorsunuz. Bir oturum açma isteği çalıştırıyorsunuz, ön istek betiği bir kimlik doğrulama belirteci ayarlıyor ve sonraki istekler bunu sorunsuz bir şekilde alıyor. Her şey yolunda.
Ardından “Koleksiyonu Çalıştır” düğmesine tıklıyorsunuz. Çalıştırıcı başlar, oturum açma isteği başarılı olur, ancak bir sonraki istek 401 hatasıyla başarısız olur. Belirteç orada değildir.
Bu senaryo, Stack Overflow ve Postman topluluk forumlarında defalarca karşımıza çıkmaktadır. Yanıtlar genellikle değişken kapsamına işaret eder, ancak manuel test ile çalıştırıcı arasındaki davranış farkının tam resmini nadiren açıklarlar.
Bunu anlamak, Postman'ın değişken kapsam hiyerarşisini anlamayı gerektirir. Bunu açıkça gördüğünüzde, çözüm basittir.
Postman'ın değişken kapsam hiyerarşisi
Postman, en yüksekten en düşüğe öncelik sırasına göre listelenen beş değişken kapsamına sahiptir:
- Yerel değişkenler – yalnızca mevcut betik yürütmesi içinde kullanılabilir, istekler arasında erişilemez
- Veri değişkenleri – veri odaklı çalıştırmalar için bir CSV veya JSON dosyasından yüklenir
- Koleksiyon değişkenleri – koleksiyona özgüdür, o koleksiyondaki istekler arasında kalıcıdır
- Ortam değişkenleri – seçilen ortama özgüdür, koleksiyonlar arasında kalıcıdır
- Küresel değişkenler – herhangi bir ortamdaki herhangi bir koleksiyonda kullanılabilir
Postman, {{token}} gibi bir değişken referansını çözdüğünde, bu listeyi aşağı doğru tarar ve bulduğu ilk eşleşmeyi kullanır.
Sorun şu ki, “kalıcı olmak” kelimesi, koleksiyonu nasıl çalıştırdığınıza bağlı olarak farklı anlamlara gelir.
Değişkenler Koleksiyon Çalıştırıcısında neden kaybolur?
Mevcut değer ve başlangıç değeri ayrımı
Her Postman değişkeninin iki alanı vardır: “başlangıç değeri” ve “mevcut değer.”
- Başlangıç değeri, Postman'ın bulutuna senkronize edilir ve ekip arkadaşlarıyla paylaşılır.
- Mevcut değer, makinenize özeldir ve asla senkronize edilmez.
Bir betikte pm.environment.set('token', value) kullanarak bir değişkeni programatik olarak ayarladığınızda, Postman etkin ortamınızdaki mevcut değeri günceller.
Manuel test modunda, bu beklendiği gibi çalışır, çünkü yerel mevcut değerleriniz aynı oturum içindeki ayrı ayrı istek yürütmeleri boyunca kalıcı olur.
Koleksiyon Çalıştırıcısında davranış değişir. Çalıştırıcı, her çalıştırmayı çalıştırma başlangıcındaki ortamın mevcut durumundan başlatır. Çalıştırma sırasında değişkenleri güncelleyen betikler, o çalıştırma içinde doğru şekilde çalışır. Ancak çalıştırıcı, çalıştırmalar arasında değişkenleri temizleyecek şekilde yapılandırılmışsa veya başlangıç değeri boşsa ve çalıştırıcı yeni bir ortam anlık görüntüsü kullanıyorsa, betiğinizin çalışmasına rağmen değişkenin kalıcı görünmediği bir duruma düşebilirsiniz.
Ortam değişkeni ve koleksiyon değişkeni sorunu
İşte daha yaygın tuzak. Bir yanıt sonrası betikte bir değişken ayarlıyorsunuz:
pm.environment.set('token', pm.response.json().access_token);
Bu, **etkin ortamda** bir değişken ayarlar. Ancak Koleksiyon Çalıştırıcısında “Değişken değerlerini koru” adlı bir seçenek bulunur. Bu onay kutusu işaretlenmezse (varsayılan olarak işaretli değildir), çalıştırıcı ortam değişkenlerini çalıştırma sonrasında başlangıç değerlerine sıfırlar. Çalıştırma sırasında ayarlanan herhangi bir değer atılır.
Koleksiyonu bir ortam seçili olmadan çalıştırıyorsanız, pm.environment.set sessizce başarısız olur. Yazılacak bir ortam yoktur. Değişken kaybolur.
Manuel ve çalıştırıcı modu arasındaki kapsam uyuşmazlığı
Manuel testte, genellikle bir ortam seçili olur ve bu, tüm Postman oturumunuz boyunca kalıcıdır. Bir istek çalıştırdığınızda, bir değişken ayarladığınızda ve başka bir istek çalıştırdığınızda, hepsi aynı kalıcı ortam bağlamında gerçekleşir.
Koleksiyon Çalıştırıcısı ayrı bir yürütme bağlamı oluşturur. Başlangıçta ortam durumunu yükler, tüm istekleri çalıştırır ve ardından (eğer “Değişken değerlerini koru” seçeneğini işaretlemediyseniz) ortamı çalıştırma öncesi durumuna döndürür.
Bu, çalıştırıcıdaki bir istek tarafından ayarlanan değişkenlerin, aynı çalıştırmadaki sonraki isteklere açık olacağı anlamına gelir, ancak açıkça korumadığınız sürece çalıştırma sona erdikten sonra ortam panelinize kalıcı olmazlar.
Çözümler
Çözüm 1: Çalıştırıcıda “Değişken değerlerini koru” seçeneğini işaretleyin
Koleksiyon Çalıştırıcısında, Çalıştır'a tıklamadan önce:
- Çalıştırıcı yapılandırma panelinde “Değişken değerlerini koru” seçeneğini arayın.
- Bu kutuyu işaretleyin.
Bu, çalıştırıcıya, çalıştırma tamamlandıktan sonra tüm değişken değişikliklerini etkin ortamınıza geri yazmasını söyler. Çalıştırma sırasında betikler tarafından ayarlanan değişkenler, çalıştırma bittiğinde ortam panelinizde görünür olacaktır.
Ne zaman kullanılır: Çalıştırıcının, diğer araçların veya sonraki çalıştırmaların kullanacağı bir kimlik doğrulama belirtecini yenileme gibi paylaşılan durumu güncellemesini istediğinizde.
Ne zaman kullanılmaz: Birden çok yineleme çalıştırdığınızda ve yineleme 1'de ayarlanan değişkenlerin yineleme 2'yi kirleteceği durumlarda. Bu durumda, veri dosyaları kullanın veya her yinelemenin başlangıcında değişkenleri açıkça sıfırlayın.
Çözüm 2: Çalıştırma içi durum için ortam değişkenleri yerine koleksiyon değişkenleri kullanın
Bir değişkenin yalnızca aynı koleksiyon çalıştırması içindeki istekler arasında paylaşılması gerekiyorsa, ortam değişkenleri yerine koleksiyon değişkenleri kullanın:
// Oturum açma isteğinizin yanıt sonrası betiğinde:
pm.collectionVariables.set('token', pm.response.json().access_token);
// Sonraki isteklerin ön istek betiğinde:
const token = pm.collectionVariables.get('token');
Koleksiyon değişkenleri, bir ortamın seçili olup olmamasından bağımsız olarak çalıştırıcıda her zaman kullanılabilir. Koleksiyon çalıştırmasının süresince kalıcıdırlar. Tek bir koleksiyon içinde ayarlanan ve tüketilen değerler için doğru kapsamdırlar.
Çözüm 3: Çalıştırmadan önce bir ortamın seçildiğinden emin olun
pm.environment.set, hiçbir ortam etkin olmadığında sessizce başarısız olur. Koleksiyonu çalıştırmadan önce:
- Koleksiyon Çalıştırıcısını açın.
- “Ortam” açılır menüsünde bir ortamın seçili olduğunu doğrulayın.
- Ortam düzeyinde değişkenlere ihtiyacınız yoksa, bunun yerine koleksiyon değişkenleri kullanın (Çözüm 2).
Çözüm 4: Her zaman var olması gereken değişkenler için başlangıç değerleri kullanın
Eğer baseUrl gibi bir değişkenin bir çalıştırmadaki ilk istekten itibaren kullanılabilir olması gerekiyorsa, bunu ortamınızda sadece mevcut değer olarak değil, başlangıç değeri olarak ayarlayın.
Ortam düzenleyicisinde:
- Sadece “Mevcut değer” alanını değil, “Başlangıç değeri” alanını da ayarlayın.
- Başlangıç değeri, çalıştırıcının başlangıç durumu olarak kullandığı şeydir.
Yalnızca mevcut değer ayarlanmışsa ve çalıştırıcının yerel mevcut değerlerinize erişimi yoksa (örneğin, bir ekip arkadaşının koleksiyonu çalıştırması veya bir Newman/Apidog CLI çalıştırması), değişken boş başlar.
Çözüm 5: Konsol kaydı ile hata ayıklama
Ne olduğunu tam olarak görmek için ön istek ve yanıt sonrası betiklerinize console.log ekleyin:
// Ön istek betiği
console.log('token before request:', pm.collectionVariables.get('token'));
console.log('environment token:', pm.environment.get('token'));
Koleksiyonu çalıştırmadan önce Postman Konsolunu açın (Görünüm > Postman Konsolunu Göster). Kayıtlar size her değişkenin hangi kapsamdan okunduğunu ve her adımda hangi değeri tuttuğunu tam olarak gösterecektir.
Apidog değişken kapsamını nasıl yönetir?
Apidog aynı kapsam hiyerarşisini kullanır: küresel, ortam, koleksiyon ve yerel. Temel fark kullanıcı arayüzündedir.
Apidog'un değişken düzenleyicisinde, başlangıç ve mevcut değerler açık etiketler ve renklerle gösterilir. Arayüz, yalnızca mevcut değeri yanlışlıkla ayarlamayı zorlaştırır. Bir betik pm.environment.set kullanarak bir değişken ayarladığında (Apidog, Postman uyumluluğu için bunu destekler), ortam paneli gerçek zamanlı olarak görsel olarak güncellenir, böylece değişikliği görebilirsiniz.
Apidog'un test çalıştırıcısı da, açıkça yapılandırmadığınız sürece adımlar arasında değişken değerlerini sıfırlamaz. Varsayılan davranış, bir çalıştırmadaki istekler arasında değişken durumunu korumaktır; bu da çoğu geliştiricinin manuel testten beklediğiyle eşleşir.
Ekip senaryoları için, Apidog'un yerel öncelikli modeli, ortam değişkenlerinin diske depolandığı anlamına gelir. Çalıştırmalar arasında mevcut değerlerinizi üzerine yazan bir bulut senkronizasyonu yoktur.
Yaygın hataların özeti
| Hata | Belirti | Çözüm |
|---|---|---|
| Ortam seçilmedi | pm.environment.set sessizce başarısız olur |
Bir ortam seçin veya koleksiyon değişkenleri kullanın |
| Yalnızca mevcut değer ayarlandı | CI'da veya ekip arkadaşının makinesinde değişken eksik | Ortam düzenleyicisinde başlangıç değerini ayarlayın |
| Değişken değerlerini koru işareti kaldırıldı | Çalıştırıcı tamamlandıktan sonra değişkenler sıfırlanır | Çalıştırıcı yapılandırmasında “Değişken değerlerini koru” seçeneğini işaretleyin |
| Çalıştırma içi durum için ortam değişkenleri kullanma | Manuel modda çalışır, çalıştırıcıda başarısız olur | pm.collectionVariables.set'e geçin |
| Kaydedilenlerde yanlış kapsamı kontrol etme | Değişken var ancak yanlış değer kullanılıyor | Her iki kapsamı da kaydedin ve çözüm önceliğini kontrol edin |
Sıkça Sorulan Sorular
pm.environment.set manuel modda çalışırken çalıştırıcıda neden çalışmaz?Manuel modda, kalıcı bir ortam oturumunuz vardır. Çalıştırıcıda, ortam çalıştırmanın başlangıcında yüklenir ve varsayılan olarak sonunda sıfırlanır. Çalıştırma sırasında değişkenleri ayarlayan betikler, o çalıştırmadaki sonraki istekler için hala çalışır, ancak “Değişken değerlerini koru” seçeneği işaretlenmediği sürece değişiklikler ortamınıza kalıcı olmaz.
pm.environment.set ve pm.collectionVariables.set arasındaki fark nedir?pm.environment.set, o ortamı kullanan tüm koleksiyonlar arasında paylaşılan etkin ortama yazar. pm.collectionVariables.set, belirli koleksiyona bağlı bir kapsama yazar. Yalnızca tek bir koleksiyon çalıştırması içinde önemli olan değerler için, koleksiyon değişkenleri daha uygundur ve bir ortamın seçilmesini gerektirmez.
Bu sorun Newman'da da meydana gelir mi?Evet. Newman da aynı kapsam modeline sahiptir. Varsayılan olarak, Newman her çalıştırmayı dışa aktarılan ortamın başlangıç değerleriyle başlatır ve `--export-environment` bayrağını kullanarak son ortam durumunu bir dosyaya yazmadığınız sürece, çalıştırma sonrasında değişiklikleri kalıcı hale getirmez.
Newman'daki `--export-environment` bayrağı nedir?Newman'a, çalıştırma sırasında betikler tarafından ayarlanan tüm değerler dahil olmak üzere ortamın son durumunu, çalıştırma tamamlandıktan sonra bir JSON dosyasına yazmasını söyler. Daha sonra bu dosyayı bir sonraki çalıştırma için ortam olarak geçirebilirsiniz. Bu, bir çalıştırmanın bir sonraki tarafından kullanılan belirteçler ürettiği işlem hatları için kullanışlıdır.
Apidog pm.collectionVariables.set'i destekler mi?Evet. Apidog, pm.collectionVariables.set, pm.collectionVariables.get, pm.environment.set ve pm.environment.get dahil olmak üzere tam Postman betik API'sini destekler. Postman'dan taşınan koleksiyonlar aynı betik sözdizimini kullanır.
Postman'da değişkenleri bir koleksiyondan diğerine nasıl aktarırım?Küresel değişkenler kullanın: pm.globals.set('token', value). Küresel değişkenler, Postman oturumunun ömrü boyunca koleksiyonlar ve ortamlar arasında kalıcıdır. Küresel değişkenler kapsamlı olmadığından ve ad çakışmalarına neden olabileceğinden, ekip ortamlarında bu yaklaşımla dikkatli olun.
Postman'daki değişken kapsamı sorunları, API test paketlerinde yanlış negatiflerin en güvenilir kaynaklarından biridir. Manuel olarak geçen ancak çalıştırıcıda başarısız olan bir test, güvenebileceğiniz bir test değildir. Kapsam modelini anlamak, doğru bağlam için doğru ayarlayıcıyı kullanmak ve uygun olduğunda “Değişken değerlerini koru” seçeneğini işaretlemek, bu sorunların çoğunu çözen üç hamledir.
