Rehberler / Sadakat kartı SMS doğrulaması (Türkçe)

Sadakat kartı ve iade işlemlerinde SMS doğrulamasını otomatik test etmek

Perakende, mağaza zinciri ya da e-ticaret yazılımınızda puan harcama, iade ya da yönetici onayı gibi işlemler müşterinin telefonuna giden bir SMS koduyla onaylanıyorsa, bu akış sıradan bir giriş ekranından daha hassas: bir hata ya para ya da müşteri güveni kaybettirir. Bu rehber, bu akışları gerçek SMS göndermeden nasıl otomatik test edeceğinizi anlatıyor.

22 Ekim 2026'da güncellendiPlaywright örnekleriyle
Kısaca

Test ortamında SMS sağlayıcınızı otpmock'a yönlendirin. Uygulamanız kodu her zamanki gibi "gönderir", kod otpmock'ta durur, testiniz onu HTTPS ile okuyup forma yazar. Doğru kod, yanlış kod, yeniden gönderme ve tek kullanımlık kod senaryolarını canlı SMS ya da koda gömülü sabit bir kod olmadan, her CI koşusunda sınayabilirsiniz.

Bu akışlar neden ayrıca test edilmeli?

Giriş ekranındaki OTP bozulursa kullanıcı içeri giremez ve fark edilir. Puan harcama ya da iade onayındaki doğrulama bozulursa ise tersi olur: kimse fark etmez, çünkü işlem sorunsuz geçer. Doğrulama adımı sessizce atlanan bir akış, ancak kasadaki fark ya da müşteri şikâyetiyle ortaya çıkar. Bu yüzden asıl sınanması gereken, kodun gelmesi kadar, yanlış durumlarda işlemin geçmemesi.

Hangi senaryolar sınanmalı?

AkışTest edilecek davranış
Puan harcamaDoğru kodla bakiye düşer; yanlış kodla düşmez.
İade onayıKod yalnızca o iade için geçerlidir; başka bir iadeye taşınamaz.
Yönetici onayı gerektiren işlemKod yetkili kişinin numarasına gider, müşterinin numarasına değil.
Müşteri bilgisi güncellemeYeni telefon numarasına kod gider; eski numaraya gitmez.
Yeniden gönderİkinci kod gelir; uygulamanızın politikasına göre ilk kod geçersiz olur.
Tek kullanımlık kodAynı kod ikinci kez girildiğinde reddedilir.
Deneme sınırıArt arda yanlış girişten sonra akış kilitlenir ya da yeni kod ister.
Süre aşımıSüresi dolan kod reddedilir.

Bunların hepsi uygulamanızın davranışı; otpmock yalnızca kodu size ulaştırır. Hangi kuralın geçerli olduğuna (kaç deneme, kaç dakika, ilk kod geçersiz mi) siz karar verirsiniz, test de onu doğrular.

1. adım: SMS sağlayıcınızı test ortamında otpmock'a yönlendirin

Hangi servisi kullandığınıza göre kurulum değişir; her biri tek bir ayardır ve canlı ortamınız etkilenmez:

Test ortamında iki değişken yeter: OTPMOCK_URL=https://api.otpmock.com ve sağlayıcı kimlik bilgisi yerine otpmock API anahtarınız. Anahtarı ücretsiz hesapla alırsınız.

2. adım: testleri yazın

Bağımlılığı olmayan otp yardımcısını curl -O https://otpmock.com/sdk/otpmock.ts ile indirin. Her test kendi telefon numarasını üretsin; paralel koşan testler birbirinin kodunu okumasın. Aşağıdaki örneklerde musteriOlustur ve bakiye, kendi test verinizi hazırlayan ve okuyan yardımcılarınızı temsil ediyor (API ya da veritabanı üzerinden).

Doğru kodla puan harcama

tests/puan-harcama.spec.ts
import { test, expect } from "@playwright/test";
import { OtpMock } from "./otpmock";

const otp = new OtpMock({ baseUrl: process.env.OTPMOCK_URL!, apiKey: process.env.OTPMOCK_API_KEY! });

test("puan harcama: doğru kodla işlem tamamlanır", async ({ page }) => {
  const telefon = otp.randomPhone("+905");
  await musteriOlustur({ telefon, puan: 500 });

  await page.goto("/kasa");
  await page.getByLabel("Müşteri telefonu").fill(telefon);
  const since = Date.now() - 5_000;
  await page.getByRole("button", { name: "Puan kullan" }).click(); // uygulama SMS'i gönderir

  const { code } = await otp.waitForCode(telefon, { since });
  await page.getByLabel("Doğrulama kodu").fill(code);
  await page.getByRole("button", { name: "Onayla" }).click();

  await expect(page.getByText("Puan kullanıldı")).toBeVisible();
  expect(await bakiye(telefon)).toBe(400); // 100 puan harcandı
});

Yanlış kodla işlem geçmemeli

Asıl değeri olan test genellikle bu. Doğru kodu okuyup bilerek yanlışını yazıyoruz ve bakiyenin değişmediğini doğruluyoruz.

