paint-brush
টেস্ট কনটেইনার-ভিত্তিক লোড টেস্টিং বেঞ্চ সম্পর্কে আপনার যা কিছু জানা দরকারদ্বারা@avvero
223 পড়া

টেস্ট কনটেইনার-ভিত্তিক লোড টেস্টিং বেঞ্চ সম্পর্কে আপনার যা কিছু জানা দরকার

দ্বারা Anton Belyaev15m2024/06/07
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

এই নিবন্ধটির উদ্দেশ্য হল লোড পরীক্ষার জন্য একটি সেটআপ তৈরি করার একটি পদ্ধতি প্রদর্শন করা যেভাবে নিয়মিত ইন্টিগ্রেশন পরীক্ষাগুলি লেখা হয়: একটি গ্রেডল প্রকল্প পরিবেশে টেস্টকন্টেইনার ব্যবহার করে স্পক পরীক্ষার আকারে। Gatling, WRK, এবং Yandex.Tank এর মতো লোড টেস্টিং ইউটিলিটি ব্যবহার করা হয়।
featured image - টেস্ট কনটেইনার-ভিত্তিক লোড টেস্টিং বেঞ্চ সম্পর্কে আপনার যা কিছু জানা দরকার
Anton Belyaev HackerNoon profile picture

Testcontainers ব্যবহার করে পরীক্ষার পরিস্থিতিতে কাজ করার প্রক্রিয়াকে আমূল উন্নত করেছে। এই টুলটির জন্য ধন্যবাদ, ইন্টিগ্রেশন পরীক্ষার জন্য পরিবেশ তৈরি করা সহজ হয়েছে ( কাফকার সাথে পরীক্ষায় বিচ্ছিন্নতা নিবন্ধটি দেখুন)। এখন, আমরা সহজেই ডাটাবেস, বার্তা ব্রোকার এবং অন্যান্য পরিষেবার বিভিন্ন সংস্করণ সহ কন্টেইনার চালু করতে পারি। ইন্টিগ্রেশন পরীক্ষার জন্য, Testcontainers অপরিহার্য প্রমাণিত হয়েছে.


যদিও লোড টেস্টিং কার্যকরী পরীক্ষার তুলনায় কম সাধারণ, এটি অনেক বেশি উপভোগ্য হতে পারে। গ্রাফ অধ্যয়ন করা এবং একটি নির্দিষ্ট পরিষেবার কার্যকারিতা বিশ্লেষণ করা প্রকৃত আনন্দ আনতে পারে। এই ধরনের কাজ বিরল, কিন্তু তারা আমার জন্য বিশেষভাবে উত্তেজনাপূর্ণ.


এই নিবন্ধটির উদ্দেশ্য হল লোড পরীক্ষার জন্য একটি সেটআপ তৈরি করার একটি পদ্ধতি প্রদর্শন করা যেভাবে নিয়মিত ইন্টিগ্রেশন পরীক্ষাগুলি লেখা হয়: একটি গ্রেডল প্রকল্প পরিবেশে টেস্টকন্টেইনার ব্যবহার করে স্পক পরীক্ষার আকারে। Gatling, WRK, এবং Yandex.Tank এর মতো লোড-টেস্টিং ইউটিলিটি ব্যবহার করা হয়।

একটি লোড টেস্টিং পরিবেশ তৈরি করা

টুলসেট: গ্রেডল + স্পক ফ্রেমওয়ার্ক + টেস্ট কনটেইনার। বাস্তবায়ন বৈকল্পিক একটি পৃথক Gradle মডিউল। লোড টেস্টিং ইউটিলিটিগুলি হল Gatling, WRK, এবং Yandex.Tank।


পরীক্ষার বস্তুর সাথে কাজ করার দুটি পদ্ধতি রয়েছে:

  • প্রকাশিত ছবি পরীক্ষা করা;
  • প্রোজেক্টের সোর্স কোড এবং টেস্টিং থেকে ছবি তৈরি করা।


