بیشتر تیمهایی که تستهای خودکارشان را با TestRail یکپارچه میکنند، این تستها را خارج از TestRail اجرا میکنند؛ برای مثال، بهعنوان بخشی از یک سیستم continuous integration، و از TestRail API برای ارسال نتایج test استفاده میکنند. با این حال، بعضی تیمها ترجیح میدهند سیستمی داشته باشند که test runها را مستقیماً از داخل TestRail اجرا کند. این راهنما با مثالهای عملی و با استفاده از UI scriptها.
#
توجه داشته باشید که این راهنما شامل مثالهای قابل اجراست، اما برای درک scriptها و توسعه بیشتر آنها، به دانش پایه PHP و همچنین توسعه وب، یعنی HTML، CSS و JS، نیاز دارید. این محتوا بهتنهایی جایگزین آن دانش نمیشود.
سادهسازی اتوماسیون تست با TestRail #
نمودار زیر workflow اصلی یکپارچهسازی تستهای خودکار با TestRail را، از مرحله اجرا تا گزارش نتایج، نشان میدهد:

با استفاده از UI scriptها میتوانید یک دکمه جدید به UI در TestRail اضافه کنید تا test runهای خودکار را اجرا کند. با کلیک روی این دکمه، یک درخواست HTTP به executor ارسال میشود و executor تستهای خودکار را اجرا میکند. سپس خود script یا framework اتوماسیون تست، نتایج test را از طریق TestRail API.
#
اگر framework اتوماسیون تست شما از تولید گزارشهای JUnit-style پشتیبانی میکند، پیشنهاد میکنیم از TestRail CLI استفاده کنید. با یک خط کد در shell script خود، میتوانید نتایج test را بهسادگی parse کرده و به TestRail ارسال کنید.
افزودن UI scriptها به TestRail #
UI scriptها به شما اجازه میدهند TestRail GUI را مثل یک web developer و با HTML، CSS و JS سفارشی کنید؛ یعنی میتوانید تقریباً هر عنصر UI را اضافه کنید و هر عملی را که معمولاً هنگام توسعه یک صفحه وب اجرا میکنید، trigger کنید.
برای افزودن یک UI script، در بخش مدیریت TestRail به مسیر Admin > Customizations > Add UI Script بروید و کل UI script را بهسادگی در Configuration text box کپی و paste کنید. در مثالهای زیر، نمونههایی از UI scriptها را میبینید که میتوانید از آنها استفاده کنید. اما اگر میخواهید یاد بگیرید چطور script سفارشی خودتان را توسعه دهید یا این نمونهها را بیشتر سفارشی کنید، به صفحه مستندات UI scriptها.

