چگونه تست‌ها را می‌توان به خطوط پردازش داده اضافه کرد؟

چگونه تست‌ها را می‌توان به خطوط پردازش داده اضافه کرد؟

نوشته شده توسط: تیم فنی نیک آموز
تاریخ انتشار: ۱۳ بهمن ۱۴۰۰
آخرین بروزرسانی: ۰۷ مرداد ۱۴۰۲
زمان مطالعه: 15 دقیقه
۰
(۰)

مقدمه

تست خطوط پردازش داده ((Pipelines با تست برنامه‌های کاربردی دیگر، مانند یک وب سایت، متفاوت است. اگر شما با چالش‌های زیر مواجه هستید:

مسئولیت یک خط پردازش داده را به عهده گرفته‌اید که هیچ تستی ندارد.
باید اضافه کردن ویژگی‌های جدید به خط پردازش داده‌ای را شروع کنید که هیچ تستی ندارد.

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

تست کیفیت داده‌ها، پس از پردازش و قبل از اینکه در دسترس کاربران نهایی قرار گیرد.
تست‌های استاندارد، مانند تست سیستمی‌، تست واحد، تست ادغام و تست قرارداد.

ما همچنین به بحث نظارت و هشدار می‌پردازیم تا اطمینان حاصل کنیم که در مورد انحراف اندازه داده‌ها، شکست خطوط پردازش داده و غیره هشدار لازم را دریافت می‌کنیم.

تست خط پردازش داده

فرض می‌کنیم شما مسئولیت یک خط پردازش داده را به عهده گرفته‌اید که هیچ تستی ندارد. خیلی بعید است که زمان کافی برای نوشتن تست داشته باشید تا به پوشش کد به صد در صد برسد. در چنین مواردی، شناسایی و تست خروجی‌های کلیدی خط پردازش داده بسیار مهم است. یک دستورالعمل متداول برای اضافه کردن تست‌ها عبارتند از:

تست سیستمی انتها به انتها
تست کیفیت داده‌ها
نظارت و هشدار (از نظر فنی تست محسوب نمی‌شود، اما برای تشخیص انحراف اندازه داده‌ها، شکست خط پردازش داده و غیره ضروری است)
تست واحد و قرارداد

توجه داشته باشید که ابتدا کلیت سیستم را مورد تست قرار می‌دهیم و سپس تست‌هایی را به اجزای جداگانه اضافه می‌کنیم. در حالی که این ترتیب اجرای تست به طور کلی توصیه می‌شود، اما بسته به موقعیت شما، می‌توانید ترتیب اجرای این تست‌ها را نادیده بگیرید یا تغییر دهید و بر اساس شرایط روال تست را طراحی کنید.

فرض می‌کنیم مسئولیت یک خط پردازش داده را به عهده گرفته‌اید که روال‌های زیر را انجام می‌دهد:

داده‌های S3 را می‌خواند.
دو تبدیل پایتون و اسپارک را انجام می‌دهد.
داده‌های تبدیل یافته را به یک انبار داده بارگذاری می‌کند تا توسط کاربران نهایی استفاده شود.

۱) تست سیستمی انتها به انتها

همان‌طور که در حال شروع به اضافه کردن ویژگی‌های جدید هستید، دقت داشته باشید عملکرد موجود در اثر اضافه شدن ویژگی‌های جدید دچار شکست نشود. برای این منظور باید تست سیستمی انتها به انتها داشته باشید. برای تست سیستمی انتها به انتها می‌توان با استفاده از نمونه‌ای از داده‌های ورودی، اجرای مراحل پردازش داده‌ها با استفاده از نسخه توسعه یافته خط پردازش داده و در نهایت مقایسه خروجی با خروجی‌های مورد انتظار انجام داد.

یک قطعه نمونه کد برای افزودن تست سیستم با استفاده از

Pytest
import pytest
from your.data_pipeline_path import run_your_datapipeline
class TestYourDataPipeline:
@pytest.fixtures(scope="class", autouse=True)
def input_data_fixture(self):
# get input fixture data ready
yield
self.tear_down()
def test_data_pipeline_success(self):
run_your_datapipeline()
result = {"some data or file"}
expected_result = "predefined expected data or file"
assert result == expected_result
def tear_down(self):
# remove input fixture data

این تست قبل از اینکه کد در شاخه اصلی ادغام شود در محیط توسعه اجرا می‌شود. این کار باعث می‌شود اطمینان حاصل کنید که خط پردازش داده شما هنگام اضافه کردن ویژگی‌های جدید دچار مشکل نمی‌شود.

۲) تست کیفیت داده‌ها

این نوع تست برای خطوط پردازش داده منحصر به فرد است. به‌ جای تست کد، داده‌های تبدیل‌شده را بررسی می‌کنیم و مطمئن می‌شویم که دارای ویژگی‌هایی است که ما انتظار داریم. ما می‌توانیم این کار را مطابق شکل زیر انجام دهیم.

ما تسک های زیر را به خط پردازش داده اضافه می‌کنیم:

  • تسک بارگذاری داده‌های تبدیل یافته در جدول یا مجموعه داده موقت.
  • تسک اطمینان از اینکه داده‌های جدول موقت مطابق با انتظاراتی است که از داده‌های پردازش شده داریم. این مرحله معمولاً شامل بررسی محدودیت‌های منحصربه‌فرد، مجموعه مقادیر مجاز، قوانین تجاری، بررسی داده‌های خارج از محدوده و غیره است.

