برنامه نویسی

5 هک بهره وری توسعه دهنده که زمان آزمایش QA ما را 70 ٪ ذخیره کرده است

بحران زمان آزمایش

هنگامی که تیم ما سال گذشته شروع به ساختن یک برنامه جدید FinTech کرد ، ما به یک تنگنا غیر منتظره رسیدیم: زمان آزمایش. با داشتن چندین نقش کاربر ، جریان های تأیید پیچیده و الزامات امنیتی دقیق ، چرخه QA ما از روزها به هفته رشد می کند. این فقط ناامید کننده نبود – این مستقیماً بر سرعت آزادی و روحیه تیم ما تأثیر می گذاشت.

پس از چندین اسپرینت دردناک ، ما پنج تغییر در رویکرد آزمایش خود را اجرا کردیم که به طور چشمگیری زمان آزمایش ما را کاهش می دهد بدون اینکه کیفیت به خطر بیاندازد. من اینها را به اشتراک می گذارم زیرا آنها برای ما تغییر دهنده بازی بوده اند و ممکن است به تیم شما نیز کمک کنند.

هک شماره 1: تهیه خودکار کاربر

یکی از بزرگترین سینک های زمان ما ، ایجاد دستی کاربران تست با سطح مجوزهای مختلف بود. ما این کار را با یک سیستم تأمین خودکار حل کردیم.

// Example of our user provisioning script
const roles = ['admin', 'manager', 'analyst', 'customer', 'support'];
const environments = ['dev', 'staging', 'uat'];