প্রথম ক্ষেত্রে, আমাদের কাছে লোড পরীক্ষার একটি সেট রয়েছে যা প্রকল্পের সংস্করণ এবং পরিবর্তনগুলির থেকে স্বাধীন। এই পদ্ধতিটি ভবিষ্যতে বজায় রাখা সহজ, তবে এটি শুধুমাত্র প্রকাশিত চিত্রগুলি পরীক্ষা করার মধ্যেই সীমাবদ্ধ। আমরা অবশ্যই স্থানীয়ভাবে ম্যানুয়ালি এই ছবিগুলি তৈরি করতে পারি, তবে এটি কম স্বয়ংক্রিয় এবং প্রজননযোগ্যতা হ্রাস করে। প্রয়োজনীয় ইমেজ ছাড়া CI/CD তে চললে, পরীক্ষা ব্যর্থ হবে।


দ্বিতীয় ক্ষেত্রে, পরীক্ষাগুলি পরিষেবার সর্বশেষ সংস্করণে চালানো হয়। এটি সিআই-তে লোড পরীক্ষাগুলিকে একীভূত করার এবং পরিষেবা সংস্করণগুলির মধ্যে কর্মক্ষমতা ডেটা পরিবর্তনগুলি প্রাপ্ত করার অনুমতি দেয়। যাইহোক, লোড পরীক্ষা সাধারণত ইউনিট পরীক্ষার চেয়ে বেশি সময় নেয়। কোয়ালিটি গেটের অংশ হিসাবে CI-তে এই জাতীয় পরীক্ষাগুলি অন্তর্ভুক্ত করার সিদ্ধান্ত আপনার উপর নির্ভর করে।


এই নিবন্ধটি প্রথম পদ্ধতি বিবেচনা করে। স্পককে ধন্যবাদ, আমরা তুলনামূলক বিশ্লেষণের জন্য পরিষেবার একাধিক সংস্করণে পরীক্ষা চালাতে পারি:

 where: image | _ 'avvero/sandbox:1.0.0' | _ 'avvero/sandbox:1.1.0' | _

এটি লক্ষ করা গুরুত্বপূর্ণ যে এই নিবন্ধটির লক্ষ্য হল পরীক্ষার স্থানের সংগঠন প্রদর্শন করা, সম্পূর্ণ-স্কেল লোড পরীক্ষা নয়।

টার্গেট সার্ভিস

টেস্টিং অবজেক্টের জন্য, স্যান্ডবক্স নামে একটি সাধারণ HTTP পরিষেবা নেওয়া যাক, যা একটি এন্ডপয়েন্ট প্রকাশ করে এবং অনুরোধগুলি পরিচালনা করতে একটি বহিরাগত উত্স থেকে ডেটা ব্যবহার করে৷ পরিষেবাটির একটি ডাটাবেস রয়েছে।

ডকারফাইল সহ পরিষেবার সোর্স কোড প্রজেক্ট রিপোজিটরি স্প্রিং-স্যান্ডবক্সে উপলব্ধ।

মডিউল স্ট্রাকচার ওভারভিউ

