ClickHouse/docs/fa/development/tests.md
2020-10-13 20:23:29 +03:00

28 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 69 نحوه اجرای تست های کلیک خانه

تست کلیک

تست های کاربردی

تست های کاربردی ساده ترین و راحت برای استفاده هستند. بسیاری از ClickHouse ویژگی ها را می توان مورد آزمایش با استفاده از آزمون های عملکردی و آنها را اجباری به استفاده از برای هر تغییر در ClickHouse کد است که می تواند آزمایش می شود که در راه است.

هر تست عملکردی یک یا چند نمایش داده شد به سرور در حال اجرا تاتر می فرستد و نتیجه را با مرجع مقایسه می کند.

تست ها در واقع queries فهرست راهنما. دو زیرشاخه وجود دارد: stateless و stateful. تست های بدون تابعیت بدون هیچ گونه داده های تست پیش بارگذاری شده نمایش داده می شوند-اغلب مجموعه داده های مصنوعی کوچک را در پرواز در داخل تست خود ایجاد می کنند. تست های نفرت انگیز نیاز به داده های تست از قبل نصب شده از یاندکس.متریکا و در دسترس عموم نیست. ما تمایل به استفاده از تنها stateless تست ها و جلوگیری از اضافه کردن جدید stateful تستها

هر تست می تواند یکی از دو نوع باشد: .sql و .sh. .sql تست اسکریپت ساده مربع است که به لوله کشی است clickhouse-client --multiquery --testmode. .sh تست یک اسکریپت است که به خودی خود اجرا است.

برای اجرای تمام تست ها استفاده کنید clickhouse-test ابزار. نگاه کن --help برای لیستی از گزینه های ممکن. شما به سادگی می توانید تمام تست ها را اجرا کنید یا زیر مجموعه ای از تست های فیلتر شده توسط زیر رشته را در نام تست اجرا کنید: ./clickhouse-test substring.

ساده ترین راه برای فراخوانی تست های کاربردی کپی است clickhouse-client به /usr/bin/ فرار کن clickhouse-server و سپس اجرا کنید ./clickhouse-test از دایرکتوری خود را.

برای اضافه کردن تست جدید, ایجاد یک .sql یا .sh پرونده در queries/0_stateless فهرست راهنما را به صورت دستی بررسی کنید و سپس تولید کنید .reference پرونده به روش زیر: clickhouse-client -n --testmode < 00000_test.sql > 00000_test.reference یا ./00000_test.sh > ./00000_test.reference.

تست باید استفاده کنید (ساختن, قطره, و غیره) تنها جداول در test پایگاه داده است که فرض بر این است که از قبل ایجاد می شود; همچنین تست می توانید جداول موقت استفاده.

اگر شما می خواهید به استفاده از نمایش داده شد توزیع شده در تست های کاربردی, شما می توانید اهرم remote تابع جدول با 127.0.0.{1..2} یا شما می توانید خوشه تست از پیش تعریف شده در فایل پیکربندی سرور مانند استفاده کنید test_shard_localhost.

برخی از تست ها با مشخص شده اند zookeeper, shard یا long در نام خود. zookeeper برای تست هایی است که از باغ وحش استفاده می کنند. shard برای تست هایی است که نیاز به سرور برای گوش دادن 127.0.0.*; distributed یا global همان معنی. long برای تست هایی است که کمی طولانی تر اجرا می شوند که یک ثانیه. شما می توانید غیر فعال کردن این گروه از تست با استفاده از --no-zookeeper, --no-shard و --no-long گزینه, به ترتیب.

اشکالات شناخته شده

اگر ما می دانیم برخی از اشکالات است که می تواند به راحتی توسط تست های کاربردی تکثیر, ما تست های عملکردی تهیه شده در tests/queries/bugs فهرست راهنما. این تست خواهد شد به نقل مکان کرد tests/queries/0_stateless هنگامی که اشکالات ثابت هستند.

تست های ادغام

ادغام آزمون اجازه می دهد برای تست ClickHouse در خوشه پیکربندی و ClickHouse تعامل با سرور های دیگر مانند MySQL, Postgres, MongoDB. مفید برای تقلید انشعابات شبکه قطره بسته و غیره هستند. این تست ها تحت کارگر بارانداز اجرا و ایجاد ظروف متعدد با نرم افزار های مختلف.

ببینید tests/integration/README.md در مورد چگونگی اجرای این تست.

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

تست های واحد

