জেসুপ (JSoup) হল একটি Java লাইব্রেরি যা HTML পার্সিং এবং ওয়েব স্ক্র্যাপিংয়ের জন্য ব্যবহৃত হয়। যখন আপনি জেসুপ ব্যবহার করে কোনো অ্যাপ্লিকেশন ডেভেলপ করেন, তখন এটি পরীক্ষার জন্য ইউনিট টেস্টিং (Unit Testing) এবং ইন্টিগ্রেশন টেস্টিং (Integration Testing) গুরুত্বপূর্ণ হয়ে ওঠে। ইউনিট টেস্টিং আপনাকে আপনার কোডের আলাদা অংশ সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করতে সাহায্য করে, এবং ইন্টিগ্রেশন টেস্টিং নিশ্চিত করে যে আপনার কোডের বিভিন্ন অংশ একত্রে সঠিকভাবে কাজ করছে কিনা।
ইউনিট টেস্টিং (Unit Testing)
ইউনিট টেস্টিং কী?
ইউনিট টেস্টিং হল একটি টেস্টিং পদ্ধতি যেখানে কোডের ছোট ছোট ইউনিট (যেমন ফাংশন বা মেথড) আলাদাভাবে পরীক্ষা করা হয়। জেসুপ ব্যবহার করে HTML পার্সিং বা ডেটা এক্সট্র্যাকশনের জন্য যদি কোনো ফাংশন তৈরি করা হয়, তবে তা ইউনিট টেস্টের মাধ্যমে পরীক্ষা করা উচিত, যাতে নিশ্চিত হওয়া যায় যে সেই ফাংশন সঠিকভাবে কাজ করছে।
জেসুপ এর জন্য ইউনিট টেস্টের উদাহরণ
জেসুপ ব্যবহার করে যদি কোনো ফাংশন তৈরি করেন যা HTML ডকুমেন্ট থেকে ডেটা এক্সট্র্যাক্ট করে, তবে সেটি ইউনিট টেস্টের মাধ্যমে পরীক্ষা করা যেতে পারে। নিচে একটি উদাহরণ দেওয়া হল:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class JsoupUnitTest {
@Test
public void testExtractTitle() {
String html = "<html><head><title>Test Page</title></head><body></body></html>";
Document doc = Jsoup.parse(html);
String title = doc.title();
// টেস্টিং: শিরোনাম সঠিক কিনা তা যাচাই করা
assertEquals("Test Page", title);
}
@Test
public void testExtractHeading() {
String html = "<html><head><title>Test Page</title></head><body><h1>Welcome</h1></body></html>";
Document doc = Jsoup.parse(html);
Element heading = doc.select("h1").first();
// টেস্টিং: হেডিং সঠিক কিনা তা যাচাই করা
assertEquals("Welcome", heading.text());
}
}
এই কোডে:
testExtractTitle(): HTML ডকুমেন্ট থেকে টাইটেল এক্সট্র্যাক্ট করে এবং তার সঠিকতা যাচাই করা হয়েছে।testExtractHeading(): HTML ডকুমেন্ট থেকে<h1>ট্যাগের টেক্সট এক্সট্র্যাক্ট করে এবং তার সঠিকতা যাচাই করা হয়েছে।assertEquals(): এই মেথডটি আসল আউটপুট এবং প্রত্যাশিত আউটপুট তুলনা করতে ব্যবহৃত হয়।
JUnit টেস্ট ফ্রেমওয়ার্ক
এই উদাহরণটি JUnit টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে তৈরি করা হয়েছে। আপনি JUnit লাইব্রেরি ব্যবহার করে জেসুপ কোডের জন্য ইউনিট টেস্ট তৈরি করতে পারেন।
ইন্টিগ্রেশন টেস্টিং (Integration Testing)
ইন্টিগ্রেশন টেস্টিং কী?
ইন্টিগ্রেশন টেস্টিং হল এমন একটি পদ্ধতি যেখানে বিভিন্ন ইউনিট বা মডিউল একত্রে কাজ করছে কিনা তা পরীক্ষা করা হয়। জেসুপ ব্যবহার করে যদি আপনি অনেকটি HTML ডকুমেন্টের ডেটা এক্সট্র্যাক্ট বা ম্যানিপুলেট করেন, তবে ইন্টিগ্রেশন টেস্টিং গুরুত্বপূর্ণ, কারণ আপনি নিশ্চিত হতে চান যে আপনার কোডের বিভিন্ন অংশ একত্রে সঠিকভাবে কাজ করছে।
জেসুপ এর জন্য ইন্টিগ্রেশন টেস্টের উদাহরণ
ধরা যাক, আপনি একটি অ্যাপ্লিকেশন তৈরি করছেন যা একটি ওয়েব পেজ থেকে একাধিক ফর্ম ডেটা এক্সট্র্যাক্ট করবে এবং সেই ডেটা অন্য কোনো মডিউলে পাঠাবে। নিচে একটি উদাহরণ দেওয়া হয়েছে যেখানে একাধিক ইউনিট একত্রে কাজ করছে:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class JsoupIntegrationTest {
@Test
public void testFormSubmissionAndExtraction() {
try {
// ফর্মের HTML ডকুমেন্ট ডাউনলোড
String html = "<html><body><form><input type='text' name='username' value='testuser'/><input type='password' name='password' value='mypassword'/></form></body></html>";
Document doc = Jsoup.parse(html);
// ফর্মের ইনপুট ভ্যালু এক্সট্র্যাক্ট করা
String username = doc.select("input[name=username]").val();
String password = doc.select("input[name=password]").val();
// ডেটা ম্যানিপুলেশন (যেমন: পাসওয়ার্ড পরিবর্তন)
password = "newpassword";
// টেস্টিং: ইনপুট ডেটা সঠিকভাবে এক্সট্র্যাক্ট এবং ম্যানিপুলেট করা হয়েছে কিনা
assertTrue(username.equals("testuser"));
assertTrue(password.equals("newpassword"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
এই কোডে:
- ফর্মের HTML ডকুমেন্ট ডাউনলোড: এখানে একটি সিম্পল HTML ডকুমেন্ট তৈরি করা হয়েছে যা একটি ফর্ম ধারণ করে।
- ডেটা এক্সট্র্যাকশন এবং ম্যানিপুলেশন:
input[name=username]এবংinput[name=password]ব্যবহার করে ফর্মের ইনপুট ভ্যালু এক্সট্র্যাক্ট করা হচ্ছে এবং পাসওয়ার্ড পরিবর্তন করা হচ্ছে। - ইন্টিগ্রেশন টেস্ট: পরীক্ষা করা হচ্ছে যে, ফর্মের ডেটা সঠিকভাবে এক্সট্র্যাক্ট এবং ম্যানিপুলেট করা হয়েছে কিনা।
সারাংশ
জেসুপ (JSoup) দিয়ে ইউনিট টেস্টিং এবং ইন্টিগ্রেশন টেস্টিং করা সহজ এবং কার্যকরী। ইউনিট টেস্টিংয়ের মাধ্যমে আপনি নিশ্চিত হতে পারেন যে আপনার কোডের প্রতিটি ইউনিট সঠিকভাবে কাজ করছে, এবং ইন্টিগ্রেশন টেস্টিংয়ের মাধ্যমে বিভিন্ন ইউনিট একত্রে সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করা যায়। JUnit এর মতো টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে আপনি জেসুপের জন্য কার্যকরী টেস্ট কেস তৈরি করতে পারবেন।
যেকোনো সফটওয়্যার ডেভেলপমেন্টে কোডের গুণগত মান নিশ্চিত করার জন্য ইউনিট টেস্ট গুরুত্বপূর্ণ। জেসুপ (JSoup) এর মাধ্যমে আপনি HTML ডকুমেন্ট পার্সিং এবং ডেটা এক্সট্র্যাকশন করেন। ইউনিট টেস্টের মাধ্যমে নিশ্চিত করতে পারেন যে আপনার কোড সঠিকভাবে কাজ করছে এবং কোনো ধরনের রিগ্রেশন হয়নি।
এই টিউটোরিয়ালে আমরা দেখব কীভাবে জেসুপ ব্যবহার করে HTML ডকুমেন্ট পার্সিংয়ের জন্য ইউনিট টেস্ট তৈরি করা যায়।
ইউনিট টেস্টের জন্য লাইব্রেরি
প্রথমেই, ইউনিট টেস্টের জন্য JUnit লাইব্রেরি ব্যবহার করা হয়, যা Java এ একাধিক টেস্ট রচনা করতে সহায়ক। Maven প্রোজেক্টে JUnit এবং JSoup যুক্ত করার জন্য নিচে প্রয়োজনীয় ডিপেনডেন্সি দেওয়া হলো।
Maven ডিপেনডেন্সি
<dependencies>
<!-- JSoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version>
</dependency>
<!-- JUnit -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.1</version>
<scope>test</scope>
</dependency>
</dependencies>
JSoup দিয়ে ইউনিট টেস্ট তৈরি করা
ধরা যাক, আপনি একটি মেথড লিখেছেন যা একটি HTML ডকুমেন্ট পার্স করে, এবং কিছু নির্দিষ্ট উপাদান (যেমন, শিরোনাম, প্যারাগ্রাফ) এক্সট্র্যাক্ট করে।
উদাহরণ: HTML পার্সিং মেথড
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class HtmlParser {
public String parseTitle(String html) {
Document doc = Jsoup.parse(html);
return doc.title();
}
public String parseParagraph(String html) {
Document doc = Jsoup.parse(html);
return doc.select("p").text();
}
}
এই ক্লাসটি একটি HTML ডকুমেন্ট গ্রহণ করে তার শিরোনাম এবং প্যারাগ্রাফ টেক্সট এক্সট্র্যাক্ট করে।
ইউনিট টেস্ট তৈরি করা
এখন, এই HtmlParser ক্লাসের জন্য JUnit দিয়ে টেস্ট লিখে দেখি।
উদাহরণ: HtmlParser এর জন্য ইউনিট টেস্ট
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class HtmlParserTest {
@Test
public void testParseTitle() {
HtmlParser parser = new HtmlParser();
String html = "<html><head><title>Test Page</title></head><body><p>Hello World!</p></body></html>";
// Title পার্সিং টেস্ট
String result = parser.parseTitle(html);
assertEquals("Test Page", result, "Title should be 'Test Page'");
}
@Test
public void testParseParagraph() {
HtmlParser parser = new HtmlParser();
String html = "<html><head><title>Test Page</title></head><body><p>Hello World!</p></body></html>";
// Paragraph পার্সিং টেস্ট
String result = parser.parseParagraph(html);
assertEquals("Hello World!", result, "Paragraph text should be 'Hello World!'");
}
@Test
public void testParseEmptyHtml() {
HtmlParser parser = new HtmlParser();
String html = "<html><head><title>Test Page</title></head><body></body></html>";
// Empty HTML টেস্ট
String result = parser.parseParagraph(html);
assertEquals("", result, "Paragraph text should be empty");
}
}
কোড ব্যাখ্যা
testParseTitle(): এই টেস্টে, আমরাparseTitle()মেথডকে পরীক্ষা করছি। এখানে আমরা একটি সিম্পল HTML ডকুমেন্ট পাঠিয়েছি যেখানে<title>ট্যাগে"Test Page"আছে। আমরা আশা করছি যে মেথডটি সঠিকভাবে"Test Page"রিটার্ন করবে।testParseParagraph(): এই টেস্টে,parseParagraph()মেথড পরীক্ষা করা হচ্ছে। আমরা HTML ডকুমেন্টে একটি<p>ট্যাগে"Hello World!"পাঠিয়েছি, এবং টেস্টটি নিশ্চিত করবে যে মেথডটি সঠিকভাবে প্যারাগ্রাফ টেক্সট এক্সট্র্যাক্ট করছে।testParseEmptyHtml(): এই টেস্টে, আমরা একটি HTML ডকুমেন্ট পাঠিয়েছি যেখানে<p>ট্যাগটি খালি রয়েছে, এবং টেস্টটি নিশ্চিত করবে যে মেথডটি সঠিকভাবে একটি খালি স্ট্রিং রিটার্ন করছে।
টেস্ট চালানো
JUnit টেস্ট চালানোর জন্য আপনি IDE যেমন IntelliJ IDEA বা Eclipse ব্যবহার করতে পারেন, অথবা Maven কমান্ডলাইন থেকে চালাতে পারেন:
mvn test
এটি টেস্টগুলি চালাবে এবং পরীক্ষার ফলাফল দেখাবে।
সারাংশ
জেসুপ (JSoup) দিয়ে HTML ডকুমেন্ট পার্সিংয়ের জন্য ইউনিট টেস্ট তৈরি করা একটি গুরুত্বপূর্ণ প্রক্রিয়া। আমরা JUnit ব্যবহার করে আমাদের কোডের কার্যকারিতা নিশ্চিত করতে পারি। কোডের নির্দিষ্ট অংশ যেমন HTML ট্যাগ থেকে ডেটা এক্সট্র্যাক্ট করা, সহজেই টেস্ট করা যেতে পারে। এই পদ্ধতিতে আপনার কোডের গুণগত মান নিশ্চিত করা সম্ভব হয়।
JSoup ব্যবহার করে HTML কন্টেন্ট এবং ডেটা এক্সট্র্যাকশনের জন্য টেস্ট কেস তৈরি করা একটি গুরুত্বপূর্ণ পদক্ষেপ, যা আপনার ওয়েব স্ক্র্যাপিং এবং HTML ডকুমেন্ট পার্সিং প্রক্রিয়ার সঠিকতা নিশ্চিত করতে সহায়তা করে। নিচে, JSoup ব্যবহার করে HTML কন্টেন্ট এবং ডেটা এক্সট্র্যাকশনের জন্য কিছু সাধারণ টেস্ট কেস তৈরি করার প্রক্রিয়া দেওয়া হলো।
1. HTML ডকুমেন্ট পার্স করা এবং ট্যাগের টেক্সট এক্সট্র্যাকশন
টেস্ট কেস: Test_ParseHtmlDocument
এই টেস্ট কেসে, আমরা একটি সাধারণ HTML ডকুমেন্ট পার্স করব এবং <h1> ট্যাগের টেক্সট এক্সট্র্যাক্ট করব।
টেস্ট কেস:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.junit.Test;
import static org.junit.Assert.*;
public class HtmlContentTest {
@Test
public void Test_ParseHtmlDocument() {
// HTML ডকুমেন্ট
String html = "<html><body><h1>Welcome to JSoup</h1></body></html>";
// JSoup দিয়ে HTML পার্স
Document doc = Jsoup.parse(html);
// <h1> ট্যাগের টেক্সট এক্সট্র্যাক্ট করা
Element h1 = doc.select("h1").first();
// টেস্ট চেক করা
assertEquals("Welcome to JSoup", h1.text());
}
}
এখানে, HTML ডকুমেন্টে <h1> ট্যাগের টেক্সট "Welcome to JSoup" এক্সট্র্যাক্ট করা হয়েছে এবং এর সাথে টেস্ট করা হয়েছে।
2. HTML অ্যাট্রিবিউট এক্সট্র্যাকশন
টেস্ট কেস: Test_ExtractAttributeValue
এই টেস্ট কেসে, আমরা একটি HTML ডকুমেন্ট থেকে একটি ইমেজ ট্যাগের src অ্যাট্রিবিউট এক্সট্র্যাক্ট করব।
টেস্ট কেস:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.junit.Test;
import static org.junit.Assert.*;
public class HtmlContentTest {
@Test
public void Test_ExtractAttributeValue() {
// HTML ডকুমেন্ট
String html = "<html><body><img src='image.jpg' alt='Sample Image'/></body></html>";
// JSoup দিয়ে HTML পার্স
Document doc = Jsoup.parse(html);
// <img> ট্যাগের src অ্যাট্রিবিউট এক্সট্র্যাক্ট করা
Element img = doc.select("img").first();
String srcValue = img.attr("src");
// টেস্ট চেক করা
assertEquals("image.jpg", srcValue);
}
}
এখানে, <img> ট্যাগের src অ্যাট্রিবিউটের মান "image.jpg" এক্সট্র্যাক্ট করা হয়েছে এবং এটি টেস্ট করা হয়েছে।
3. HTML টেবিল থেকে ডেটা এক্সট্র্যাকশন
টেস্ট কেস: Test_ExtractDataFromTable
এই টেস্ট কেসে, আমরা একটি HTML টেবিল থেকে সেলের ডেটা এক্সট্র্যাক্ট করব।
টেস্ট কেস:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;
import static org.junit.Assert.*;
public class HtmlContentTest {
@Test
public void Test_ExtractDataFromTable() {
// HTML টেবিল
String html = "<html><body><table><tr><td>John</td><td>25</td></tr><tr><td>Alice</td><td>30</td></tr></table></body></html>";
// JSoup দিয়ে HTML পার্স
Document doc = Jsoup.parse(html);
// টেবিল থেকে ডেটা এক্সট্র্যাক্ট করা
Elements rows = doc.select("table tr");
// প্রথম রো থেকে ডেটা এক্সট্র্যাক্ট করা
Element firstRow = rows.get(0);
Elements cols = firstRow.select("td");
String name = cols.get(0).text();
String age = cols.get(1).text();
// টেস্ট চেক করা
assertEquals("John", name);
assertEquals("25", age);
}
}
এখানে, একটি HTML টেবিল থেকে প্রথম রোতে থাকা ডেটা "John" এবং "25" এক্সট্র্যাক্ট করা হয়েছে এবং এটি টেস্ট করা হয়েছে।
4. HTML ডকুমেন্টে ক্লাসের মাধ্যমে উপাদান নির্বাচন
টেস্ট কেস: Test_ExtractDataByClass
এই টেস্ট কেসে, আমরা HTML ডকুমেন্ট থেকে একটি নির্দিষ্ট ক্লাসের মাধ্যমে উপাদান নির্বাচন করব এবং তার টেক্সট এক্সট্র্যাক্ট করব।
টেস্ট কেস:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.junit.Test;
import static org.junit.Assert.*;
public class HtmlContentTest {
@Test
public void Test_ExtractDataByClass() {
// HTML ডকুমেন্ট
String html = "<html><body><div class='content'>JSoup is awesome!</div></body></html>";
// JSoup দিয়ে HTML পার্স
Document doc = Jsoup.parse(html);
// .content ক্লাসের মাধ্যমে ডেটা এক্সট্র্যাক্ট করা
Element contentDiv = doc.select(".content").first();
// টেস্ট চেক করা
assertEquals("JSoup is awesome!", contentDiv.text());
}
}
এখানে, .content ক্লাসের মাধ্যমে ডেটা এক্সট্র্যাক্ট করা হয়েছে এবং এটি টেস্ট করা হয়েছে।
সারাংশ
HTML কন্টেন্ট এবং ডেটা এক্সট্র্যাকশনের জন্য JSoup ব্যবহার করে টেস্ট কেস তৈরি করা একটি গুরুত্বপূর্ণ কাজ। আপনি HTML ডকুমেন্টের বিভিন্ন ট্যাগ, অ্যাট্রিবিউট, টেবিল রো, ক্লাস ইত্যাদি থেকে ডেটা এক্সট্র্যাক্ট করতে পারেন এবং সেগুলির সঠিকতা টেস্ট করতে পারেন। JUnit ব্যবহার করে এই টেস্ট কেসগুলি কার্যকরভাবে তৈরি এবং পরিচালনা করা সম্ভব। JSoup এর মাধ্যমে HTML পার্সিং ও ডেটা এক্সট্র্যাকশনের টেস্ট কেসগুলি ওয়েব স্ক্র্যাপিং এবং ডেটা প্রক্রিয়ার সঠিকতা নিশ্চিত করতে সহায়ক।
JSoup সাধারণত HTML ডকুমেন্ট ম্যানিপুলেশন এবং স্ক্র্যাপিংয়ের জন্য ব্যবহৃত হয়, তবে ওয়েব স্ক্র্যাপিং এবং HTTP রিকোয়েস্টের মধ্যে সম্পর্ক তৈরির জন্য এটি কিছু HTTP অনুরোধ (requests) করতে পারে। তবে, JSoup সরাসরি HTTP রিকোয়েস্ট মক (mock) বা রেসপন্স টেস্টিংয়ের জন্য তৈরি হয়নি। এ ধরনের কার্যক্রমের জন্য অন্য লাইব্রেরি, যেমন Mockito, WireMock, অথবা HttpClient ব্যবহৃত হয়।
তবে, আপনি যদি JSoup দিয়ে HTTP রিকোয়েস্ট মক এবং রেসপন্স টেস্টিং করতে চান, তখন কিছু টুল বা লাইব্রেরি একত্রে ব্যবহার করতে হতে পারে। এই লেখায়, আমরা Mockito এবং WireMock ব্যবহার করে HTTP রিকোয়েস্ট মকিং এবং রেসপন্স টেস্টিংয়ের কিছু উদাহরণ দেখাবো।
Mockito এবং JSoup এর মাধ্যমে HTTP রিকোয়েস্ট মকিং
Mockito একটি জনপ্রিয় মকিং লাইব্রেরি যা Java-তে ইউনি টেস্টিং (unit testing) এর জন্য ব্যবহৃত হয়। JSoup এর HTTP রিকোয়েস্ট মক করার জন্য Mockito ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, যখন আপনি একটি ওয়েব পেজ থেকে ডেটা স্ক্র্যাপ করছেন এবং HTTP রিকোয়েস্টকে মক করতে চান, তখন Mockito এর সাহায্যে HTTP রিকোয়েস্টের আউটপুট টেস্ট করা সম্ভব।
উদাহরণ:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.mockito.Mockito;
import org.junit.Test;
import static org.mockito.Mockito.*;
public class JsoupMockHttpRequestTest {
@Test
public void testMockHttpRequest() throws Exception {
// Mocking Jsoup.connect() method to return a predefined Document
Document mockDoc = mock(Document.class);
String mockHtml = "<html><body><h1>Mocked HTML Response</h1></body></html>";
when(mockDoc.html()).thenReturn(mockHtml);
// Mocking Jsoup.connect() to return the mocked document
Jsoup jsoup = mock(Jsoup.class);
when(jsoup.connect("https://example.com")).thenReturn(mockDoc);
// Verifying the HTML content
Document doc = jsoup.connect("https://example.com").get();
System.out.println(doc.html()); // Output: <html><body><h1>Mocked HTML Response</h1></body></html>
}
}
এই উদাহরণে, আমরা Jsoup.connect() মেথডকে মক করেছি এবং একটি মক HTML রেসপন্স তৈরি করেছি। পরে when() মেথড দিয়ে আমরা মক রেসপন্স সেট করেছি এবং get() মেথডের মাধ্যমে সেই রেসপন্সটি ফেরত পেয়েছি।
WireMock ব্যবহার করে HTTP রিকোয়েস্ট এবং রেসপন্স মকিং
WireMock একটি জনপ্রিয় HTTP রিকোয়েস্ট এবং রেসপন্স মকিং টুল। এটি HTTP সার্ভার হিসেবে কাজ করে এবং বিভিন্ন HTTP রিকোয়েস্টের জন্য রেসপন্স মক (mock) করতে সাহায্য করে। WireMock ব্যবহার করে আপনি সহজে HTTP রিকোয়েস্ট মক করে তার রেসপন্স টেস্ট করতে পারেন।
WireMock সেটআপ
প্রথমে Maven বা Gradle এর মাধ্যমে WireMock ডিপেন্ডেন্সি যুক্ত করতে হবে।
Maven ডিপেন্ডেন্সি:
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock</artifactId>
<version>2.33.2</version> <!-- সর্বশেষ সংস্করণ -->
<scope>test</scope>
</dependency>
উদাহরণ:
import com.github.tomakehurst.wiremock.client.WireMock;
import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
public class WireMockJsoupExample {
@Before
public void setup() {
// WireMock সার্ভার শুরু করা
WireMock.configureFor("localhost", 8080);
WireMock.start();
// Mock HTTP রিকোয়েস্ট এবং রেসপন্স তৈরি করা
WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/test"))
.willReturn(WireMock.aResponse()
.withHeader("Content-Type", "text/html")
.withBody("<html><body><h1>Mocked Page</h1></body></html>")));
}
@Test
public void testMockHttpRequest() throws Exception {
// JSoup দিয়ে মক URL থেকে HTML ডেটা এক্সট্র্যাক্ট করা
org.jsoup.nodes.Document doc = Jsoup.connect("http://localhost:8080/test").get();
System.out.println(doc.html()); // Output: <html><body><h1>Mocked Page</h1></body></html>
}
@After
public void tearDown() {
// WireMock সার্ভার বন্ধ করা
WireMock.stop();
}
}
এখানে, আমরা WireMock ব্যবহার করে একটি মক HTTP রিকোয়েস্ট এবং রেসপন্স তৈরি করেছি এবং পরে JSoup দিয়ে সেই রেসপন্সের HTML ডেটা এক্সট্র্যাক্ট করেছি। WireMock.stubFor() মেথড ব্যবহার করে HTTP GET রিকোয়েস্টের জন্য মক রেসপন্স তৈরি করা হয়েছে।
সারাংশ
JSoup সাধারণত HTML স্ক্র্যাপিং এবং ডকুমেন্ট ম্যানিপুলেশনের জন্য ব্যবহৃত হলেও, HTTP রিকোয়েস্ট মক এবং রেসপন্স টেস্টিংয়ের জন্য Mockito এবং WireMock লাইব্রেরি ব্যবহার করা হয়। Mockito Java-তে ইউনিট টেস্টিংয়ের জন্য HTTP রিকোয়েস্ট মক করতে সাহায্য করে, আর WireMock একটি বিশেষ HTTP রিকোয়েস্ট এবং রেসপন্স মকিং টুল যা ওয়েব সার্ভিসের টেস্টিংয়ের জন্য কার্যকর। এগুলি JSoup এর সাথে একত্রে ব্যবহার করে আপনি ওয়েব রিকোয়েস্ট এবং রেসপন্স টেস্টিংয়ের কার্যক্রম আরও সহজে করতে পারেন।
JSoup একটি শক্তিশালী লাইব্রেরি যা HTML parsing, DOM manipulation, এবং ওয়েব স্ক্র্যাপিংয়ের জন্য ব্যবহৃত হয়। যখন আপনি JSoup ব্যবহার করে ডাটা এক্সট্র্যাক্ট বা ম্যানিপুলেশন করেন, তখন আপনার কোডের সঠিকতা যাচাই করার জন্য অটোমেটেড টেস্টিং অত্যন্ত গুরুত্বপূর্ণ। জাভা ভাষায় JSoup ব্যবহারের জন্য অটোমেটেড টেস্টিং করার জন্য সাধারণত JUnit বা TestNG এর মতো টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করা হয়।
এখানে আমরা JUnit ব্যবহার করে JSoup এর জন্য একটি সাধারণ অটোমেটেড টেস্টিং উদাহরণ দেখব, যেখানে HTML ডকুমেন্ট পার্সিং এবং ডাটা এক্সট্র্যাক্টিংয়ের সঠিকতা যাচাই করা হবে।
JUnit দিয়ে JSoup এর Automated Testing
JUnit হলো একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা আপনাকে কোডের কার্যকারিতা পরীক্ষা করতে সাহায্য করে। নিচে একটি উদাহরণ দেওয়া হলো যেখানে JSoup দিয়ে HTML পার্স করা এবং নির্দিষ্ট ট্যাগ থেকে ডাটা এক্সট্র্যাক্ট করার জন্য JUnit টেস্ট তৈরি করা হয়েছে।
১. JSoup টেস্টিং এর উদাহরণ
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.junit.Test;
import static org.junit.Assert.*;
public class JsoupTest {
@Test
public void testParseHtml() {
String html = "<html><head><title>Test Page</title></head><body><h1>Welcome to JSoup</h1></body></html>";
// HTML পার্সিং
Document doc = Jsoup.parse(html);
// টাইটেল ট্যাগের মান যাচাই
assertEquals("Test Page", doc.title());
// <h1> ট্যাগের টেক্সট যাচাই
Element heading = doc.select("h1").first();
assertNotNull(heading);
assertEquals("Welcome to JSoup", heading.text());
}
}
এখানে আমরা দুটি মূল পরীক্ষা করেছি:
- টাইটেল ট্যাগের মান যাচাই:
assertEquals("Test Page", doc.title());এর মাধ্যমে যাচাই করা হয়েছে যে, পার্স করা ডকুমেন্টের টাইটেল সঠিক কিনা। <h1>ট্যাগের টেক্সট যাচাই:assertEquals("Welcome to JSoup", heading.text());এর মাধ্যমে যাচাই করা হয়েছে যে,h1ট্যাগের টেক্সট সঠিকভাবে এক্সট্র্যাক্ট হচ্ছে কিনা।
২. HTML ফাইলের মধ্যে ট্যাগ নির্বাচন এবং এক্সট্র্যাকশন
ধরা যাক, আমাদের HTML ডকুমেন্টে বেশ কিছু ট্যাগ রয়েছে এবং আমরা তাদের মধ্যে কিছু নির্দিষ্ট ডাটা এক্সট্র্যাক্ট করতে চাই। এই উদাহরণে, আমরা <div> ট্যাগ থেকে ক্লাস অনুযায়ী ডাটা এক্সট্র্যাক্ট করব এবং তার সঠিকতা যাচাই করব।
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.junit.Test;
import static org.junit.Assert.*;
public class JsoupTest {
@Test
public void testExtractDataFromDiv() {
String html = "<html><head><title>Test Page</title></head><body>" +
"<div class='content'>This is content</div>" +
"<div class='footer'>Footer content</div>" +
"</body></html>";
// HTML পার্সিং
Document doc = Jsoup.parse(html);
// 'content' ক্লাস সহ <div> ট্যাগের মান যাচাই
Element contentDiv = doc.select("div.content").first();
assertNotNull(contentDiv);
assertEquals("This is content", contentDiv.text());
// 'footer' ক্লাস সহ <div> ট্যাগের মান যাচাই
Element footerDiv = doc.select("div.footer").first();
assertNotNull(footerDiv);
assertEquals("Footer content", footerDiv.text());
}
}
এখানে, আমরা দুটি div ট্যাগের মান যাচাই করছি: একটি class="content" এবং আরেকটি class="footer"। assertNotNull() মেথড দিয়ে যাচাই করা হচ্ছে যে, সংশ্লিষ্ট ট্যাগগুলো সফলভাবে এক্সট্র্যাক্ট হয়েছে, এবং assertEquals() দিয়ে তাদের টেক্সট ঠিকভাবে এসেছে কিনা তা যাচাই করা হচ্ছে।
৩. JUnit টেস্ট রান করা
এই কোডগুলি রান করার জন্য, আপনার Maven বা Gradle প্রকল্পে JUnit ডিপেনডেন্সি অন্তর্ভুক্ত করা থাকতে হবে। নিচে Maven এর জন্য pom.xml এ JUnit ডিপেনডেন্সি দেওয়া হলো:
<dependencies>
<!-- JSoup Dependency -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version>
</dependency>
<!-- JUnit Dependency -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
</dependency>
</dependencies>
৪. Maven কমান্ড দিয়ে টেস্ট চালানো
Maven ব্যবহার করে JUnit টেস্ট চালানোর জন্য নিচের কমান্ড ব্যবহার করতে পারেন:
mvn test
এটি আপনার সমস্ত টেস্ট রান করবে এবং টেস্টের আউটপুট কনসোলে দেখাবে।
সারাংশ
JSoup দিয়ে HTML parsing, DOM manipulation, এবং ওয়েব স্ক্র্যাপিং করার ক্ষেত্রে অটোমেটেড টেস্টিং করা অত্যন্ত গুরুত্বপূর্ণ। JUnit ফ্রেমওয়ার্ক ব্যবহার করে আপনি সহজেই JSoup এর কার্যকারিতা পরীক্ষা করতে পারেন। টেস্টিংয়ের মাধ্যমে আপনি নিশ্চিত হতে পারবেন যে আপনার কোড সঠিকভাবে কাজ করছে, যেমন HTML ট্যাগ পার্সিং, ডাটা এক্সট্র্যাকশন, এবং DOM ম্যানিপুলেশন। JSoup এর জন্য অটোমেটেড টেস্টিং কোডের নির্ভরযোগ্যতা এবং স্থিতিশীলতা বজায় রাখতে সাহায্য করে।
Read more