যেহেতু আমরা পরবর্তীতে নিবন্ধে বিস্তারিত আলোচনা করব, আমি load-tests গ্র্যাডল মডিউলের গঠনের একটি সংক্ষিপ্ত ওভারভিউ দিয়ে শুরু করতে চাই এর গঠন বোঝার জন্য:

 load-tests/ |-- src/ | |-- gatling/ | | |-- scala/ | | | |-- MainSimulation.scala # Main Gatling simulation file | | |-- resources/ | | | |-- gatling.conf # Gatling configuration file | | | |-- logback-test.xml # Logback configuration for testing | |-- test/ | | |-- groovy/ | | | |-- pw.avvero.spring.sandbox/ | | | | |-- GatlingTests.groovy # Gatling load test file | | | | |-- WrkTests.groovy # Wrk load test file | | | | |-- YandexTankTests.groovy # Yandex.Tank load test file | | |-- java/ | | | |-- pw.avvero.spring.sandbox/ | | | | |-- FileHeadLogConsumer.java # Helper class for logging to a file | | |-- resources/ | | | |-- wiremock/ | | | | |-- mappings/ # WireMock setup for mocking external services | | | | | |-- health.json | | | | | |-- forecast.json | | | |-- yandex-tank/ # Yandex.Tank load testing configuration | | | | |-- ammo.txt | | | | |-- load.yaml | | | | |-- make_ammo.py | | | |-- wrk/ # LuaJIT scripts for Wrk | | | | |-- scripts/ | | | | | |-- getForecast.lua |-- build.gradle

প্রকল্পের সংগ্রহস্থল - https://github.com/avvero/testing-bench

পরিবেশ

উপরের বর্ণনা থেকে, আমরা দেখতে পাচ্ছি যে পরিষেবাটির দুটি নির্ভরতা রয়েছে: পরিষেবাটি https://external-weather-api.com এবং একটি ডাটাবেস৷ তাদের বিবরণ নীচে সরবরাহ করা হবে, তবে আসুন একটি ডকার পরিবেশে যোগাযোগের জন্য স্কিমের সমস্ত উপাদান সক্ষম করে শুরু করি — আমরা নেটওয়ার্কটি বর্ণনা করব:

 def network = Network.newNetwork()

এবং প্রতিটি উপাদানের জন্য নেটওয়ার্ক উপনাম প্রদান করুন। এটি অত্যন্ত সুবিধাজনক এবং আমাদের একীকরণ পরামিতিগুলিকে স্থিরভাবে বর্ণনা করতে দেয়।

ওয়্যারমক এবং লোড টেস্টিং ইউটিলিটিগুলির মতো নির্ভরতাগুলির কাজ করার জন্য কনফিগারেশন প্রয়োজন। এগুলি এমন প্যারামিটার হতে পারে যা ধারক বা সম্পূর্ণ ফাইল এবং ডিরেক্টরিগুলিতে প্রেরণ করা যেতে পারে যা কন্টেইনারগুলিতে মাউন্ট করা প্রয়োজন৷


উপরন্তু, আমরা পাত্রে থেকে তাদের কাজের ফলাফল পুনরুদ্ধার করতে হবে। এই কাজগুলি সমাধান করার জন্য, আমাদের দুটি সেট ডিরেক্টরি প্রদান করতে হবে:


  • workingDirectory — মডিউলের রিসোর্স ডিরেক্টরি, সরাসরি load-tests/ এ।


  • reportDirectory — মেট্রিক্স এবং লগ সহ কাজের ফলাফলের জন্য ডিরেক্টরি। এই বিষয়ে আরও প্রতিবেদনের বিভাগে থাকবে।

তথ্যশালা

স্যান্ডবক্স পরিষেবা তার ডাটাবেস হিসাবে পোস্টগ্রেস ব্যবহার করে। আসুন এই নির্ভরতাকে নিম্নরূপ বর্ণনা করি:

 def postgres = new PostgreSQLContainer<>("postgres:15-alpine") .withNetwork(network) .withNetworkAliases("postgres") .withUsername("sandbox") .withPassword("sandbox") .withDatabaseName("sandbox")


ঘোষণাটি নেটওয়ার্ক ওরফে postgres নির্দিষ্ট করে, যা স্যান্ডবক্স পরিষেবা ডাটাবেসের সাথে সংযোগ করতে ব্যবহার করবে। ডাটাবেসের সাথে ইন্টিগ্রেশন বিবরণ সম্পূর্ণ করতে, পরিষেবাটি নিম্নলিখিত পরামিতিগুলির সাথে সরবরাহ করা প্রয়োজন:

 'spring.datasource.url' : 'jdbc:postgresql://postgres:5432/sandbox', 'spring.datasource.username' : 'sandbox', 'spring.datasource.password' : 'sandbox', 'spring.jpa.properties.hibernate.default_schema': 'sandbox'


ডাটাবেস কাঠামোটি ফ্লাইওয়ে ব্যবহার করে নিজেই অ্যাপ্লিকেশন দ্বারা পরিচালিত হয়, তাই পরীক্ষায় কোনও অতিরিক্ত ডাটাবেস ম্যানিপুলেশনের প্রয়োজন নেই।

https://external-weather-api.com-এ উপহাস করার অনুরোধ

যদি আমাদের কাছে একটি পাত্রে প্রকৃত উপাদান চালানোর সম্ভাবনা, প্রয়োজনীয়তা বা ইচ্ছা না থাকে তবে আমরা এর API এর জন্য একটি উপহাস প্রদান করতে পারি। পরিষেবাটির জন্য https://external-weather-api.com, WireMock ব্যবহার করা হয়।


ওয়্যারমক কন্টেইনারের ঘোষণাটি এইরকম দেখাবে:

 def wiremock = new GenericContainer<>("wiremock/wiremock:3.5.4") .withNetwork(network) .withNetworkAliases("wiremock") .withFileSystemBind("${workingDirectory}/src/test/resources/wiremock/mappings", "/home/wiremock/mappings", READ_WRITE) .withCommand("--no-request-journal") .waitingFor(new LogMessageWaitStrategy().withRegEx(".*https://wiremock.io/cloud.*")) wiremock.start()


WireMock এর জন্য মক কনফিগারেশন প্রয়োজন। withFileSystemBind নির্দেশনা স্থানীয় ফাইল পাথ এবং ডকার কন্টেইনারের ভিতরের পাথের মধ্যে ফাইল সিস্টেম বাঁধাই বর্ণনা করে। এই ক্ষেত্রে, স্থানীয় মেশিনে "${workingDirectory}/src/test/resources/wiremock/mappings" ডিরেক্টরিটি WireMock কন্টেইনারের ভিতরে /home/wiremock/mappings এ মাউন্ট করা হবে।


ডিরেক্টরিতে ফাইল রচনাটি বোঝার জন্য নীচে প্রকল্প কাঠামোর একটি অতিরিক্ত অংশ রয়েছে:

 load-tests/ |-- src/ | |-- test/ | | |-- resources/ | | | |-- wiremock/ | | | | |-- mappings/ | | | | | |-- health.json | | | | | |-- forecast.json


ওয়্যারমক দ্বারা মক কনফিগারেশন ফাইলগুলি সঠিকভাবে লোড এবং গ্রহণ করা হয়েছে তা নিশ্চিত করতে, আপনি একটি সহায়ক ধারক ব্যবহার করতে পারেন:

 helper.execInContainer("wget", "-O", "-", "http://wiremock:8080/health").getStdout() == "Ok"


সাহায্যকারী ধারকটি নিম্নরূপ বর্ণনা করা হয়েছে:

 def helper = new GenericContainer<>("alpine:3.17") .withNetwork(network) .withCommand("top")


যাইহোক, IntelliJ IDEA সংস্করণ 2024.1 WireMock-এর জন্য সমর্থন চালু করেছে , এবং IDE মক কনফিগারেশন ফাইল তৈরি করার সময় পরামর্শ প্রদান করে।

টার্গেট সার্ভিস লঞ্চ কনফিগারেশন

স্যান্ডবক্স পরিষেবা কন্টেইনারের ঘোষণাটি নিম্নরূপ দেখায়:

 def javaOpts = ' -Xloggc:/tmp/gc/gc.log -XX:+PrintGCDetails' + ' -XX:+UnlockDiagnosticVMOptions' + ' -XX:+FlightRecorder' + ' -XX:StartFlightRecording:settings=default,dumponexit=true,disk=true,duration=60s,filename=/tmp/jfr/flight.jfr' def sandbox = new GenericContainer<>(image) .withNetwork(network) .withNetworkAliases("sandbox") .withFileSystemBind("${reportDirectory}/logs", "/tmp/gc", READ_WRITE) .withFileSystemBind("${reportDirectory}/jfr", "/tmp/jfr", READ_WRITE) .withEnv([ 'JAVA_OPTS' : javaOpts, 'app.weather.url' : 'http://wiremock:8080', 'spring.datasource.url' : 'jdbc:postgresql://postgres:5432/sandbox', 'spring.datasource.username' : 'sandbox', 'spring.datasource.password' : 'sandbox', 'spring.jpa.properties.hibernate.default_schema': 'sandbox' ]) .waitingFor(new LogMessageWaitStrategy().withRegEx(".*Started SandboxApplication.*")) .withStartupTimeout(Duration.ofSeconds(10)) sandbox.start()

উল্লেখযোগ্য পরামিতি এবং JVM সেটিংস অন্তর্ভুক্ত:

  • আবর্জনা সংগ্রহ ইভেন্ট তথ্য সংগ্রহ.
  • JVM কর্মক্ষমতা ডেটা রেকর্ড করতে জাভা ফ্লাইট রেকর্ডার (JFR) ব্যবহার করুন।


অতিরিক্তভাবে, পরিষেবার ডায়াগনস্টিক ফলাফলগুলি সংরক্ষণ করার জন্য ডিরেক্টরিগুলি কনফিগার করা হয়েছে৷

লগিং

আপনি যদি একটি ফাইলে কোনো ধারকটির লগ দেখতে চান, যা সম্ভবত পরীক্ষার দৃশ্য রচনা এবং কনফিগারেশন পর্যায়ে প্রয়োজনীয়, আপনি ধারকটি বর্ণনা করার সময় নিম্নলিখিত নির্দেশাবলী ব্যবহার করতে পারেন:

 .withLogConsumer(new FileHeadLogConsumer("${reportDirectory}/logs/${alias}.log"))


এই ক্ষেত্রে, FileHeadLogConsumer ক্লাস ব্যবহার করা হয়, যা একটি ফাইলে সীমিত পরিমাণ লগ লেখার অনুমতি দেয়। এটি করা হয়েছে কারণ লোড-পরীক্ষার পরিস্থিতিতে সম্ভবত সম্পূর্ণ লগের প্রয়োজন নেই এবং পরিষেবাটি সঠিকভাবে কাজ করছে কিনা তা মূল্যায়ন করার জন্য একটি আংশিক লগ যথেষ্ট হবে।

লোড পরীক্ষা বাস্তবায়ন

লোড পরীক্ষার জন্য অনেক সরঞ্জাম আছে। এই নিবন্ধে, আমি তাদের তিনটি ব্যবহার করার কথা বিবেচনা করার প্রস্তাব করছি: Gatling, Wrk, এবং Yandex.Tank। তিনটি সরঞ্জাম একে অপরের থেকে স্বাধীনভাবে ব্যবহার করা যেতে পারে।

গ্যাটলিং

গ্যাটলিং একটি ওপেন-সোর্স লোড-টেস্টিং টুল যা স্কালায় লেখা। এটি জটিল পরীক্ষার পরিস্থিতি তৈরির অনুমতি দেয় এবং বিশদ প্রতিবেদন সরবরাহ করে। গ্যাটলিং-এর প্রধান সিমুলেশন ফাইলটি মডিউলের সাথে একটি স্কালা রিসোর্স হিসাবে সংযুক্ত, যা IntelliJ IDEA থেকে সম্পূর্ণ পরিসরের সমর্থন ব্যবহার করে কাজ করা সুবিধাজনক করে তোলে, যার মধ্যে সিনট্যাক্স হাইলাইটিং এবং ডকুমেন্টেশন রেফারেন্সের পদ্ধতির মাধ্যমে নেভিগেশন।