تست واحد مفید هستند که شما می خواهید برای تست نیست خانه کلیک به عنوان یک کل, اما یک کتابخانه جدا شده و یا کلاس. شما می توانید ساخت تست ها را فعال یا غیر فعال کنید ENABLE_TESTS گزینه کیک. تست واحد (و دیگر برنامه های تست) در واقع tests زیرشاخه در سراسر کد. برای اجرای تست واحد, نوع ninja test. برخی از تست ها استفاده می کنند gtest, اما برخی فقط برنامه هایی که بازگشت کد خروج غیر صفر در شکست تست.

این لزوما به تست واحد اگر کد در حال حاضر توسط تست های کاربردی تحت پوشش (و تست های کاربردی معمولا بسیار ساده تر برای استفاده).

تست های عملکرد

تست های عملکرد اجازه می دهد برای اندازه گیری و مقایسه عملکرد برخی از بخش جدا شده از خانه رعیتی در نمایش داده شد مصنوعی. تست ها در واقع tests/performance. هر تست توسط نمایندگی .xml فایل با شرح مورد تست. تست ها با اجرا clickhouse performance-test ابزار (که در تعبیه شده است clickhouse دودویی). ببینید --help برای نیایش.

هر تست یک یا چند نمایش داده شد (احتمالا با ترکیبی از پارامترهای) در یک حلقه با برخی از شرایط برای توقف (مانند “maximum execution speed is not changing in three seconds”) و اندازه گیری برخی از معیارهای مورد عملکرد پرس و جو (مانند “maximum execution speed”). برخی از تست ها می توانند پیش شرط ها را در مجموعه داده های تست پیش بارگذاری شده داشته باشند.

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

ابزار تست و اسکریپت

برخی از برنامه ها در tests دایرکتوری تست تهیه نشده, اما ابزار تست. مثلا, برای Lexer یک ابزار وجود دارد src/Parsers/tests/lexer این فقط تقلید از استدین را انجام می دهد و نتیجه رنگی را به انحراف می نویسد. شما می توانید از این نوع ابزار به عنوان نمونه کد و برای اکتشاف و تست دستی استفاده کنید.

شما همچنین می توانید جفت فایل قرار دهید .sh و .reference همراه با ابزار برای اجرا در برخی از ورودی از پیش تعریف شده - سپس نتیجه اسکریپت را می توان به مقایسه .reference پرونده. این نوع تست ها خودکار نیستند.

تست های متفرقه

تست برای لغت نامه های خارجی واقع در وجود دارد tests/external_dictionaries و برای مدل های ماشین یاد گرفته شده در tests/external_models. این تست ها به روز نمی شوند و باید به تست های ادغام منتقل شوند.

تست جداگانه برای درج حد نصاب وجود دارد. این اجرای آزمون ClickHouse خوشه در سرورهای جداگانه و شبیه سازی شکست های مختلف در موارد: شبکه تقسیم بسته رها کردن (بین ClickHouse گره بین ClickHouse و باغ وحش بین ClickHouse سرور و کلاینت ، ), kill -9, kill -STOP و kill -CONT مثل جپسن. سپس چک تست که همه درج اذعان نوشته شده بود و همه درج رد شد.

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

تست دستی

هنگامی که شما توسعه یک ویژگی جدید معقول نیز دستی تست است. شما می توانید این کار را با مراحل زیر انجام دهید:

ساخت خانه کلیک. اجرای کلیک از ترمینال: تغییر دایرکتوری به programs/clickhouse-server و با ./clickhouse-server. این پیکربندی استفاده کنید (config.xml, users.xml و فایل ها در config.d و users.d دایرکتوری ها) از دایرکتوری جاری به طور پیش فرض. برای اتصال به سرور کلیک اجرا کنید programs/clickhouse-client/clickhouse-client.

توجه داشته باشید که تمام clickhouse ابزار (سرور مشتری و غیره) فقط symlinks به یک باینری به نام clickhouse. شما می توانید این دودویی در programs/clickhouse. همه ابزار همچنین می توانید به عنوان استناد شود clickhouse tool به جای clickhouse-tool.

متناوبا شما می توانید بسته بندی کلیک را نصب کنید: در هر صورت انتشار پایدار از مخزن یاندکس و یا شما می توانید بسته را برای خودتان با ساخت ./release در منابع کلیک خانه ریشه. سپس سرور را با شروع sudo service clickhouse-server start (یا توقف برای متوقف کردن سرور). به دنبال سیاهههای مربوط در /etc/clickhouse-server/clickhouse-server.log.

هنگامی که تاتر در حال حاضر بر روی سیستم شما نصب شده, شما می توانید جدید ساخت clickhouse دودویی و جایگزین باینری موجود:

