ادغام Jira با Selenium

چگونه می توان Jira را با Selenium ادغام کرد؟

چگونه می توان Jira را با Selenium ادغام کرد؟

Selenium یکی از محبوب ترین فریم ورک های تست خودکار سازی در جهان است. Selenium Webdriver برای تست خودکار سازی توسط tester ها یا تست کنندگان در تیم ها و سازمان ها و به دلایل خوب استفاده می شود.

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

در واقع می توان گفت این ویژگی منحصر به فرد باعث متمایز شدن Selenium نسبت به همه فریم ورک های مدرن شده است.

با توجه به اینکه Jira یکی دیگر از محبوب ترین ابزارهای ردیابی مشکلات و مدیریت پروژه است، معمولا زیاد توسط تیم های توسعه و تست Agile استفاده می شود، معمولا برای تست کنندگان استفاده از Selenium با Jira برای کارایی بیشتر و نتایج دقیق تر است.

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

 

Jira چیست ؟

 

جیرا (Jira) ابزاری است که در درجه اول برای ردیابی مسائل (issue tracking) و باگ ها استفاده می شود. همچنین از ویژگی های زیادی در مدیریت پروژه برای انواع موارد استفاده میکند. علاوه بر آن از الزامات و مدیریت آپشن های تست گرفته تا توسعه نرم افزار Agile، پشتیبانی می کند.

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

جیرا علاوه بر موارد بالا، نقاط پایانی Rest API را ارائه می دهد که با استفاده از آنها تست کنندگان می توانند چندین کار را با ایجاد ایشو (issue)، تعیین ایشو، جستجوی ایشو و غیره را به صورت خودکار انجام دهند. بنابراین، اگر QA ها از خودکارسازی تست Selenium استفاده کنند، می توانند مستقیما با استفاده از نقاط پایانی Jira API بدون نیاز به مداخلات دستی، در جیرا ایشو ثبت کنند.

در ادامه نحوه ایجاد API Tokens، نحوه استفاده از Jira API و نحوه ایجاد مشکلات با Selenium را بررسی خواهیم کرد.

 

نحوه ایجاد API Token در Jira

 

 

Jira API token ها به کاربر اجازه می دهد تا با برنامه های ابری احراز هویت کند و تایید دو مرحله ای و SSO را دور بزند تا داده ها را از طریق API های REST بازیابی کند. ادمین ها می توانند استفاده از API توکن ها را توسط حساب های مدیریت شده خود را مشاهده و در صورت نیاز لغو کنند.

اساسا، با استفاده از توکن دسترسی و نام کاربری، تست کنندگان می توانند Selenium و Jira را به هم متصل کنند.

 

مراحل ایجاد API token در جیرا :

 

  1. وارد وب سایت اصلی Jira شوید.
  2. در سایت یک حساب کاربری ایجاد کنید.
  3. در اکانت خود بر روی Profile and Settings کلیک کنید.
  4. سپس بر روی Account Setting کلیک کنید.

 

 

  1. بر روی Security کلیک کنید و سپس گزینه Create and manage API tokens را انتخاب کنید.

 

 

  1. در بخش API Tokens بر روی Create API Token کلیک کنید.

 

 

  1. Label مورد نظر را وارد کنید و بر روی Create کنید.

 

 

  1. پس از ایجاد توکن، آن را کپی کرده و در محل مورد نظر ذخیره کنید.

 

با پیروی از دستورالعمل های گام به گام، کاربران می توانند یک API Token در Jira ایجاد کنند که می تواند برای فراخوانی نقطه پایانی Jira REST API در بعضی از بخش های یکپارچه Selenium Jira استفاده شود.

 

نحوه اتصال Selenium با Jira و عیب های ورود به سیستم در جیرا با استفاده از Selenium

 

قبل از شروع عملیات اتصال Selenium با Jira نیاز به یک سری پیش نیاز هاست:

  1. از قبل EClipse IDE نصب شده باشد.
  2. Maven Project Set Up، از قبل موجود باشد.