توجه داشته باشید که چطور این تست هر بار بخشی از خط پردازش داده را مورد بررسی قرار می‌دهد، بر خلاف تست سیستمی انتها به انتها که کلیت خط پردازش داده را مورد بررسی قرار می‌دهد.

Dbt و Great Expectation عملکرد قدرتمندی را ارائه می‌دهند که انجام این نوع بررسی‌ها را آسان می‌کند. اگر بررسی کیفیت داده‌ها ناموفق باشد، یک هشدار برای تیم مهندسی داده صادر می‌شود و داده‌ها در جدول نهایی بارگذاری نمی‌شوند. این به مهندسان داده اجازه می‌دهد تا قبل از دادن حق دسترسی به کاربران نهایی، مسائل غیرمنتظره کیفیت داده را تشخیص داده و رفع کنند.

  • نظارت و هشدار

با تست کیفیت داده‌ها، ما می‌توانیم به طور منطقی از کیفیت داده‌های خود مطمئن باشیم. اما ممکن است انحرافات غیرمنتظره‌ای در اندازه داده‌ها، انحرافات در تعداد ردیف‌های حذف شده و غیره وجود داشته باشد. برای آگاهی از تغییرات غیرمنتظره در اندازه داده‌ها، باید خط لوله داده خود را به سیستم نظارت و هشدار مجهز کنیم.

برای پیاده‌سازی نظارت و هشدار می‌توان با ارسال لاگ به سرویس‌هایی مانند newrelic یا datadog یا ارسال لاگ به پایگاه داده انجام داد.

ما می‌توانیم هشدارها را بر اساس لاگ در newrelic یا datadog تنظیم کنیم. اما دقت داشته باشید اگر لاگ‌ها را به یک پایگاه داده ارسال کنیم، به سرویس‌هایی مانند Looker یا Metabase نیاز داریم تا در صورت تغییر اندازه داده‌ها به ما هشدار دهند.

لاگ‌ها می‌توانند حتی شامل موارد ساده‌ای باشند. به عنوان مثال لاگ تعداد ردیف‌های پایگاه داده قبل و بعد از مرحله تبدیل.

// logs
{"start_datetime": "2021-06-15 04:55:55", "end_datetime": "2021-06-15 05:10:15", "run_id": "unique_run_id", "transformation_id": "transformation_step_unique_id", "row_count_before": 1000, "row_count_after": 700, "other_metadata": "some number"}

تنظیم یک هشدار برای داده‌های خارج از محدوده می‌تواند از طریق datadog یا newrelic انجام شود. اگر لاگ‌ها در یک پایگاه داده ذخیره می‌شوند، یک هشدار در Looker یا Metabase تنظیم کنید.

  • تست واحد و قرارداد

وجود تست انتها به انتها، تست کیفیت داده‌ها و سیستم نظارت و هشدار به شما این اطمینان را می‌دهد که سریع‌تر حرکت کنید و داده‌هایی با کیفیت خوب ارائه دهید. مرحله بعدی اضافه کردن تست‌های واحد استاندارد برای عملکردها و تست‌های قراردادی است که در آن خط پردازش داده با سیستم‌های خارجی تعامل دارد، مانند صدا زدن API برای یک میکروسرویس. این تست‌ها هنگام اصلاح منطق کد به شما اطمینان بیشتری می‌دهد و به طور کلی به جلوگیری از بروز اشکالات کمک می‌کند.

دوره آموزش معماری میکروسرویس نیک‌آموز

نتیجه‌گیری

امیدواریم این مقاله ایده خوبی در مورد نحوه شروع تست خط پردازش داده به شما داده باشد. داشتن این تست‌ها شما را قادر می‌سازد تا ویژگی‌ها را با اطمینان اضافه کنید. همچنین تضمین می‌کند که داده‌های خروجی با کیفیت هستند. برای جمع‌بندی، اضافه کردن تست‌ها و نظارت را به ترتیب زیر شروع کنید:

  1. تست سیستمی انتها به انتها
  2. تست‌های کیفیت داده‌ها
  3. نظارت و هشدار
  4. تست واحد و قرارداد

همچنین مشاهده کردید که دو نوع تست کلی برای اطمینان از کیفیت و صحت داده‌ها وجود دارد:

  1. تست کیفیت داده‌ها، پس از پردازش
  2. تست‌های استاندارد

ایده اصلی این است که شروع به تست خروجی‌های کلیدی خط پردازش داده کنید. از تست انتها به انتها شروع کنید و به سمت تست‌های واحد حرکت کنید.

منابع

https://www.startdataengineering.com/post/how-to-add-tests-to-your-data-pipeline

چه رتبه ای می‌دهید؟

میانگین ۰ / ۵. از مجموع ۰

اولین نفر باش

title sign
دانلود مقاله
چگونه تست‌ها را می‌توان به خطوط پردازش داده اضافه کرد؟
فرمت PDF
7 صفحه
حجم 1 مگابایت
دانلود مقاله
title sign
معرفی نویسنده
تیم فنی نیک آموز
مقالات
402 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
تیم فنی نیک آموز
title sign
دیدگاه کاربران

close-image