Çoğu mobil uygulama hatası kodundaki bir hata değildir. Sadece gerçek bir hücresel ağda ortaya çıkan hatalardır: uzun-polling bağlantısını kesen bir Vodafone CGNAT zaman aşımı, SDK çağrılarını sessizce yeniden yazan bir Türk Telekom DNS interceptor'ı, TLS handshake'ini oturum ortasında parçalayan bir T-Mobile MTU clamp'i ya da backend GPS yerine çıkış IP'sine baktığı için simülatörün "Konum Ayarla" menüsünün asla tetikleyemediği geo-fenced bir özellik.
Uygulamanı gönderdiğin her ülkede SIM alabilirsin — pahalı, yavaş ve otomatikleştirilmesi imkânsız. Ya da bir Android telefonu Nodetonet ile eşleştirip dev laptop'unu ona SOCKS5 çıkışı olarak yönlendirebilir ve tüm test suite'ini gerçek Türk Telekom IP'lerinden çıkacak şekilde kod yazdığın masadan çalıştırabilirsin. Bu sayfa tam olarak bunu anlatıyor.
iOS simülatörü neden gerçek bir operatör bağlantısının yerini tutamaz
Üç hata sınıfı simülatörlerde ve staging ortamlarında sistematik olarak görünmez:
- Geo-IP kapısı arkasındaki özellikler. "Türk fiyatlandırmasını sadece kullanıcı Türkiye'deyken göster." Simülatörünün locale spoof'u API'nin gördüğü IP'yi değiştirmez. Özellik asla aktive olmaz. Uygulamayı yayınlarsın ve Türkiye'deki gerçek kullanıcılar bozuk bir onboarding ekranıyla karşılaşır.
- Operatöre özgü ağ tuhaflıkları. 30 saniye sonra uzun-polling'i bitiren CGNAT port-mapping zaman aşımları. Handshake sırasında post-quantum TLS'i kıran MTU değerleri.
api.yourcompany.com'u başlıkları sessizce silen şeffaf bir proxy'ye yeniden yazan DNS interception. Bunların hiçbiri ofis Wi-Fi'ında yoktur ve hiçbiri staging loglarında görünmez. - Operatör içerik filtreleri. Türkiye, Hindistan ve Endonezya'daki mobil operatörler belirli hedefleri ulusal seviyeli içerik filtreleri üzerinden yönlendirir. CDN'in flag'li bir netblock'taysa kullanıcılarının yarısı zaman aşımı alır — ve bunu yayından üç gün sonra tek yıldızlı yorumlardan öğrenirsin.
Aşağıdaki tablo her test ortamının neyi yakalayıp neyi yakalayamadığını özetler:
| Test ortamı | Geo-IP kısıtlaması | Operatör DNS / MTU | İçerik filtreleri | Gerçek CGNAT | Otomasyona uygun |
|---|---|---|---|---|---|
| iOS / Android simülatörü | Hayır | Hayır | Hayır | Hayır | Evet |
| Ofis Wi-Fi'ında fiziksel cihaz | Hayır | Hayır | Hayır | Hayır | Kısmi |
| Yerel operatör SIM'iyle fiziksel cihaz | Yalnız yerel operatör | Yalnız yerel operatör | Yalnız yerel operatör | Evet (yerel) | Zor |
| Nodetonet mobil proxy (SOCKS5) | Evet — herhangi bir operatör | Evet — DNS telefon üzerinden | Evet — gerçek egress | Evet | Evet — betiklenebilir |
Nodetonet bir mobil QA iş akışına nasıl giriyor
Bir Android telefonu Nodetonet ajanı ile eşleştiriyorsun. Telefon, gerçek bir hücresel SIM'de adlandırılmış, kontrol edilebilir bir çıkış oluyor. Dev laptop'undan o cihaza bağlı bir SOCKS5 proxy oluşturuyorsun: localhost:1080'e gönderdiğin her şey phone-istanbul-vodafone-01 üzerinden çıkıyor. curl'ün, Postman koleksiyonun, CI entegrasyon testlerin, yerel bir DNS'e yönlenen iOS simülatörün — hepsi dünyaya Türk bir Vodafone abonesi gibi görünüyor.
Kritik detay: SOCKS5 kullandığında DNS de telefon üzerinden çözülüyor. Türk Telekom'un şeffaf resolver'ı api.yourapp.com'u yeniden yazıyorsa test koşucun gerçek kullanıcılarının gördüğünün aynısını görüyor. Bu bir HTTP proxy'nin sağlayabileceği bir şey değil — HTTP proxy'ler DNS'i telefon ağında değil, proxy sunucusunda çözüyor. Sadık ağ-katmanı simülasyonu için SOCKS5 doğru seçimdir.
Tek bir çıkışla sınırlı değilsin. Token grupları ile birkaç telefonu havuzlayabilirsin — bir Vodafone TR, bir Turkcell TR, bir T-Mobile DE — ve CI pipeline'ının her birine sırayla vurmasını sağlayabilirsin. Bir cihaz çevrimdışı olursa failover kuralı test suite değişikliği gerektirmeksizin otomatik olarak bir sonrakini devreye alır. Kurulum için mobil proxy'ler için otomatik failover'a bak.
Proxy kullanıcı adında belirli bir operatör veya şehri hedeflemek mi istiyorsun? Geo-hedefleme modifier sistemi uç noktayı değiştirmeden -country-tr, -carrier-vodafone veya -city-istanbul eklemenize olanak tanır. Spesifik operatör ağları hakkında daha fazla bilgi: Vodafone TR, Türk Telekom, Turkcell.
Adım adım kurulum (5 adım)
- Hesap oluştur. /auth/register'a kaydol ve küçük bir peşin kredi bakiyesi ekle — birkaç dolar haftalarca QA kullanımını karşılar.
- Telefona ajanı yükle. Android ajanı /download'dan indir ve bir token ile eşleştir. Telefonu test etmek istediğin operatörde tut: Vodafone TR, T-Mobile DE, EE UK vb. Rehberli bir kurulum için ilk token ve Android eşleştirme'ye bak.
- Çıkış başına token oluştur. Tokens sayfasında her telefon için açıklayıcı bir isimle token oluştur (
phone-vf-tr-01,phone-tm-de-02). Test harness'inin referans vereceği tanımlayıcı bu olacak. - Her token için SOCKS5 proxy oluştur. Proxies sayfasında her token'a bağlı bir SOCKS5 proxy oluştur. HTTP değil SOCKS5 — böylece DNS telefon üzerinden çözülür. Proxy-başı kimlik doğrulama (kullanıcı adı ve şifre) ekle ve isteğe bağlı olarak yalnızca CI koşucunun bağlanabilmesi için bir IP allowlist ekle. Seçenekler için kimlik doğrulamalı SOCKS5 rehberine bak.
- Test koşucunu proxy'ye yönlendir. iOS simülatörü: Sistem Ayarları → Ağ → Wi-Fi'ın → Detaylar → Proxy'ler → SOCKS Proxy. Android emülatörü: başlatırken
-http-proxyflag'i (emulator -http-proxy socks5://…şeklinde). Headless betikler:ALL_PROXYortam değişkenini ayarla veya proxy URL'ini doğrudan HTTP istemci kütüphanenize geçir.
CI'da çok-operatör regresyonunu otomatikleştirme
Gerçek getiri, entegrasyon test suite'ini operatör başına bir döngüye sarıp CI pipeline'ına bağladığında geliyor. Aşağıdaki betik testleri her bölgesel çıkış üzerinden sırayla çalıştırır ve operatör başına bir JUnit raporu yazar — böylece dashboard'un ağ başına geçti/kaldı gösterir:
#!/bin/bash
# Eşleştirdiğimiz her bölgesel çıkış üzerinden entegrasyon testleri çalıştır.
# Her EXIT, Nodetonet panelinde oluşturulan bir SOCKS5 proxy URL'idir.
EXITS=(
"tr-vodafone|socks5://tok_vf_tr:secret@panel.nodetonet.com:11080"
"de-tmobile|socks5://tok_tm_de:secret@panel.nodetonet.com:11081"
"uk-ee|socks5://tok_ee_uk:secret@panel.nodetonet.com:11082"
)
for entry in "${EXITS[@]}"; do
name="${entry%%|*}"
proxy="${entry##*|}"
echo "${name} uzerinde test ediliyor: ${proxy}"
ALL_PROXY="${proxy}" npm run test:integration -- --reporter junit > "results-${name}.xml"
done
Bunu her pull request'te tetiklenen bir GitHub Action'a ekle ve kod yazdığın yerden sıfır manuel çaba ile operatör başına regresyon kapsaman olsun. Operatöre özgü bir hata çıktığında, başarısız test raporu tam olarak hangi ağın bozulduğunu ve hangisinin çalışmaya devam ettiğini gösterir. Koddan birçok proxy'yi yönetme hakkında daha fazla bilgi için proxy'leri toplu yönetme ve ilk REST API çağrın'a bak.
QA ortamları için proxy başına kontroller
Nodetonet her proxy'ye kendi erişim kontrollerini verir; bu, bir QA filosunu takım genelinde paylaşırken kullanışlıdır:
- IP allowlist. Her proxy'yi CI koşucunun IP'siyle kilitle; böylece sızdırılan bir kimlik bilgisi kötüye kullanılamaz. Bkz. IP izin ve engelleme listeleri.
- Thread limitleri. Kontrolden çıkan bir test suite'inin cihazı doyurmaması için eş zamanlı bağlantı sayısını sınırla. Konu: istemci başına thread limitleri.
- Kota ve sona erme. Herhangi bir test kullanıcısının proxy kimlik bilgisine veri kotası veya kesin bir sona erme tarihi ata. Bkz. istemci başına kota limitleri.
- Durum bilgili akışlar için sticky oturumlar. Bir ödeme veya giriş testi süresince aynı IP'yi sabitlemek için proxy kullanıcı adına
-session-XXXXekle. Ayrıntılar: sticky oturumlar açıklandı.
Her çıkışın canlı olduğunu ve uzun bir test koşusu başlatmadan önce beklediğin operatör IP'sini döndürdüğünü doğrulamak için ücretsiz proxy checker'ımızı kullanabilirsin.
Bu yaklaşımın uygun olmadığı durumlar
- Yalnızca yerel operatörünü test etmen gerekiyor. Masanda gerçek bir SIM üzerindeki gerçek bir cihaz tek ağ için daha hızlı geri bildirim verir. Nodetonet'i elinde olmayan operatörler için kullan.
- Cihaz-taraflı sensörleri test ediyorsun (kamera, ivmeölçer, push bildirimleri, pil durumu). Proxy ağ çıkışını değiştirir, donanımı değil. Sensörler için fiziksel cihazda test et; ağ-katmanı ve geo-IP parçaları için Nodetonet'i kullan.
- Uygulamanın sertifika pinlemesi var. SOCKS5 proxy TLS'i kesmez — ham TCP bağlantısını tüneller. Sertifika pinlemesi tam olarak amaçlandığı gibi çalışmaya devam eder; bu iyidir: yine de doğru operatör IP'sini ve DNS'ini alırsın, sadece TLS inceleme noktası olmaz. Hata ayıklama için kendi uygulamanın TLS'ine MitM yapmak istiyorsan SOCKS5 tüneliyle birlikte
mitmproxygibi özel bir araç kullan.
Başlayın
Ücretsiz hesap oluştur, bir telefon eşleştir ve simülatörünü ona yönlendir. Çoğu takım ilk saat içinde ilk operatöre özgü hatasını bulur. Mobil proxy'lerin neler yapabileceğine dair daha geniş bir bakış için mobil proxy nedir'i oku ya da tüm özellikleri keşfet. Sorularınız için Discord veya e-posta ile bize ulaşın.