$ sudo service clickhouse-server stop
$ sudo cp ./clickhouse /usr/bin/
$ sudo service clickhouse-server start

همچنین شما می توانید سیستم کلیک سرور را متوقف و اجرا خود را با همان پیکربندی اما با ورود به ترمینال:

$ sudo service clickhouse-server stop
$ sudo -u clickhouse /usr/bin/clickhouse server --config-file /etc/clickhouse-server/config.xml

به عنوان مثال با دیابت بارداری:

$ sudo -u clickhouse gdb --args /usr/bin/clickhouse server --config-file /etc/clickhouse-server/config.xml

اگر سیستم کلیک-سرور در حال اجرا است و شما نمی خواهید برای متوقف کردن, شما می توانید شماره پورت در خود تغییر دهید config.xml (یا نادیده گرفتن در یک فایل در config.d فهرست راهنما) مسیر داده مناسب را فراهم کرده و اجرا کنید.

clickhouse دودویی تقریبا هیچ وابستگی و کار در سراسر طیف گسترده ای از توزیع های لینوکس. برای تست سریع و کثیف تغییرات خود را بر روی یک سرور, شما به سادگی می توانید scp تازه ساخته شده است clickhouse باینری به سرور شما و سپس به عنوان مثال بالا اجرا شود.

محیط تست

قبل از انتشار انتشار به عنوان پایدار ما را در محیط تست استقرار. محیط تست یک خوشه است که بخشی از 1/39 را پردازش می کند یاندکسمتریکا داده ها. ما محیط تست خود را با یاندکس به اشتراک می گذاریم.تیم متریکا تاتر بدون خرابی در بالای داده های موجود به روز رسانی. ما در ابتدا نگاه کنید که داده ها با موفقیت و بدون عقب مانده از زمان واقعی پردازش, تکرار ادامه کار و هیچ مشکلی برای یاندکس قابل مشاهده وجود دارد.تیم متریکا اولین چک را می توان در راه زیر انجام داد:

SELECT hostName() AS h, any(version()), any(uptime()), max(UTCEventTime), count() FROM remote('example01-01-{1..3}t', merge, hits) WHERE EventDate >= today() - 2 GROUP BY h ORDER BY h;

در برخی موارد ما نیز به تست محیط زیست از تیم های دوست ما در یاندکس استقرار: بازار, ابر, و غیره. همچنین در حال حاضر برخی از سرورهای سخت افزاری است که برای اهداف توسعه استفاده می شود.

تست بار

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

اطمینان حاصل کنید که شما را فعال کرده اند query_log در خوشه تولید خود را.

جمع کردن گزارش پرس و جو برای یک روز یا بیشتر:

$ clickhouse-client --query="SELECT DISTINCT query FROM system.query_log WHERE event_date = today() AND query LIKE '%ym:%' AND query NOT LIKE '%system.query_log%' AND type = 2 AND is_initial_query" > queries.tsv

این یک مثال راه پیچیده است. type = 2 نمایش داده شد که با موفقیت اجرا فیلتر کنید. query LIKE '%ym:%' است برای انتخاب نمایش داده شد مربوطه از یاندکس.متریکا is_initial_query است را انتخاب کنید تنها نمایش داده شد که توسط مشتری شروع, نه با کلیک خود (به عنوان بخش هایی از پردازش پرس و جو توزیع).

scp این ورود به خوشه تست خود را و اجرا به شرح زیر است:

$ clickhouse benchmark --concurrency 16 < queries.tsv

(احتمالا شما همچنین می خواهید برای مشخص کردن یک --user)

پس یه شب یا هفته ولش کن و برو استراحت کن

شما باید بررسی کنید که clickhouse-server سقوط نمی کند, رد پای حافظه محدود است و عملکرد در طول زمان تنزل نمی.

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

ساخت تست

تست های ساخت اجازه می دهد تا بررسی کنید که ساخت در تنظیمات مختلف جایگزین و در برخی از سیستم های خارجی شکسته نمی شود. تست ها در واقع ci فهرست راهنما. ساخت از منبع داخل کارگر بارانداز ولگرد و گاهی با اجرا می شوند qemu-user-static در داخل کارگر بارانداز. این تست ها در حال توسعه هستند و تست اجرا می شود خودکار نیست.

انگیزه:

به طور معمول ما انتشار و اجرای تمام تست بر روی یک نوع واحد از ساخت تاتر. اما انواع ساخت جایگزین است که به طور کامل تست شده وجود دارد. مثالها:

  • ساخت در بورس;
  • ساخت در دبیان با کتابخانه ها از بسته های سیستم;
  • ساخت با لینک مشترک از کتابخانه ها;
  • ساخت پلت فرم AArch64;
  • ساخت بر روی پلت فرم پاور.

مثلا, ساخت با بسته های سیستم عمل بد است, چرا که ما نمی تواند تضمین کند که چه نسخه دقیق از بسته های یک سیستم باید. اما این واقعا توسط نگهداری دبیان مورد نیاز است. به همین دلیل ما حداقل باید برای حمایت از این نوع ساخت. مثال دیگر: ارتباط مشترک یک منبع مشترک از مشکل است, اما برای برخی از علاقه مندان مورد نیاز است.

هر چند ما می توانیم تمام تست در همه نوع از ایجاد اجرا کنید, ما می خواهیم برای بررسی حداقل که انواع ساخت های مختلف شکسته نمی. برای این منظور ما از تست های ساخت استفاده می کنیم.

تست برای سازگاری پروتکل

هنگامی که ما گسترش ClickHouse پروتکل شبکه ما تست دستی که clickhouse-مشتری با این نسخهها کار جدید clickhouse-سرور و جدید clickhouse-مشتری با این نسخهها کار با clickhouse-سرور (به سادگی با در حال اجرا فایل های باینری از مربوطه بسته).

کمک از کامپایلر

کد اصلی کلیک (که در واقع dbms فهرست راهنما) با ساخته شده است -Wall -Wextra -Werror و با برخی از هشدارهای اضافی را فعال کنید. اگر چه این گزینه ها برای کتابخانه های شخص ثالث فعال نیست.

کلانگ هشدارهای بیشتری دارد - شما می توانید با -Weverything و انتخاب چیزی به طور پیش فرض ساخت.

برای تولید ساخت, شورای همکاری خلیج فارس استفاده می شود (هنوز تولید کد کمی موثر تر از صدای جرنگ جرنگ). برای توسعه, صدای جرنگ جرنگ است که معمولا راحت تر به استفاده از. شما می توانید بر روی دستگاه خود را با حالت اشکال زدایی ساخت (برای صرفه جویی در باتری لپ تاپ خود را), اما لطفا توجه داشته باشید که کامپایلر قادر به تولید هشدارهای بیشتر با است -O3 با توجه به جریان کنترل بهتر و تجزیه و تحلیل بین روش. هنگام ساخت با صدای جرنگ جرنگ, libc++ به جای استفاده libstdc++ و هنگامی که ساختمان با حالت اشکال زدایی, نسخه اشکال زدایی از libc++ استفاده شده است که اجازه می دهد تا برای گرفتن خطاهای بیشتر در زمان اجرا.

Sanitizers

نشانی ضد عفونی کننده. ما تست های کاربردی و یکپارچه سازی را تحت عنوان بر اساس هر متعهد اجرا می کنیم.

Valgrind (Memcheck). ما یک شبه تست های کاربردی را تحت ارزیابی قرار می دهیم. چند ساعت طول می کشد. در حال حاضر یک مثبت کاذب شناخته شده در وجود دارد re2 کتابخانه را ببینید این مقاله.

تعریف نشده رفتار ضد عفونی کننده. ما تست های کاربردی و یکپارچه سازی را تحت عنوان بر اساس هر متعهد اجرا می کنیم.

ضدعفونی کننده موضوع. ما تست های کاربردی تحت تسان بر اساس هر مرتکب اجرا. ما هنوز تست های ادغام تحت تسان بر اساس هر متعهد اجرا کنید.

ضد عفونی کننده حافظه. در حال حاضر ما هنوز از خانم استفاده نمی کنیم.

اشکال زدایی تخصیص. نسخه اشکال زدایی از jemalloc برای ساخت اشکال زدایی استفاده می شود.

Fuzzing

ریش ریش شدن کلیک هر دو با استفاده از اجرا شده است هرزه و تصادفی گذاشتن نمایش داده شد. تمام تست ریش شدن باید با ضدعفونی کننده انجام شود (نشانی و تعریف نشده).

پازل برای تست ریش ریش شدن جدا شده از کد کتابخانه استفاده می شود. طبع به عنوان بخشی از کد تست اجرا و “_fuzzer” نام پسوند. به عنوان مثال ریش ریش شدن را می توان در یافت src/Parsers/tests/lexer_fuzzer.cpp. تنظیمات-پازل خاص, لغت نامه ها و جسم در ذخیره می شود tests/fuzz. ما شما را تشویق به نوشتن تست ریش ریش شدن برای هر قابلیت که دسته ورودی کاربر.

طبع به طور پیش فرض ساخته شده است. برای ساخت ریش ریش ریش ریش شدن هر دو -DENABLE_FUZZING=1 و -DENABLE_TESTS=1 گزینه ها باید تنظیم شود. ما توصیه می کنیم برای غیر فعال کردن Jemalloc در حالی که ساختمان fuzzers. پیکربندی مورد استفاده برای ادغام ریش ریش شدن تاتر به گوگل اوس فوز را می توان در یافت docker/fuzz.

ما همچنین از تست ریش ریش شدن ساده برای تولید پرس و جو تصادفی ساده استفاده می کنیم و بررسی می کنیم که سرور نمی میرد. شما می توانید این را در 00746_sql_fuzzy.pl. این تست باید به طور مداوم اجرا شود (یک شبه و طولانی تر).

ممیزی امنیتی

مردم از تیم امنیتی یاندکس انجام برخی از بررسی اجمالی اساسی از قابلیت های تاتر از نقطه نظر امنیت.

تجزیه و تحلیل استاتیک

فرار میکنیم PVS-Studio بر اساس هر مرتکب. ما ارزیابی کرده ایم clang-tidy, Coverity, cppcheck, PVS-Studio, tscancode. شما دستورالعمل برای استفاده در پیدا tests/instructions/ فهرست راهنما. همچنین شما می توانید به عنوان خوانده شده مقاله در روسیه.

در صورت استفاده CLion به عنوان محیط برنامه نویسی, شما می توانید اهرم برخی از clang-tidy چک از جعبه.

سخت شدن

FORTIFY_SOURCE به طور پیش فرض استفاده می شود. این تقریبا بی فایده است, اما هنوز هم حس می کند در موارد نادر و ما این کار را غیر فعال کنید.

سبک کد

قوانین سبک کد شرح داده شده است اینجا.

برای بررسی برخی از نقض سبک مشترک, شما می توانید استفاده کنید utils/check-style خط نوشتن.

به زور سبک مناسب از کد خود را, شما می توانید استفاده کنید clang-format. پرونده .clang-format در منابع ریشه واقع شده است. این بیشتر با سبک کد واقعی ما مطابقت دارد. اما توصیه نمی شود که اعمال شود clang-format به فایل های موجود چون باعث می شود قالب بندی بدتر است. شما می توانید استفاده کنید clang-format-diff ابزاری است که شما می توانید در مخزن منبع صدای جرنگ جرنگ پیدا.

متناوبا شما می توانید سعی کنید uncrustify ابزار مجدد کد خود را. پیکربندی در uncrustify.cfg در منابع ریشه. این کمتر از تست شده است clang-format.

CLion فرمت کد خود را دارد که باید برای سبک کد ما تنظیم شود.

تست های متریکا ب2

هر ClickHouse نسخه تست شده با Yandex Metrica و AppMetrica موتورهای. تست و نسخه های پایدار از تاتر در ماشین های مجازی مستقر و اجرا با یک کپی کوچک از موتور متریکا است که پردازش نمونه ثابت از داده های ورودی. سپس نتایج حاصل از دو نمونه از موتور متریکا با هم مقایسه می شوند.

این تست ها توسط تیم جداگانه خودکار می شوند. با توجه به تعداد زیادی از قطعات متحرک, تست شکست بیشتر از زمان به دلایل کاملا نامربوط, که بسیار دشوار است برای کشف کردن. به احتمال زیاد این تست ها ارزش منفی برای ما دارند. با این وجود این تست در حدود یک یا دو بار از صدها مفید ثابت شد.

پوشش تست

تا جولای 2018 ما پوشش تست را پیگیری نمی کنیم.

اتوماسیون تست

ما تست ها را با سیستم اتوماسیون داخلی یاندکس اجرا می کنیم “Sandbox”.

ساخت شغل و تست ها در گودال ماسهبازی در هر مرتکب اساس اجرا شود. نتیجه بسته ها و نتایج تست در گیتهاب منتشر شده و می تواند توسط لینک مستقیم دانلود. مصنوعات ابد ذخیره می شود. هنگامی که شما یک درخواست کشش ارسال در گیتهاب, ما برچسب به عنوان “can be tested” و سیستم سی ما خواهد بسته های تاتر ساخت (رهایی, اشکال زدایی, با نشانی ضد عفونی کننده, و غیره) برای شما.

ما از تراویس سی به دلیل محدودیت در زمان و قدرت محاسباتی استفاده نمی کنیم. ما از جنکینز استفاده نمیکنیم. این قبل از استفاده شد و در حال حاضر ما خوشحال ما با استفاده از جنکینز نیست.

مقاله اصلی