مثال ۱: یکپارچهسازی Jenkins #
در این مثال، یک integration با Jenkins را به پنل سمت راست صفحه Test Runs & Results اضافه میکنیم تا نتایج جدیدترین jobهای تست خودکار را ببینیم و بتوانیم آنها را مستقیماً از TestRail اجرا کنیم. توجه داشته باشید که این مثال فقط trigger کردن و دریافت buildها از Jenkins را پوشش میدهد. اگر میخواهید نتایج test شما بهعنوان test run به TestRail گزارش شود، باید Jenkins job خود را طوری پیکربندی کنید که نتایج را به روشی به TestRail برگرداند؛ برای مثال، با استفاده از TestRail CLI. برای اطلاعات بیشتر و یک مثال عملی، میتوانید مستندات یکپارچهسازی با Jenkins را ببینید که نشان میدهد چطور TestRail CLI را برای استفاده در Jenkins پیکربندی کنید.
source code این مثال در GitHub در دسترس است:
UI script مربوط به Jenkins Builds #
مخزن GitHub شامل UI script یکپارچهسازی Jenkins، تستشده روی TestRail v7.۵.۴
پیکربندی Jenkins #
برای اینکه TestRail UI بتواند مستقیماً به Jenkins instance شما درخواست بفرستد، باید CORS (Cross-origin resource sharing) را در سمت Jenkins فعال کنید. این کار معمولاً ریسک امنیتی محسوب میشود، اما با رعایت احتیاطهای لازم میتوانید از این سازوکار استفاده کنید تا TestRail بدون افزایش ریسک، به دادههای Jenkins jobهای شما دسترسی داشته باشد. برای این کار، طبق مراحل زیر CORS را فقط برای دامنه قابلاعتماد TestRail خود مجاز کنید.
- به مسیر Manage Jenkins > Plugin Manager بروید و افزونهی زیر را جستوجو و نصب کنید: CORS support for Jenkins plugin
- به مسیر Manage Jenkins > Configure System
-
بروید. در پایین صفحه، در بخش CORS Filter پارامترهای لازم را وارد کنید
- روی Save کلیک کنید تا تغییرات اعمال شوند
UI script #
همانطور که گفته شد، UI script یک بخش یکپارچهسازی Jenkins به پنل سمت راست اضافه میکند. میتوانید این بخش را طوری تنظیم کنید که jobهای تست خودکار شما، یا هر job دیگری که بخواهید، نمایش داده شوند.
در این پنل، بخش جدیدی با نام Automated Test Triggers نمایش داده میشود و درست زیر آن، jobهایی قرار دارند که برای دریافت اطلاعاتشان پیکربندی شدهاند. برای هر job یک دکمه trigger وجود دارد که یک build جدید را شروع میکند و همچنین لینک ۳ build آخر را نشان میدهد. رنگ هر لینک وضعیت build را مشخص میکند: در این مثال قرمز یعنی شکست، سبز یعنی موفقیت، و آبی یعنی build هنوز در حال اجراست.