async function provisionTestUsers() {
  for (const env of environments) {
    for (const role of roles) {
      await createTestUser({
        role,
        environment: env,
        email: `test-${role}-${randomString()}@our-test-domain.com`
      });
    }
  }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تأثیر: کاهش زمان تنظیم کاربر از 2-3 ساعت در هر چرخه تست به 5 دقیقه.

هک شماره 2: الگوی رهگیری کد تأیید

تأیید ایمیل و پیام کوتاه یکی دیگر از تنگناها بود. راه حل ما رهگیری API را با یک سیستم مدیریت ایمیل اختصاصی ترکیب می کند:

// Verification interceptor middleware
app.use('/api/verification', (req, res, next) => {
  if (process.env.NODE_ENV !== 'production') {
    // Store codes in memory for test retrieval
    const { userId, code, channel } = req.body;
    testingStore.saveVerificationCode(userId, code, channel);

    // For email channel, we also send to our test email service
    if (channel === 'email') {
      sendToTestEmailService(userId, code);
    }
  }
  next();
});
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تأثیر: بررسی کد دستی حذف شده ، صرفه جویی در حدود 15-20 دقیقه در هر سناریوی آزمون.

هک شماره 3: میانبرهای تست محور دولتی

ما سیستمی را برای پرش مستقیم به حالت های خاص برنامه به جای حرکت در کل جریان هر بار اجرا کردیم:

// Example of our state-jumping mechanism
cy.jumpToState({
  loggedIn: true,
  userRole: 'manager',
  completedSteps: ['identity', 'funding', 'risk-assessment'],
  accountStatus: 'pending-approval'
});
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این امر مستلزم ایجاد یک API مدیریت دولتی است که می تواند برای هر سناریوی آزمایشی ، حمایت کامل و وضعیت جبهه را تنظیم کند.

تأثیر: بسته به پیچیدگی جریان ، زمان تنظیم آزمایش را 50-80 ٪ کاهش داد.

هک شماره 4: زیرساخت های تست موازی

پس از تجزیه و تحلیل الگوهای آزمایش خود ، دریافتیم که وقتی بسیاری از افراد می توانند به طور موازی اجرا شوند ، آزمایشات را به صورت متوالی انجام می دهیم. ما یک زیرساخت سفارشی را اجرا کردیم که امکان اجرای آزمون موازی را با داده های جدا شده فراهم می کند:

# Part of our test orchestration configuration
parallel_testing:
  max_instances: 8
  data_isolation:
    strategy: 'prefix'
    identifier: '${TEST_RUN_ID}'
  resource_allocation:
    memory_per_instance: '2Gi'
    cpu_per_instance: '1'
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تأثیر: کاهش زمان اجرای کل 60 ٪ برای مجموعه رگرسیون ما.

هک شماره 5: مدیریت ایمیل چند حساب

برای آزمایش پایان به پایان با خدمات خارجی واقعی ، ما یک سیستم مدیریت ایمیل فله ای را اجرا کردیم که به هر آزمون امکان دسترسی به حساب های ایمیل اختصاصی را می دهد:

  1. هر آزمون مجموعه ای از آدرس های ایمیل کار واقعی را اختصاص می دهد
  2. تست ها می توانند در این ایمیل ها در سرویس های واقعی شخص ثالث ثبت نام کنند
  3. سیستم ما می تواند کدهای تأیید و ایمیل های ارسال شده به این حساب ها را بازیابی کند
  4. همه اینها از طریق چارچوب آزمایش ما به صورت برنامه ای اتفاق می افتد
// Example of our email allocation and retrieval system
const emailSet = await testEmailPool.allocate(5); // Get 5 emails for this test

// Register on external service
await externalServicePage.register({
  email: emailSet.primary,
  password: 'test-password'
});

// Retrieve verification code
const verificationEmail = await emailSet.waitForEmail({
  from: 'noreply@external-service.com',
  subject: /verification code/i,
  timeoutMs: 10000
});

const code = extractVerificationCode(verificationEmail);
await externalServicePage.enterVerificationCode(code);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تأثیر: نیاز به ایجاد و مدیریت حساب ایمیل دستی را از بین برد و در هفته تقریباً 10 ساعت در تیم ما صرفه جویی کرد.

يافته ها: از 40 ساعت تا 12 ساعت در هر چرخه آزمون

با اجرای این پنج هک ، چرخه تست رگرسیون کامل خود را از تقریباً 40 ساعت به 12 ساعت کاهش دادیم – کاهش 70 ٪. مهمتر از همه ، تیم ما دیگر از مرحله آزمایش اسپرینت های ما وحشت ندارد.

جادوی واقعی هنگامی اتفاق افتاد که ما هر پنج رویکرد را در یک استراتژی آزمایش یکپارچه ترکیب کردیم. آنچه که قبلاً یک فرآیند دردناک و دستی بود ، تا حد زیادی خودکار شد و به تیم QA ما این امکان را می داد تا به جای جریان تأیید تکراری ، روی آزمایش های اکتشافی و موارد لبه تمرکز کنند.

ملاحظات اجرای

اگر در حال اجرای رویکردهای مشابه هستید ، در اینجا برخی از عوامل در نظر گرفته شده است:

  1. انزوای آزمون: اطمینان حاصل کنید که آزمایش های موازی شما با یکدیگر تداخل نمی کند
  2. مدیریت محیط: این رویکردها با محیط های زودگذر به بهترین وجه کار می کنند
  3. نگهداری بالای سر: برخی از این سیستم ها نیاز به نگهداری مداوم دارند
  4. امنیت: اطمینان حاصل کنید که اعتبارنامه آزمایش هرگز با تولید ، به خصوص برای حساب های ایمیل مخلوط نشود

پایان

گاهی اوقات بزرگترین سودهای بهره وری از نوشتن کد سریعتر بلکه از کاهش اصطکاک در روند توسعه شما ناشی می شود. برای ما ، آزمایش آن نقطه اصطکاک بود و پرداختن به آن ، سرعت توسعه ما را تغییر داد.

اگر با چالش های مشابه روبرو هستید ، توصیه می کنم با اتوماسیون مدیریت ایمیل (شماره 5) شروع کنید زیرا اغلب سریعترین برد برای برنامه های سنگین تأیید را فراهم می کند. اکنون چندین ابزار تخصصی برای این کار وجود دارد – ما با استفاده از یک پلتفرم مدیریت ایمیل اختصاصی که در آن پیدا کردیم به پایان رسیدیم [this testing resources collection] امیپست این برای نیازهای ما بسیار خوب کار کرده است.

تیم شما با چه تنگناها آزمایش می شود؟ آیا راه حل های خلاقانه ای برای چالش های مشابه پیدا کرده اید؟ من دوست دارم در نظرات در مورد آنها بشنوم!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا