Jenkins یک سرور اتوماسیون متنباز پیشرو است که صدها plugin برای پشتیبانی از build، deploy و خودکارسازی هر project ارائه میدهد. از Jenkins میتوانید بهعنوان یک سرور CI ساده استفاده کنید، یا آن را به مرکز continuous delivery برای هر project تبدیل کنید. راهاندازی و پیکربندی آن هم از طریق رابط وب بهسادگی انجام میشود.
یک کاربرد رایج Jenkins این است که هر بار تغییرات code ثبت میشود، application شما build و test شود. برای استفاده بهتر از TestRail و مدیریت همه test caseها و test resultها، چه دستی و چه automated، میتوانید test resultهای automated خود را مستقیم از Jenkins به TestRail ارسال کنید. در این مقاله بررسی میکنیم چطور میتوانید از Jenkins freestyle projectها و TestRail CLI برای انجام سادهتر این کار استفاده کنید.
#
لطفاً توجه کنید که TestRail CLI نیاز دارد که یک JUnit report سازگار توسط framework اتوماسیون تست شما تولید شود.
در این مثال از Jenkins بههمراه GitHub و Pytest استفاده میکنیم.
پیشنیازها #
#
دستورالعملهای این مقاله با این فرض نوشته شدهاند که از یک Jenkins agent استفاده میکنید که Python ۳.۱۰ روی آن نصب است و میتوانید آن را از shell خود با alias python3.10 اجرا کنید. اگر Jenkins instance شما از قبل درست پیکربندی شده است، میتوانید به بخش بعدی بروید.
اگر میخواهید برای دنبال کردن مراحل، سریع یک Jenkins instance راهاندازی کنید، میتوانید Dockerfile زیر را که بر پایه Docker image رسمی Jenkins است، build کنید و با دستورالعملهای زیر اجرا کنید:
-
محتوای زیر را در فایلی به نام Dockerfile ذخیره کنید
FROM jenkins/jenkins:lts USER root RUN apt-get update RUN apt-get install -y \ build-essential \ zlib1g-dev \ libncurses5-dev \ libgdbm-dev \ libnss3-dev \ libssl-dev \ libreadline-dev \ libffi-dev \ libsqlite3-dev \ wget \ libbz2-dev RUN wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz && \ tar -xvf Python-3.10.0.tgz && \ cd Python-3.10.0 && \ ./configure --enable-optimizations && \ make -j 2 && \ make altinstall && \ python3.10 --version USER jenkins - command line را در همان مسیری باز کنید که فایل را در آن ذخیره کردهاید
-
دستورهای زیر را اجرا کنید
docker build -t jenkins:local . docker run -p 8080:8080 -p 50000:50000 jenkins:local - کلید نمایشدادهشده در console را کپی کنید و http://localhost:۸۰۸۰ را در مرورگر خود باز کنید
- راهنمای نصب را دنبال کنید
ایجاد یک Jenkins job جدید #
-
Jenkins instance خود را باز کنید و روی New Item

-
کلیک کنید. سپس نام New Item را وارد کنید، Freestyle project را انتخاب کنید و روی OK کلیک کنید

راهاندازی Git repository #
در این مثال از یک Git repository برای دریافت project تستهای automated استفاده میکنیم. در این مورد، یک sample project را از GitHub project خودمان به کار میبریم یکپارچهسازی-با-فریمورکهای-اتوماسیون.
- در بخش Source Code Management ، ابتدا گزینه Git
- را انتخاب کنید. سپس مقدار Repository URL را وارد کنید (در مثال ما،
https://github.com/gurock/automation-frameworks-integration.git). - مقدار Branch Specifier را تنظیم کنید (در مثال ما،
*/main).

پیکربندی مرحله build #
-
در بخش Build ، از منوی کشویی Add build step استفاده کنید و یک مرحله Execute shell اضافه کنید.

-
در مرحله Execute shell ، در فیلد Command ، اسکریپتی را وارد کنید که دستورهای لازم برای کارهای زیر را اجرا میکند:
- آمادهسازی محیط
- اجرای project تستها
- آپلود نتایج تست با استفاده از TestRail CLI