গ্যাটলিং এর জন্য ধারক কনফিগারেশন নিম্নরূপ:

 def gatling = new GenericContainer<>("denvazh/gatling:3.2.1") .withNetwork(network) .withFileSystemBind("${reportDirectory}/gatling-results", "/opt/gatling/results", READ_WRITE) .withFileSystemBind("${workingDirectory}/src/gatling/scala", "/opt/gatling/user-files/simulations", READ_WRITE) .withFileSystemBind("${workingDirectory}/src/gatling/resources", "/opt/gatling/conf", READ_WRITE) .withEnv("SERVICE_URL", "http://sandbox:8080") .withCommand("-s", "MainSimulation") .waitingFor(new LogMessageWaitStrategy() .withRegEx(".*Please open the following file: /opt/gatling/results.*") .withStartupTimeout(Duration.ofSeconds(60L * 2)) ); gatling.start()

সেটআপ অন্যান্য পাত্রে প্রায় অভিন্ন:

  • reportDirectory থেকে রিপোর্টের জন্য ডিরেক্টরি মাউন্ট করুন।
  • workingDirectory থেকে কনফিগারেশন ফাইলের জন্য ডিরেক্টরি মাউন্ট করুন।
  • workingDirectory থেকে সিমুলেশন ফাইলের জন্য ডিরেক্টরি মাউন্ট করুন।


অতিরিক্তভাবে, প্যারামিটারগুলি পাত্রে প্রেরণ করা হয়:

  • স্যান্ডবক্স পরিষেবার URL মান সহ SERVICE_URL পরিবেশ পরিবর্তনশীল৷ যদিও, পূর্বে উল্লিখিত হিসাবে, নেটওয়ার্ক উপনাম ব্যবহার করে সরাসরি দৃশ্যকল্প কোডে ইউআরএল হার্ডকোড করার অনুমতি দেয়।


  • একটি নির্দিষ্ট সিমুলেশন চালানোর জন্য -s MainSimulation কমান্ড।


কী পাস করা হচ্ছে এবং কোথায় তা বোঝার জন্য এখানে প্রকল্পের উত্স ফাইল কাঠামোর একটি অনুস্মারক রয়েছে:

 load-tests/ |-- src/ | |-- gatling/ | | |-- scala/ | | | |-- MainSimulation.scala # Main Gatling simulation file | | |-- resources/ | | | |-- gatling.conf # Gatling configuration file | | | |-- logback-test.xml # Logback configuration for testing

যেহেতু এটি চূড়ান্ত ধারক, এবং আমরা এটি সম্পূর্ণ হওয়ার পরে ফলাফল পাওয়ার আশা করি, তাই আমরা প্রত্যাশা সেট করি .withRegEx(".*Please open the following file: /opt/gatling/results.*") । এই বার্তাটি কন্টেইনার লগগুলিতে বা 60 * 2 সেকেন্ড পরে উপস্থিত হলে পরীক্ষা শেষ হবে৷


আমি এই টুলের দৃশ্যকল্পের DSL মধ্যে delve হবে না. আপনি প্রজেক্ট রিপোজিটরিতে ব্যবহৃত দৃশ্যের কোডটি দেখতে পারেন।

কাজ

Wrk একটি সহজ এবং দ্রুত লোড-টেস্টিং টুল। এটি ন্যূনতম সংস্থান সহ একটি উল্লেখযোগ্য লোড তৈরি করতে পারে। মূল বৈশিষ্ট্য অন্তর্ভুক্ত:

  • অনুরোধ কনফিগার করতে Lua স্ক্রিপ্টের জন্য সমর্থন.
  • মাল্টিথ্রেডিংয়ের কারণে উচ্চ কর্মক্ষমতা।
  • ন্যূনতম নির্ভরতা সহ ব্যবহারের সহজতা।