tests/puan-harcama.spec.ts
test("puan harcama: yanlış kodla bakiye düşmez", async ({ page }) => {
  const telefon = otp.randomPhone("+905");
  await musteriOlustur({ telefon, puan: 500 });

  await page.goto("/kasa");
  await page.getByLabel("Müşteri telefonu").fill(telefon);
  const since = Date.now() - 5_000;
  await page.getByRole("button", { name: "Puan kullan" }).click();

  const { code } = await otp.waitForCode(telefon, { since });
  const yanlis = code === "000000" ? "111111" : "000000";
  await page.getByLabel("Doğrulama kodu").fill(yanlis);
  await page.getByRole("button", { name: "Onayla" }).click();

  await expect(page.getByText("Kod hatalı")).toBeVisible();
  expect(await bakiye(telefon)).toBe(500); // hiçbir şey değişmedi
});

Yeniden gönderme yeni bir kod üretmeli

İkinci kodu okurken since değerine ilk mesajın zamanını verin; böylece eski kodu yanlışlıkla tekrar okumazsınız.

tests/yeniden-gonder.spec.ts
test("yeniden gönder: yeni kod gelir", async ({ page }) => {
  const telefon = otp.randomPhone("+905");
  await musteriOlustur({ telefon, puan: 500 });

  await page.goto("/kasa");
  await page.getByLabel("Müşteri telefonu").fill(telefon);
  const since = Date.now() - 5_000;
  await page.getByRole("button", { name: "Puan kullan" }).click();
  const ilk = await otp.waitForCode(telefon, { since });

  await page.getByRole("button", { name: "Yeniden gönder" }).click();
  const ikinci = await otp.waitForCode(telefon, { since: ilk.receivedAt + 1 });

  expect(ikinci.code).not.toBe(ilk.code);
  // Politikanız ilk kodu geçersiz kılıyorsa: ilk kodu girip reddedildiğini de doğrulayın.
});

Tek kullanımlık ve deneme sınırı

Aynı kalıpla iki senaryo daha yazılır: kodu bir kez doğru girin, işlemi tamamlayın, sonra aynı kodla ikinci bir işlem başlatıp reddedildiğini doğrulayın. Deneme sınırı için ise döngüde art arda yanlış kod girip uygulamanızın kilitlendiğini ya da yeni kod istediğini doğrulayın. Her ikisinde de kodu otpmock'tan okumanız yeter.

Süre aşımı nasıl test edilir?

otpmock mesajı 10 dakika saklar, ama uygulamanızın kod süresi büyük olasılıkla bundan kısa (örneğin 3 dakika). Testte 3 dakika beklemeyin. Test ortamında kod süresini kısa bir değere (örneğin 5 saniye) çeken bir yapılandırma ekleyin, kodu okuyun, süre kadar bekleyin ve eski kodun reddedildiğini doğrulayın. Süre aşımı kuralını uygulamanız uyguladığı için bu, otpmock'tan bağımsız ve hızlı bir testtir.

"Test numarasına sabit kod" neden bu akışlarda daha da riskli?

Test sırasında zahmet çıkmasın diye belirli numaralara 000000 gibi sabit bir kod tanımlamak yaygın bir kısayol. Puan harcama ve iade gibi parayla ilgili akışlarda bu, koda gömülü bir arka kapıdır: yanlış bir yapılandırmayla canlıya çıkarsa o numaraya bağlı kartların işlemleri herkese açık olur. otpmock'la kod gerçekten üretilir ve gerçek yoldan okunur; uygulamanızda test için ayrı bir kod yolu bulunmaz.

Test verisi ve kişisel veri

Test ortamına gerçek müşteri numaralarını ya da kart bilgilerini taşımayın; randomPhone gibi uydurma numaralar testler için yeterli. otpmock'a gönderdiğiniz telefon numaraları ve mesaj metni 10 dakika boyunca saklanır, sonra silinir. Doğrulama akışlarınızın kişisel verilerin korunması mevzuatına uygunluğu konusunda kendi hukuk ya da uyum ekibinize danışın: otpmock bir test aracıdır, hukuki danışmanlık vermez ve belirli bir mevzuata uyum garantisi sunmaz.

Sık sorulanlar

SMS'in müşterinin telefonuna gerçekten ulaştığını bu yöntemle test edebilir miyim?

Hayır. otpmock uygulamanızın davranışını sınar, operatör teslimatını değil. Gerçek teslimatı ayrı ve küçük bir kontrolle (örneğin canlıda belirli aralıklarla kendi numaranıza bir deneme mesajı) doğrulayın; ana test takımınızı otpmock'ta tutun.

Doğrulamayı SMS yerine başka bir yöntemle (push bildirimi, biyometrik, passkey) yapıyorsak?

otpmock yalnızca SMS ile gelen kodları yakalar. Cihaz ya da biyometri gerektiren yöntemleri test etmez; bunlar için uygulamanızın ya da sağlayıcının test modunu kullanmanız gerekir.

Birden fazla mağaza ya da kasa simülasyonu paralel koşabilir mi?

Evet. Her teste kendi numarasını verirseniz paralel işçiler birbirinin kodunu okumaz. Aylık mesaj hakkınızı (ücretsiz planda 300) tüketen şey her gönderilen SMS'tir; büyük bir takım için planlara bakın.

Canlı ortamda kullanabilir miyim?

Hayır, kullanmamalısınız. otpmock gerçek SMS göndermez; yalnızca test ve staging ortamları içindir. Canlı ortamınız SMS sağlayıcınızla çalışmaya devam eder.

Kendi akışınızda deneyin

Ücretsiz plan ayda 300 mesaj içerir, kart gerekmez.

Ücretsiz API anahtarı al

İlgili sayfalar