TestRail دارای پلاگین های آماده برای نقص برای ردیاب های رایج اشکال مانند Jira، FogBugz، Bugzilla و ابزارهای دیگر است. اگر ابزار ردیابی اشکال خود را سفارشی کردهاید (مثلاً با افزودن فیلدهای سفارشی) یا اگر میخواهید قابلیتهای اضافی به افزونه نقص اضافه کنید، میتوانید افزونههای نقص داخلی را مطابق با نیازهای خود سفارشی کنید. TestRail شامل کد منبع کامل افزونه های نقص پیش فرض است و این مقاله چند نمونه از سفارشی سازی آنها را ارائه می دهد.
اگر قصد دارید یکی از پلاگین های نقص ارائه شده را سفارشی کنید، توصیه می شود آن را بخوانید ساخت پلاگین نقص سفارشی ابتدا مقاله را به عنوان اطلاعات پس زمینه مهم در مورد عملکرد داخلی پلاگین های نقص ارائه می دهد. لطفاً برای مثالهایی در مورد نحوه اضافه کردن فیلدهای اضافی به زیر مراجعه کنید نقص فشار گفتگو و نحوه پیاده سازی نقشه های کاربر.
افزودن فیلدهای سفارشی #
افزودن یک فیلد جدید به نقص فشار اگر از فیلدهای سفارشی اضافی (الزامی) استفاده می کنید که افزونه های نقص پیش فرض از آن پشتیبانی نمی کنند، گفت و گو می تواند مفید باشد. همچنین ممکن است بخواهید فیلدهای دیگری مانند an را اضافه کنید اختصاص داده شده به در کادر گفتگو و این بخش نحوه انجام این کار را توضیح می دهد. ما در این مثال از افزونه نقص Jira استفاده خواهیم کرد، اما سایر پلاگین های نقص به طور مشابه کار می کنند. قبل از اینکه افزونه نقص Jira را شخصی سازی کنیم، ابتدا افزونه را کپی کرده و نام آن را تغییر می دهیم. ما قصد داریم آن را کپی کنیم Jira.php فایل پلاگین از دایرکتوری برنامه TestRail به دایرکتوری سفارشی:
Original: <TestRail>/app/plugins/defects/Jira.php
Copy To: <TestRail>/custom/defects/Jira_custom.php
توجه کنید که چگونه نام فایل را تغییر دادیم Jira_custom.php. این مهم است، بنابراین شما همچنان می توانید بین پلاگین استاندارد Jira و نسخه سفارشی ما در ناحیه مدیریت TestRail یکی را انتخاب کنید. پس از کپی کردن فایل، باید نام کلاس را تغییر دهیم. برای انجام این کار، به سادگی آن را باز کنید Jira_custom.php در یک ویرایشگر متن قرار دهید و نام کلاس را در ابتدای فایل به صورت زیر تنظیم کنید:
class Jira_custom_defect_plugin extends Defect_plugin
{
}
برای این مثال، میخواهیم یک فیلد جدید به آن اضافه کنیم نقص فشار گفتگویی که به آزمایشکنندگان اجازه میدهد تا پیکربندی سختافزار و نرمافزار دستگاه آزمایشی را که مشکل یا باگ در آن رخ داده است را مشخص کنند. فیلد مربوطه در Jira یک فیلد سفارشی از نوع است فیلد متن و نامیده می شود پیکربندی. این فیلد برای همه انواع موضوع معتبر است و الزامی نیست.
اولین چیزی که باید تغییر دهیم طرحواره فرم است prepare_push روش (حتما بخوانید ساخت پلاگین نقص سفارشی مقاله در صورتی که هنوز آن را نخوانده اید). ما به سادگی یک فیلد رشته جدیدی به گفتگوی خود اضافه می کنیم تا کاربران بتوانند پیکربندی سیستم را برای گزارش اشکال وارد کنند. ما به رشته خودمان می گوییم config و درست قبل از description زمینه:
public function prepare_push($context)
{
// Return a form with the following fields/properties
return array(
'fields' => array(
'summary' => array(
'type' => 'string',
'label' => 'Summary',
'required' => true,
'size' => 'full'
),
'type' => array(
'type' => 'dropdown',
'label' => 'Issue Type',
'required' => true,
'remember' => true,
'size' => 'compact'
),
'project' => array(
'type' => 'dropdown',
'label' => 'Project',
'required' => true,
'remember' => true,
'cascading' => true,
'size' => 'compact'
),
'component' => array(
'type' => 'dropdown',
'label' => 'Component',
'required' => true,
'remember' => true,
'depends_on' => 'project',
'size' => 'compact'
),
'config' => array(
'type' => 'string',
'label' => 'Configuration',
'remember' => true,
'size' => 'full'
),
'description' => array(
'type' => 'text',
'label' => 'Description'
)
)
);
}
هنگامی که فیلد را به طرح فرم اضافه کردیم، می خواهیم آن را اضافه کنیم config میدان به prepare_field روش ما این کار را برای بازیابی پیکربندی به خاطر سپرده شده توسط کاربر که قبلاً در گفتگو وارد کرده انجام می دهیم. به این ترتیب کاربر مجبور نیست برای هر گزارش اشکالی که ارسال می شود پیکربندی را دوباره وارد کند. توجه داشته باشید که چگونه کد مدیریت اولویت را به بالای روش منتقل می کنیم تا از آن برای روش جدید استفاده کنیم config زمینه:
public function prepare_field($context, $input, $field)
{
$data = array();
// Take into account the preferences of the user, but only
// for the initial form rendering (not for dynamic loads).
if ($context['event'] == 'prepare')
{
$prefs = arr::get($context, 'preferences');
}
else
{
$prefs = null;
}
// Process those fields that do not need a connection to the
// Jira installation.
if ($field == 'summary' || $field == 'description' || $field == 'config')
{
switch ($field)
{
case 'summary':
$data['default'] = $this->_get_summary_default(
$context);
break;
case 'description':
$data['default'] = $this->_get_description_default(
$context);
break;
case 'config':
$data['default'] = arr::get($prefs, 'config');
break;
}
return $data;
}
// [ .. ]
}
اکنون که اسکریپت تنظیمات پیکربندی قبلاً وارد شده را بازیابی می کند، آخرین مرحله باقی مانده اضافه کردن فیلد سفارشی جدید به درخواست API است که به Jira ارسال می کنیم (به منظور ایجاد مشکل). ما خودمان را تغییر می دهیم push روش برای این کار به شرح زیر است:
public function push($context, $input)
{
$api = $this->_get_api();
$data = array();
$data['summary'] = $input['summary'];
$data['type'] = $input['type'];
$data['project'] = $input['project'];
$data['component'] = $input['component'];
$data['description'] = $input['description'];
$data['customFieldValues'] = array(
array(
'customfieldId' => 'customfield_10000',
'values' => array($input['config'])
)
);
return $api->add_issue($data);
}
شما باید تنظیم کنید customfield_10000 نام و از شناسه واقعی فیلد(های) سفارشی که می خواهید ارسال کنید استفاده کنید. اکنون که فیلد جدید را به افزونه نقص سفارشی خود اضافه کرده ایم، به روز شده است نقص فشار می توان از گفتگو برای ارسال جزئیات پیکربندی به همراه مشکل استفاده کرد (حتماً جدید را انتخاب کنید جیرا_سفارشی پلاگین در زیر اداره > تنظیمات سایت برای دیدن فیلد جدید).