Wrk এর জন্য ধারক কনফিগারেশন নিম্নরূপ:

 def wrk = new GenericContainer<>("ruslanys/wrk") .withNetwork(network) .withFileSystemBind("${workingDirectory}/src/test/resources/wrk/scripts", "/tmp/scripts", READ_WRITE) .withCommand("-t10", "-c10", "-d60s", "--latency", "-s", "/tmp/scripts/getForecast.lua", "http://sandbox:8080/weather/getForecast") .waitingFor(new LogMessageWaitStrategy() .withRegEx(".*Transfer/sec.*") .withStartupTimeout(Duration.ofSeconds(60L * 2)) ) wrk.start()


স্যান্ডবক্স পরিষেবার অনুরোধের সাথে Wrk কাজ করার জন্য, একটি Lua স্ক্রিপ্টের মাধ্যমে অনুরোধের বিবরণ প্রয়োজন, তাই আমরা workingDirectory থেকে স্ক্রিপ্ট ডিরেক্টরি মাউন্ট করি। কমান্ডটি ব্যবহার করে, আমরা Wrk চালাই, স্ক্রিপ্ট এবং লক্ষ্য পরিষেবা পদ্ধতির URL উল্লেখ করে। Wrk তার ফলাফলের উপর ভিত্তি করে লগে একটি প্রতিবেদন লেখে, যা প্রত্যাশা সেট করতে ব্যবহার করা যেতে পারে।

ইয়ানডেক্স ট্যাঙ্ক

Yandex.Tank হল Yandex দ্বারা তৈরি একটি লোড-পরীক্ষার টুল। এটি বিভিন্ন লোড-টেস্টিং ইঞ্জিনকে সমর্থন করে, যেমন JMeter এবং Phantom. লোড পরীক্ষার ফলাফল সংরক্ষণ এবং প্রদর্শনের জন্য, আপনি বিনামূল্যে পরিষেবা ওভারলোড ব্যবহার করতে পারেন।


এখানে ধারক কনফিগারেশন:

 copyFiles("${workingDirectory}/src/test/resources/yandex-tank", "${reportDirectory}/yandex-tank") def tank = new GenericContainer<>("yandex/yandex-tank") .withNetwork(network) .withFileSystemBind("${reportDirectory}/yandex-tank", "/var/loadtest", READ_WRITE) .waitingFor(new LogMessageWaitStrategy() .withRegEx(".*Phantom done its work.*") .withStartupTimeout(Duration.ofSeconds(60L * 2)) ) tank.start()


স্যান্ডবক্সের জন্য লোড টেস্টিং কনফিগারেশন দুটি ফাইল দ্বারা প্রতিনিধিত্ব করা হয়: load.yaml এবং ammo.txt । কন্টেইনার বর্ণনার অংশ হিসাবে, কনফিগারেশন ফাইলগুলি reportDirectory অনুলিপি করা হয়, যা কার্যকরী ডিরেক্টরি হিসাবে মাউন্ট করা হবে। কী পাস করা হচ্ছে এবং কোথায় তা বোঝার জন্য এখানে প্রকল্পের উত্স ফাইলগুলির কাঠামো রয়েছে:

 load-tests/ |-- src/ | |-- test/ | | |-- resources/ | | | |-- yandex-tank/ | | | | |-- ammo.txt | | | | |-- load.yaml | | | | |-- make_ammo.py

রিপোর্ট

JVM পারফরম্যান্স রেকর্ডিং এবং লগ সহ পরীক্ষার ফলাফল build/${timestamp} ডিরেক্টরিতে সংরক্ষিত হয়, যেখানে ${timestamp} প্রতিটি পরীক্ষার টাইমস্ট্যাম্প উপস্থাপন করে।