پس از اینکه از نصب بودن و در حال اجرا بودن موارد بالا اطمینان حاصل کردید، نوبت به بررسی نحوه ادغام Jira با Selenium و عیب های ورود به سیستم می رسد.

گام اول : افزودن Dependency های مورد نیاز در pom.xml

برای ادغام Jira با Selenium، می توانید به سادگی از rcarz Jira-client استفاده کنید. rcarz Jira-client یک بسته بندی است که در بالای برنامه Jira Rest Api Client ساخته شده است.

 

در پروژه خود به pom.xml بروید و dependency های زیرا اضافه کنید:

<dependency>

<groupId>net.rcarz</groupId>

<artifactId>Jira-client</artifactId>

<version>0.5</version>

<scope>compile</scope>

</dependency>

گام دوم : ایجاد تست های اولیه با استفاده از Selenium و جاوا

 

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

تست های زیر تحت پکیج com.demo.project ایجاد شده است.

 

 

سورس کد : HomePageTest.java

 

// HomePageTest.java

package com.demo.project;

import static org.testng.Assert.assertEquals;

import static org.testng.Assert.assertTrue;

import java.io.File;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;

import org.testng.annotations.AfterClass;

import org.testng.annotations.BeforeClass;

import org.testng.annotations.Test;

import com.demo.utility.JiraCreateIssue;