فایل نمونه کامل را می توانید در زیر دانلود کنید.
نمونه پلاگین نقص سفارشی Jira #
فایل نمونه PHP با کد اسکریپت پلاگین نقص سفارشی Jira
افزودن فیلدهای داخلی #
افزودن فیلدهای داخلی اضافی ردیاب اشکال خود به TestRail نقص فشار تفاوت زیادی با افزودن فیلدهای سفارشی ردیاب اشکال شما همانطور که در بالا توضیح داده شد ندارد. با این حال، از آنجایی که این یک کار بسیار رایج است و برخی API های ردیاب اشکال به قراردادهای خاصی برای فیلدهای خاص نیاز دارند، این بخش نحوه اضافه کردن یک فیلد ردیاب اشکال داخلی اضافی را به افزونه نقص توضیح می دهد.
به طور خاص، این بخش نحوه اضافه کردن را توضیح می دهد نسخه تاثیر می گذارد فیلد Jira، اما سایر ردیابهای اشکال دارای زمینهها و قراردادهای مشابهی هستند. را نسخه تاثیر می گذارد فیلد به عنوان یک فیلد کشویی برای انتخاب نسخه ای که اشکال جدید باید برای آن گزارش شود، اجرا می شود. ما ابتدا پلاگین استاندارد نقص Jira خود را در فهرست سفارشی خود کپی می کنیم و نام آن را تغییر می دهیم:
Original: <TestRail>/app/plugins/defects/Jira.php
Copy To: <TestRail>/custom/defects/Jira_versions.php
همچنین باید نام کلاس را در ابتدای فایل دوباره تنظیم کنیم:
class Jira_versions_defect_plugin extends Defect_plugin
{
}
اولین تغییر واقعی کد شامل افزودن فیلد جدید به طرح فرم است. ما به این رشته می گوییم affects_version:
public function prepare_push($context)
{
// Return a form with the following fields/properties
return array(
'fields' => array(
'summary' => array(
'type' => 'string',
'label' => 'Summary',
'required' => true,
'size' => 'full'
),
'type' => array(
'type' => 'dropdown',
'label' => 'Issue Type',
'required' => true,
'remember' => true,
'size' => 'compact'
),
'project' => array(
'type' => 'dropdown',
'label' => 'Project',
'required' => true,
'remember' => true,
'cascading' => true,
'size' => 'compact'
),
'component' => array(
'type' => 'dropdown',
'label' => 'Component',
'required' => true,
'remember' => true,
'depends_on' => 'project',
'size' => 'compact'
),
'affects_version' => array(
'type' => 'dropdown',
'label' => 'Affects Version',
'required' => false,
'remember' => true,
'depends_on' => 'project',
'size' => 'compact'
),
'description' => array(
'type' => 'text',
'label' => 'Description'
)
)
);
}
برای اینکه واقعاً نسخه موجود برای یک پروژه را از Jira پرس و جو کنیم، میخواهیم یک نسخه جدید اضافه کنیم get_versions متد به کلاس Jira_api:
/**
* Get Versions
*
* Returns a list of versions for a Jira project. The versions
* are returned as array of objects, each with its ID and name.
*/
public function get_versions($project_id)
{
$data = array($project_id);
$response = $this->_send_command('getVersions', $data);
if (!$response)
{
return array();
}
$result = array();
foreach ($response as $version)
{
$c = obj::create();
$c->id = (string) $version->id;
$c->name = (string) $version->name;
$result[] = $c;
}
return $result;
}
ما همچنین باید فیلد کشویی خود را با نسخه های موجود از Jira پر کنیم، بنابراین ما آن را به روز می کنیم prepare_field را متد کنید و کد زیر را به آن اضافه کنید دوم switch بیانیه:
case 'affects_version':
if (isset($input['project']))
{
$data['default'] = arr::get($prefs, 'affects_version');
$data['options'] = $this->_to_id_name_lookup(
$api->get_versions($input['project'])
);
}
break;
آخرین اما نه کماهمیت، ما همچنین باید فیلد نسخه را در زمانی که کاربر گزارش اشکال را ارسال میکند، به Jira فشار دهیم. از آنجایی که Jira از چندین نسخه برای یک مشکل پشتیبانی می کند، باید این فیلد را به صورت آرایه ارسال کنیم. برای این کار کافیست کد زیر را به آن اضافه کنید add_issue روش:
if (isset($options['affects_version']))
{
$version = array(
'id' => $options['affects_version'],
'archived' => false,
'released' => false
);
$options['affectsVersions'] = array(
$version
);
}
وقتی جدید را انتخاب می کنید Jira_version پلاگین نقص در زیر اداره > تنظیمات سایت > یکپارچه سازی زبانه، نقص فشار دیالوگ به شکل زیر است:

فایل نمونه کامل را می توانید در زیر دانلود کنید.
نمونه نسخه های سفارشی Jira #
فایل نمونه PHP با کد اسکریپت سفارشی نسخه های Jira
پیاده سازی نقشه های کاربری #
#
اکنون یک راه آسانتر برای نقشهبرداری از کاربران بین TestRail و ابزار ردیابی اشکال شما بدون ایجاد هیچ تغییری در کد وجود دارد. می توانید در این مورد بیشتر بدانید مقاله متغیرهای کاربر.
افزونههای نقصی که با TestRail ارسال میشوند از یک حساب کاربری برای ارسال گزارشهای اشکال به سیستم شخص ثالث مربوطه استفاده میکنند. این در بسیاری از موقعیت ها به خوبی کار می کند و توصیه می شود یک مورد خاص اضافه کنید آزمایشی کاربر یا مشابه ردیاب اشکال برای این کار.
با این حال، اگر میخواهید از حساب کاربری واقعی ردیاب اشکال از کاربری که گزارش اشکال را ارسال کرده است استفاده کنید، میتوانیم با افزودن نقشه کاربری به افزونه نقص، این کار را اجرا کنیم. برای نشان دادن این موضوع، میخواهیم آن را کپی کرده و نام آن را تغییر دهیم Jira.php دوباره افزونه:
Original: <TestRail>/app/plugins/defects/Jira.php
Copy To: <TestRail>/custom/defects/Jira_users.php
و همچنین می خواهیم نام کلاس افزونه نقص را به روز کنیم:
class Jira_users_defect_plugin extends Defect_plugin
{
}
برای افزودن قابلیتهای نگاشت کاربر به اسکریپت، میخواهیم قابلیت جدیدی را اضافه کنیم [users] بخشی به پیکربندی که به مدیران اجازه میدهد تا نقشهای را بین کاربر TestRail (که با آدرس ایمیل کاربر مشخص میشود) و اعتبار ورود به ابزار ردیابی نقص پیکربندی کنند. به عنوان مثال، پیکربندی در ناحیه مدیریت به شکل زیر است:
; Please configure your Jira connection below
[connection]
address=http://jira/
user=testrail
password=secret
[users]
bob@example.com=bob:secret
jim@example.com=jim:secret
jane@example.com=jane:secret
هنگامی که باب گزارش اشکال را ارسال می کند، اسکریپت نقص به روز شده از اعتبار Bob’s Jira برای ارسال باگ استفاده می کند. اگر کاربری که اعتبارنامههایش هنوز پیکربندی نشده است سعی کند گزارش اشکال ارسال کند، اسکریپت به لاگین پیکربندی جهانی (مشخص شده در [connection] بخش). ما قصد داریم به روز رسانی get_meta روش برای نمایش گزینه های پیکربندی جدید ما:
private static $_meta = array(
'author' => 'Gurock Software',
'version' => '1.0',
'description' => 'Jira defect plugin for TestRail',
'can_push' => true,
'can_lookup' => true,
'default_config' =>
'; Please configure your Jira connection below
[connection]
address=http:///
user=testrail
password=secret
[users]
user@example.com=user:secret'
);
و همچنین روش پیکربندی را برای تخصیص به روز می کنیم [users] بخش به یک زمینه داخلی:
public function configure($config)
{
$ini = ini::parse($config);
$this->_address = str::slash($ini['connection']['address']);
$this->_user = $ini['connection']['user'];
$this->_password = $ini['connection']['password'];
if (isset($ini['users']))
{
$this->_users = $ini['users'];
}
else
{
$this->_users = array();
}
}
مورد بعدی که باید تغییر دهیم، احراز هویت واقعی Jira API است. برای انجام این کار باید کد نگاشت کاربر خود را به آن اضافه کنیم _get_api روشی مانند این:
private function _get_api($context = null)
{
if ($this->_api)
{
return $this->_api;
}
$user = $this->_user;
$password = $this->_password;
// Find the appropriate Jira user for the bug reporter
// (by mapping the current TestRail user to her Jira
// account).
if ($context && $this->_users)
{
$credentials = arr::get(
$this->_users,
str::to_lower($context['user']->email)
);
if ($credentials)
{
if (preg_match('/([^:]+):(.+)/', $credentials, $matches))
{
$user = $matches[1];
$password = $matches[2];
}
}
}
$this->_api = new Jira_api($this->_address);
$this->_api->login($user, $password);
return $this->_api;
}
این روش سعی می کند اعتبار کاربری مربوطه کاربر فعلی را در پیکربندی پیدا کند. اگر نتواند اعتبارنامه ها را پیدا کند، از اعتبارنامه های پیکربندی جهانی به عنوان بازگشت استفاده می کند. توجه داشته باشید که چگونه ما را اضافه کرده ایم $context استدلال به _get_api روش برای دریافت آدرس ایمیل کاربر فعلی TestRail به این آرگومان نیاز داریم.
اکنون فقط باید از آن عبور کنیم $context متغیر از prepare_field و push روش هایی مانند این (لطفا توجه داشته باشید که نباید آن را اضافه کنید $context استدلال در lookup روش، زیرا هیچ اطلاعات زمینه ای ندارد):
$api = $this->_get_api($context);
همین است. اکنون که نقشه کاربری را به آن اضافه کردیم _get_api روش و همچنین اطلاعات زمینه را به این روش منتقل کرد، تنها کاری که باید انجام دهید این است که افزونه نقص جدید خود را در زیر انتخاب کنید اداره > تنظیمات سایت و حساب های کاربری را پیکربندی کنید.
جایگزین نقشه برداری کاربر #
#
اکنون یک راه آسانتر برای نقشهبرداری از کاربران بین TestRail و ابزار ردیابی اشکال شما بدون ایجاد هیچ تغییری در کد وجود دارد. می توانید در این مورد بیشتر بدانید مقاله متغیرهای کاربر.
برخی از ردیابهای مشکل و نقص به شما امکان میدهند کاربر گزارشگر را از طریق API تنظیم کنید. به این ترتیب لزوماً نیازی به پیاده سازی نقشه کامل کاربر از طریق لاگین ندارید، بلکه می توانید به سادگی نام کاربری کاربری که مشکل را گزارش کرده است را مشخص کنید.
برای مثال، فرض کنید آدرسهای ایمیل سازمان شما و نامهای کاربری Jira مربوطه به این شکل هستند:
bob@example.com -> bob
jan@example.com -> jan
sue@example.com -> sue
سپس به سادگی می توانید نام کاربری Jira را از آدرس ایمیل کاربر فعلی بسازید و آن را مشخص کنید reporter میدان در push روشی مانند این:
public function push($context, $input)
{
if (isset($context['user']->email))
{
$email = $context['user']->email;
$pos = str::pos($email, '@');
if ($pos !== false)
{
$input['reporter'] = str::sub($email, 0, $pos);
}
}
$api = $this->_get_api();
return $api->add_issue($input);
}
به این ترتیب کاربری که مشکل را گزارش کرده است بدون نیاز به ذخیره نام کاربری و رمز عبور کاربر Jira در TestRail به درستی به Jira ارسال می شود. بسته به قابلیت های API ارائه شده، سایر ابزارهای ردیابی مشکل و نقص نیز ممکن است از این پشتیبانی کنند.