নিম্নলিখিত রিপোর্ট পর্যালোচনার জন্য উপলব্ধ হবে:

  • আবর্জনা সংগ্রাহক লগ.
  • ওয়্যারমক লগ।
  • লক্ষ্য পরিষেবা লগ.
  • Wrk লগ.
  • JFR (জাভা ফ্লাইট রেকর্ডিং)।


যদি গ্যাটলিং ব্যবহার করা হয়:

  • গ্যাটলিং রিপোর্ট।
  • Gatling লগ.


Wrk ব্যবহার করা হলে:

  • Wrk লগ.


যদি Yandex.Tank ব্যবহার করা হয়:

  • ওভারলোডে অতিরিক্ত আপলোড সহ Yandex.Tank ফলাফল ফাইল।
  • Yandex.Tank লগ।


রিপোর্টের জন্য ডিরেক্টরি গঠন নিম্নরূপ:

 load-tests/ |-- build/ | |-- ${timestamp}/ | | |-- gatling-results/ | | |-- jfr/ | | |-- yandex-tank/ | | |-- logs/ | | | |-- sandbox.log | | | |-- gatling.log | | | |-- gc.log | | | |-- wiremock.log | | | |-- wrk.log | | | |-- yandex-tank.log | |-- ${timestamp}/ | |-- ...

উপসংহার

লোড টেস্টিং সফ্টওয়্যার বিকাশের জীবনচক্রের একটি গুরুত্বপূর্ণ পর্যায়। এটি বিভিন্ন লোড অবস্থার অধীনে একটি অ্যাপ্লিকেশনের কর্মক্ষমতা এবং স্থায়িত্ব মূল্যায়ন করতে সাহায্য করে। এই নিবন্ধটি Testcontainers ব্যবহার করে একটি লোড পরীক্ষার পরিবেশ তৈরি করার একটি পদ্ধতি উপস্থাপন করেছে, যা পরীক্ষার পরিবেশের একটি সহজ এবং দক্ষ সেটআপের জন্য অনুমতি দেয়।


টেস্ট কনটেইনারগুলি একীকরণ পরীক্ষার জন্য পরিবেশ তৈরিকে উল্লেখযোগ্যভাবে সরল করে, নমনীয়তা এবং বিচ্ছিন্নতা প্রদান করে। লোড পরীক্ষার জন্য, এই সরঞ্জামটি বিভিন্ন সংস্করণের পরিষেবা এবং ডাটাবেস সহ প্রয়োজনীয় কন্টেইনার স্থাপন করতে সক্ষম করে, যা পরীক্ষা পরিচালনা করা সহজ করে এবং ফলাফলের পুনরুত্পাদনযোগ্যতা উন্নত করে।


Gatling, Wrk, এবং Yandex.Tank-এর জন্য কনটেইনার সেটআপ সহ প্রদত্ত কনফিগারেশন উদাহরণগুলি দেখায় যে কীভাবে কার্যকরভাবে বিভিন্ন সরঞ্জামকে সংহত করা যায় এবং পরীক্ষার পরামিতিগুলি পরিচালনা করা যায়।


উপরন্তু, পরীক্ষার ফলাফল লগিং এবং সংরক্ষণ করার প্রক্রিয়া বর্ণনা করা হয়েছিল, যা অ্যাপ্লিকেশন কর্মক্ষমতা বিশ্লেষণ এবং উন্নতির জন্য অপরিহার্য। এই পদ্ধতিটি ভবিষ্যতে আরও জটিল পরিস্থিতি এবং অন্যান্য পর্যবেক্ষণ এবং বিশ্লেষণ সরঞ্জামগুলির সাথে একীকরণকে সমর্থন করার জন্য প্রসারিত করা যেতে পারে।


এই নিবন্ধে আপনার মনোযোগের জন্য আপনাকে ধন্যবাদ, এবং দরকারী পরীক্ষা লিখতে আপনার প্রচেষ্টায় সৌভাগ্য কামনা করছি!