public class HomePageTest {

private WebDriver driver;

private String baseUrl;

@BeforeClass(alwaysRun = true)

public void setUp() throws Exception {

File chromedriverExecutable = new File(“driver/chromedriver.exe”);

System.setProperty(“webdriver.chrome.driver”, chromedriverExecutable.getAbsolutePath());

driver = new ChromeDriver();

baseUrl = “https://www.browserstack.com/”;

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

}

//Custom annotation explained in following sections

@JiraCreateIssue(isCreateIssue=true)

@Test

public void verifyHomepageHeaderText() throws Exception {

driver.get(baseUrl);

WebElement el = driver.findElement(By.xpath(“//h1[1]”));

assertEquals(el.getText(), “Browser Testing Made Easy”,”Wrong header text displayed in Home page”);

}

@JiraCreateIssue(isCreateIssue=true)

@Test

public void verifyHomePageLogo() throws Exception {

driver.get(baseUrl);

WebElement el = driver.findElement(By.id(“logo”));

assertTrue(el.isDisplayed(),”The browserstack logo not displaying in home page”);

}

@AfterClass(alwaysRun = true)

public void tearDown() throws Exception {

driver.quit();

}

}

 

مثال :

 

 

گام سوم : ایجاد یک ابزار برای رسیدگی به Jira issue

 

  1. ایجاد یک پکیج در پوشه اصلی com.demo.utility که شامل دو کلاس زیر باشد:

 

 

سورس کد : JiraServiceProvider.java

 

// JiraServiceProvider.java

package com.demo.utility;

import net.rcarz.Jiraclient.BasicCredentials;

import net.rcarz.Jiraclient.Field;

import net.rcarz.Jiraclient.Issue;

import net.rcarz.Jiraclient.Issue.FluentCreate;

import net.rcarz.Jiraclient.JiraClient;

import net.rcarz.Jiraclient.JiraException;

public class JiraServiceProvider {

private JiraClient Jira;

private String project;

private String JiraUrl;

public JiraServiceProvider(String JiraUrl, String username, String password, String project) {

this.JiraUrl=JiraUrl;

// create basic authentication object

BasicCredentials creds = new BasicCredentials(username, password);

// initialize the Jira client with the url and the credentials

Jira = new JiraClient(JiraUrl, creds);

this.project = project;

}

public void createJiraIssue(String issueType, String summary, String description, String reporterName) {

try {

//Avoid Creating Duplicate Issue

Issue.SearchResult sr = Jira.searchIssues(“summary ~ \””+summary+”\””);

if(sr.total!=0) {

System.out.println(“Same Issue Already Exists on Jira”);

return;

}

//Create issue if not exists

FluentCreate fleuntCreate = Jira.createIssue(project, issueType);

fleuntCreate.field(Field.SUMMARY, summary);

fleuntCreate.field(Field.DESCRIPTION, description);

Issue newIssue = fleuntCreate.execute();

System.out.println(“********************************************”);

System.out.println(“New issue created in Jira with ID: ” + newIssue);

System.out.println(“New issue URL is :”+JiraUrl+”/browse/”+newIssue);

System.out.println(“*******************************************”);

} catch (JiraException e) {

e.printStackTrace();

}

}

}

 

سورس کد : JiraCreateIssue.java

 

// JiraCreateIssue.java

package com.demo.utility;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Retention;

@Retention(RetentionPolicy.RUNTIME)

public @interface JiraCreateIssue {

boolean isCreateIssue();

}

 

گام چهارم : ایجاد Listener برای اطلاع از شکست های تست ها

 

یک شنونده ایجاد کنید تا هر بار که یک آزمایش شکست می خورد ، به طور خودکار روش شماره Jira را ایجاد کند. این شنونده خطاهای آزمایش را پیگیری می کند و کد مشخصی را اجرا می کند.

 

 

سورس کد : TestListener.java

 

//TestListener.java

package com.demo.listener;

import org.apache.commons.lang.exception.ExceptionUtils;

import org.testng.ITestContext;

import org.testng.ITestListener;

import org.testng.ITestResult;

import com.demo.utility.JiraCreateIssue;

import com.demo.utility.JiraServiceProvider;

public class TestListener implements ITestListener {

@Override

public void onTestFailure(ITestResult result) {

boolean islogIssue = result.getMethod().getConstructorOrMethod().getMethod().getAnnotation(JiraCreateIssue.class).isCreateIssue();

if (islogIssue) {

//Provide proper Jira project URL ex: https://browsertack.atlassian.net

//Jira User name ex: [email protected]

//API token copy from Jira dashboard ex: lorelimpusm12uijk

//Project key should be, Short name ex: BS

JiraServiceProvider JiraServiceProvider = new JiraServiceProvider(“https://example.atlassian.net”,

[email protected]”, “lorelimpusm12uijk”, “BS”);

String issueDescription = “Failure Reason from Automation Testing\n\n” + result.getThrowable().getMessage()

+ “\n”;

issueDescription.concat(ExceptionUtils.getFullStackTrace(result.getThrowable()));

String issueSummary = result.getMethod().getConstructorOrMethod().getMethod().getName()

+ ” Failed in Automation Testing”;

JiraServiceProvider.createJiraIssue(“Bug”, issueSummary, issueDescription, “Automated Testing”);

}

}

@Override

public void onTestSkipped(ITestResult result) {

// TODO Auto-generated method stub

}

@Override

public void onTestFailedButWithinSuccessPercentage(ITestResult result) {

// TODO Auto-generated method stub

}

@Override

public void onStart(ITestContext context) {

// TODO Auto-generated method stub

}

@Override

public void onFinish(ITestContext context) {

// TODO Auto-generated method stub

}

@Override

public void onTestStart(ITestResult result) {

// TODO Auto-generated method stub

}

@Override

public void onTestSuccess(ITestResult result) {

// TODO Auto-generated method stub

}

}

 

قدم پنجم : پیکربندی فایل testng.xml

 

هنگامی که تمام تنظیمات لازم را انجام دادیم ، باید یک فایل testng.xml پیکربندی کنیم تا آزمایشات ما اجرا شود. نمونه فایل xml ما مانند شکل زیر است.

 

سورس کد : نمونه فایل testng.xml

 

<?xml version=”1.0″ encoding=”UTF-8″?>

<suite name=”Default suite” parallel=”methods” verbose=”3″>

<listeners>

<listener class-name=”com.demo.listener.TestListener” />

</listeners>

<test name=” First test” skipfailedinvocationcounts=”false”>

<classes>

<class name=”com.demo.project.HomePageTest”>

</class>

</classes>

</test>

</suite>

بستن