jobهایی که نمایش داده میشوند، در ابتدای UI script پیکربندی میشوند؛ همان جایی که متغیرهای پیکربندی تعریف شدهاند، مثل مثال زیر. مقدار name برای هر job میتواند هر چیزی باشد و مقدار path مسیر نسبیای است که وقتی در Jenkins به آن job میروید، در مرورگر خود میبینید.
#
میتوانید credentials مربوط به Jenkins، یعنی username و key را وارد کنید، اگر به همه کاربران TestRail در سازمانتان کاملاً اعتماد دارید. اما توجه داشته باشید که این کار ریسک امنیتی دارد، چون UI script و credentials بهصورت plain text در مرورگر در دسترس خواهند بود. توصیه میکنیم مقدار این متغیرها را null بگذارید و اجازه دهید کاربران credentials خودشان را از طریق UI تنظیم کنند.
/* CONFIG */
const host = "JENKINS_URL";
const username = null; // Enter username and key only if you fully trust your organization members as this may pose a security risk
const key = null; // Generate an API key on your Jenkins user account
const requestInterval = 10000; // Time between requests to Jenkins
const project = "PROJECT NAME"; // Name of the project to load the triggers for (use value null to enable for all projects)
const jobs = [ // Sample jobs config
{
"name": "Run Desktop Tests",
"path": "job/Desktop%20Automated%20Tests"
},
{
"name": "Run Mobile Tests",
"path": "job/Mobile%20Automated%20Tests"
}
];
مثال ۲: اجرای اسکریپتهای سمت سرور #
در این مثال، از یک UI script برای اضافه کردن دکمهای جدید به رابط کاربری TestRail استفاده میشود و یک اسکریپت سمت سرور تستهای خودکار را اجرا میکند. در این حالت، تستها در سطح test run اجرا میشوند، اما میتوان آن را تغییر داد تا از test planها یا فقط تستهای تکی هم پشتیبانی کند.
کد منبع این مثال در GitHub در دسترس است. نسخهای را انتخاب کنید که با نسخه TestRail شما سازگار است:
نمونه trigger کردن test run (TestRail ۴.x) #
مخزن GitHub شامل UI script و اسکریپت سمت سرور برای TestRail ۴.x
نمونه trigger کردن test run (TestRail ۳.x) #
مخزن GitHub شامل UI script و اسکریپت سمت سرور برای TestRail ۳.x
اسکریپت trigger #
اگر از TestRail Server استفاده میکنید، اسکریپت trigger trigger.php باید در دایرکتوری نصب TestRail روی وبسرور، کنار فایل index.php فایل. اگر میخواهید از مسیر دیگری استفاده کنید، باید URL را هم در UI script متناسب با همان مسیر تغییر دهید.
مرحله بعد این است که تنظیمات زیر را برای API در TestRail پیکربندی کنید:
define('TESTRAIL_API_ADDRESS', 'http:///testrail');
define('TESTRAIL_API_USER', 'user@example.com');
define('TESTRAIL_API_PASSWORD', '***');
در این اسکریپت مقدار زیادی کد boilerplate وجود دارد؛ برای مثال برای مدیریت آرگومانهای اسکریپت و ارسال نتیجههای تست به API در TestRail. بخش مهم، تابع زیر است:
function execute_test($run_id, $case_id, $test_id)
{
..
}
این تابع باید automated testها را برای یک test run و test case مشخص اجرا کند و یک status ID معتبر از TestRail برگرداند. در این مثال، تابع فقط یک status ID تصادفی برمیگرداند؛ اما در پیادهسازی واقعی میتوانید تستها را با فراخوانی ابزارهای command line خارجی، یک API خارجی یا روشهای مشابه اجرا کنید.
#
میتوانید از trigger script همراه با حساب TestRail Cloud هم استفاده کنید. کافی است server-side trigger script را روی سروری قرار دهید که میخواهید تستها روی آن اجرا یا شروع شوند؛ معمولاً این سرور داخل شبکه خصوصی شماست. لازم نیست TestRail بتواند به سرور شما وصل شود، چون ارتباط بین آنها از طریق UI script در TestRail و مرورگر وب شما برقرار میشود. همچنین میتوانید server-side script را با هر زبان برنامهنویسی دیگری بنویسید؛ اسکریپت ما فقط یک نمونه است.
#
server-side script نمونه، مکانیزمی برای احراز هویت درخواستهای اسکریپت ندارد. بنابراین قبل از استفاده از آن روی سرور production، بهخصوص سروری که از طریق اینترنت در دسترس است، مطمئن شوید همه دسترسیها به اسکریپت واقعاً احراز هویت میشوند. سادهترین راه این است که HTTP authentication را برای اسکریپت در وبسرور خود فعال کنید و کد JavaScript را طوری تغییر دهید که اطلاعات ورود را در همه HTTP callها ارسال کند.
UI script #
برای اینکه دکمه UI در TestRail instance شما در دسترس باشد، کافی است طبق توضیح بخش قبل، یک UI script جدید با محتوای trigger.ui فایل اضافه کنید. پس از اضافه کردن اسکریپت، باید یک دکمه جدید با عنوان Start Tests در toolbar هر صفحه test run ببینید.

با کلیک روی این دکمه، مطابق قطعه کد jQuery زیر، یک درخواست HTTP به اسکریپت PHP سمت سرور ارسال میشود. توجه کنید که میتوانید به context variableهای صفحهای که UI script در آن بارگذاری شده است دسترسی داشته باشید؛ برای مثال uiscripts.context.run.id.
$.ajax({
url: "trigger.php?run_id=" + uiscripts.context.run.id,
dataType: "json",
type: "POST",
success: function()
{
location.reload();
},
error: function()
{
App.Dialogs.error('An error occurred while trying to trigger the automated tests.');
}
});
نکات نهایی #
با استفاده از رویکردهایی مشابه موارد بالا، میتوانید اسکریپتهایی برای یکپارچهسازی با ابزارهای مختلف مانند GitHub Actions، GitLab CI، Travis CI و غیره پیادهسازی کنید. با این حال، هنگام طراحی این نوع integration با UI scriptها، همیشه ریسکهای امنیتی را در نظر بگیرید و مطمئن شوید میتوانید policyهایی مانند CORS را در ابزار خارجی مدیریت کنید؛ در غیر این صورت باید از server-side scriptها استفاده کنید.
همچنین میتوانید با ایجاد یک PR شامل کد خود، در مجموعه UI scriptهای ارسالشده توسط کاربران مشارکت کنید. لطفاً دستورالعملهای کلی را در مخزن GitHub سفارشیسازیهای TestRail ببینید.