مرور بخشهای shell script #
در ادامه، یک نسخه از اسکریپتی که بالاتر استفاده شد همراه با توضیح کوتاه هر بخش آمده است.
# Go to test project folder
cd samples/python/pytest
# Setup virtual environment
python3.10 -m venv ./venv
. ./venv/bin/activate
# Install and run test project
pip install -r requirements.txt
pytest --junitxml "reports/junit-report.xml" "./tests" || pytest_exit_code=$?
# Install TestRail CLI and upload test results
pip install trcli
trcli -y \
-h "https://INSTANCE.testrail.io" \
-u "USER_EMAIL" \
-p "API_TOKEN" \
--project "PROJECT NAME" \
parse_junit \
--title "Automated Test Run" \
--run-description "CI Build: ${BUILD_URL}" \
-f "reports/junit-report.xml"
# Exit with Pytest exit code
exit $pytest_exit_code
# Go to test project folder #
اسکریپت با رفتن به پوشه اصلی Pytest sample project شروع میشود؛ این پوشه شامل project تستهای خودکاری است که میخواهیم اجرا کنیم.
# Setup virtual environment #
مرحله بعدی، ساخت یک Python virtual environment مخصوص همین project است. این کار روش خوبی است تا مطمئن شوید همیشه از یک محیط پایه ثابت شروع میکنید. بعد از ساخت virtual environment، باید آن را فعال کنید؛ یعنی shell شما بهجای Python نصبشده بهصورت global، از همین محیط استفاده میکند.
# Install and run test project #
بعد از فعال کردن virtual environment، میتوانید project تستهای Pytest را مستقیماً نصب و اجرا کنید. به --junitxml "reports/junit-report.xml" این گزینه توجه کنید؛ این گزینه به Pytest دستور میدهد یک گزارش با فرمت JUnit بسازد تا TestRail CLI. برای جزئیات بیشتر، مستندات مربوط به یکپارچهسازی با Pytest را ببینید. نکتهی دیگر در این اسکریپت، وجود || pytest_exit_code=$? بعد از دستور pytest است. این عبارت به shell میگوید حتی اگر testها fail شدند ادامه دهد؛ چون Pytest در این حالت یک failure exit code برمیگرداند و در حالت عادی کل اجرای job را متوقف میکرد. در ادامه، اسکریپت را با pytest_exit_code خارج میکنیم تا build بر اساس نتایج testها pass یا fail شود. برای رسیدن به این رفتار، راهها و pluginهای مختلفی وجود دارد، اما این روش سادهترین گزینه برای هدف این مثال است.
# Install TestRail CLI and upload test results #
اگر اجرای test با موفقیت تمام شده باشد، چه testهای fail شده وجود داشته باشند چه نه، حالا باید یک report با فرمت JUnit داشته باشید تا بتوانید نتایج را در TestRail آپلود کنید. برای این کار، کافی است TestRail CLI را با استفاده از pip نصب کنید و سپس آن را با مشخصات instance خود در TestRail اجرا کنید. باید placeholderهای مربوط به -h ، -u ، -p و --project را جایگزین کنید. نکتهی کوچک اما مفید دیگر در trcli در این اسکریپت، گزینهی --run-description "CI Build: ${BUILD_URL}" است. این گزینه URL مربوط به build فعلی Jenkins را به test run شما در TestRail اضافه میکند تا بتوانید بهراحتی به آن برگردید. بهعنوان توصیهی آخر، password یا API token خود را مستقیم داخل اسکریپت ننویسید؛ از Jenkins credentials manager استفاده کنید.
# Exit with Pytest exit code #
همانطور که پیشتر گفتیم، در پایان اسکریپت با همان exit code اصلی Pytest خارج میشویم؛ این کد نتیجهی اجرای واقعی testهای خودکار را به Jenkins اعلام میکند.
اجرای job #
-
بعد از ذخیره کردن job با تنظیمات بالا، وقت اجرای آن است. برای این کار، کافی است در پنل سمت چپ روی Build Now کلیک کنید.

-
بعد از پایان job، میتوانید با بررسی logها در صفحهی Console Output مربوط به build ببینید که اسکریپت طبق انتظار اجرا شده است. اگر اجرای test بدون مشکل تمام شده باشد، TestRail CLI درست پیکربندی شده باشد و report نتایج test با فرمت JUnit را در مسیر موردنظر پیدا کرده باشد، در logها میبینید که نتایج test را به instance شما در TestRail ارسال کرده است.

-
در نهایت، اگر instance خود را در TestRail باز کنید و به بخش Test Runs و & Results بروید، باید اجرای تازهساختهشدهای با نام Automated Test Run را پیدا کنید و نتایج test خود را همراه با لینک build مربوط به Jenkins job که این test run را ایجاد کرده است ببینید.

قدم بعدی چیست؟ #
حالا که نتایج testهای خود را در TestRail متمرکز کردهاید، علاوه بر بررسی نتایج automated test runها و پیامهای خطای testهای fail شده، میتوانید فعالیتهای testing دستی و خودکار را در reportهایی کنار هم بیاورید که test coverage کامل اپلیکیشن شما را نشان میدهند و حتی پیشرفت test automation را دنبال میکنند. همچنین همانطور که برای نتایج testهای دستی انجام میدهید، میتوانید bug را مستقیماً از نتیجهی automated test در issue tracker دلخواه خود ثبت کنید.
برای آشنایی بیشتر، میتوانید ویدیوی Reports and Test Metrics در TestRail را ببینید تا یاد بگیرید چطور از قابلیتهای reporting در TestRail استفاده کنید.








