আপনি কোনও ফাংশন কীভাবে পরীক্ষা করবেন যার একমাত্র উদ্দেশ্য একটি বাহ্যিক এপিআইকে জিজ্ঞাসা করা, কিন্তু এপিআই একটি জটিল ক্যোয়ারী সিনট্যাক্স ব্যবহার করে?


16

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

function retrieve_related_data(id)
{
  query = "[potentially long, syntactically complex query that
            uses param id to get some data]";
  results = api_wrapper.query(query);
  return results;
}

একটি মেক আপ এপিআই সহ আরও কংক্রিটের উদাহরণ:

function retrieveLifeSupportingObjectsWithinRegion(id)
{
  query = "
    within region(" + id + ") as r
    find objects matching hydration>0 and temp_range has 75
    send name, id, relative(position, r)        
  ";
  results = astronomicalObjectApiWrapper.query(query);
  return results;
}

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

আমি যা পরীক্ষা করতে চাই তা হ'ল কোনও প্রদত্ত ইনপুটের idজন্য ডেটার সঠিক সেটটি ফিরে আসে। আমি এটি পরীক্ষা করতে চাই যাতে কেউ যদি ক্যোয়ারীটি এমনভাবে ভুল করে দেয় idযে এটি ব্যর্থ হবে তার ভিত্তিতে সঠিক তথ্যটি আর ফিরিয়ে দিচ্ছে না, তবে আমিও চাই যে লোকেরাও অনুসন্ধানটি পরিবর্তন করার প্রয়োজন ছাড়াই এটিকে পরিমার্জন করতে ক্যোয়ারীটি পরিবর্তন করতে সক্ষম হবে পরীক্ষা.

বিকল্পগুলি যা আমি বিবেচনা করেছি:

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

  2. আমি আসল এপিআই-তে কোয়েরিটি জমা দিতে পারলাম, তবে পরীক্ষার সিস্টেমের নিয়ন্ত্রণের বাইরে বাইরের সিস্টেমের ডেটা পরিবর্তনের সাথে সাথে প্রত্যাশিত ফলাফলগুলি সময়ের সাথে সাথে পরিবর্তন করতে পারে।

  3. এটিতে থাকা ডেটাটি নিয়ন্ত্রণ করতে আমি আসল এপিআইয়ের একটি পরীক্ষা ইনস্টল করতে গিয়ে দেখতে পেলাম, তবে এটি অনেক প্রচেষ্টা।

আমি # 2 এর দিকে ঝুঁকছি এবং এটি আরও একটি ইন্টিগ্রেশন টেস্ট তৈরি করছি যা প্রায়শই চালিত হয় না এবং বাহ্যিক সিস্টেমের ডেটারে কতবার পরিবর্তন হয় তা পরীক্ষাটি ভেঙে দেয় seeing আমি মনে করি এটি আপাতত সহজ হবে, তবে আমি ভাবছি যে এই বিকল্পটি সমাধান করার জন্য আমি এর বিকল্প বা আরও ভাল উপায় নিয়ে ভাবছি না এমন বিকল্প রয়েছে কি না। কোন পরামর্শ প্রশংসা হবে।


আমি এটিকে ইউনিট পরীক্ষা হিসাবে ভাবছিলাম, তবে সম্ভবত এটি সত্যিই কোনও ইন্টিগ্রেশন পরীক্ষা বা নিম্ন-স্তরের গ্রহণযোগ্যতা পরীক্ষা?
জোশুয়া Coady

2
এটি কি কেবল পঠনযোগ্য এপিআই? অথবা, আপনি সক্ষম লিখতে ডেটা আপনি নির্ভরযোগ্যভাবে আপনার যাচাই করতে পারেন সার্চ বিরুদ্ধে?
এসভিডজেন

এই প্রশ্নটি কি "কীভাবে পরীক্ষা করতে হবে যে আমার স্ক্যুএল (= জটিল সিনট্যাক্স) সংশোধিত ডেটা ফেরত দেয়"? ডাটাবেসগুলির সাথে আপনার সাধারণত কয়েকটি ইন্টিগ্রেশন টেস্ট থাকে যা ক্রড-এসকিএল-সিনট্যাক্স এবং বিজনেস ব্লগ যাচাই করার জন্য একটি উপহাসকৃত রিপোজিটরি ফ্যাসেড পরীক্ষা করে
বি

উত্তর:


7

মনে হতে পারে বাহ্যিক এপিআই প্রতিক্রিয়া যাচাই করা আমরা আমাদের ফাংশনটি পরীক্ষা করব, তবে এটি সম্পূর্ণ সত্য হবে না। একরকম, আমরা বাহ্যিক এপিআই এবং পরিবেশ যেখানে এপিআই চলছে সেগুলি পরীক্ষা করব।

তৃতীয় পক্ষের লিখিত কোড নয়, আমরা যে কোডটি লিখেছি তার প্রত্যাশিত আচরণের গ্যারান্টি হিসাবে আমাদের পরীক্ষাগুলি সম্বোধন করা উচিত।

একটি নির্দিষ্ট ডিগ্রী পর্যন্ত, আমরা নির্ভর করি এমন APIs এবং libs এর সঠিক ফাংশনের উপর আমাদের বিশ্বাস রাখতে হবে। উদাহরণস্বরূপ, আমরা সাধারণত কার্যকর করি এমন ফ্রেমওয়ার্ক উপাদানগুলি পরীক্ষা করি না।

আমি কেন এমন বলব?

আমি যা পরীক্ষা করতে চাই তা হ'ল একটি প্রদত্ত ইনপুট আইডির জন্য ডেটার সঠিক সেটটি ফিরে আসে

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

একটি ভিন্ন উদ্বেগ চুক্তিটি বৈধতা দেওয়া। ইন্টিগ্রেশনটি যে কোনও রিলিজ বা মোতায়েনের আগে, প্রত্যাশার মতো এখনও কাজ করছে তা নিশ্চিত করার জন্য আমি চুক্তি পরীক্ষার 1 টি যথেষ্ট কার্যকর বলে মনে করব।

আমি এটি পরীক্ষা করতে চাই যাতে কেউ যদি ক্যোয়ারীটি এমনভাবে ভুল করে দেয় তবে এটি আর আইডির ভিত্তিতে সঠিক ডেটা ফেরত দিবে না যে এটি ব্যর্থ হবে will

যদি ক্যোয়ারী ঠিক আছে তবে এপিআই-তে বাগের কারণে ডেটা ভুল হয়েছে কি? কেবল তথ্যই আমাদের নিয়ন্ত্রণের বাইরে চলে যায়। যুক্তিটিও তাই।

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

তবে আমি এটিও চাই যে পরীক্ষাগুলিও পরিবর্তন করার প্রয়োজন ছাড়াই লোকেরা এটিকে পরিমার্জন করতে ক্যোয়ারিটি সংশোধন করতে সক্ষম হবে।

আমি এই জাতীয় উদ্দেশ্যে একটি সরঞ্জাম বাস্তবায়নের পরামর্শ দিই। এটি এতটা সহজ হতে পারে:

  • এমন একটি শ্রেণি যা পরীক্ষা হিসাবে চলে তবে তা পরীক্ষার পরিকল্পনার অন্তর্ভুক্ত নয়
  • একটি শেল স্ক্রিপ্ট + কার্ল

বা আরও পরিশীলিত কিছু। উদাহরণস্বরূপ, একটি স্বতন্ত্র ক্লায়েন্ট।

যাইহোক, প্রশ্নের অধীনে ফাংশন, দুই ধরণের পরীক্ষার জন্য ভাল:

  • ইউনিট পরীক্ষা. যেমনটি আপনি বলেছেন, আপনাকে বাহ্যিক এপিআইতে স্ট্যাব করতে হবে, তবে এটি ইউনিট পরীক্ষার পুরো উদ্দেশ্য। নির্ভরতা বিচ্ছিন্ন করে আমাদের কোডটি পরীক্ষা করা।

  • ইন্টিগ্রেশন পরীক্ষা. কোডটি কেবলমাত্র সঠিক অনুরোধটি প্রেরণ করে না তবে এটি প্রতিক্রিয়া সামগ্রী, ত্রুটি, পুনর্নির্দেশগুলি ইত্যাদি সঠিকভাবে পরিচালনা করে তা এই সমস্ত ক্ষেত্রে পরীক্ষা করে দেখুন তবে ডেটা পরীক্ষা করবেন না

পার্শ্ব নোট: আপনার প্রশ্নটির অনুরূপ - আপনি অ্যাপটির এসকিউএল স্টেটমেন্টগুলি কীভাবে পরীক্ষা করেন?

সম্পর্কিত প্রশ্ন :


1: আপনি এই বিষয়টি সম্পর্কে @ ডকব্রাউনের উত্তরে আগ্রহী হতে পারেন


"সমস্যা (আইএমও) হ'ল আপনি বাহ্যিক এপিআই পরীক্ষায় খুব বেশি মনোনিবেশ করেছেন।" - আমি জিজ্ঞাসাবাদী বাহ্যিক এপিআই মোটেও পরীক্ষায় আগ্রহী এমনটি নির্দেশ করে এমন কিছু দেখতে পাচ্ছি না। এছাড়াও, আপনি "বাহ্যিক এপিআই" স্টাব বলছেন, তবে প্রশ্নদাতার "খুব সহজ" বিকল্পটি, "খুব ভঙ্গুর" বিকল্প, "খুব জটিল" বিকল্প বা কোনও চতুর্থ বিকল্প ব্যবহার করা উচিত কিনা সে সম্পর্কে আপনার কোনও পরামর্শ আছে?
ট্যানার সোয়েট

বাহ্যিক প্রশ্নটি জিজ্ঞাসা করছে যে কোনও বাহ্যিক এপিআইতে কল করে এমন কোনও ফাংশন কীভাবে পরীক্ষা করা যায়। তবে তাঁর সন্দেহগুলি পড়া আমার কাছে মনে হয়েছে যে তিনি ক্যোয়ারী এবং এর ফলাফলগুলি পরীক্ষা করার জন্য খুব বেশি জোর দিয়েছিলেন। আমি 4 টি পরামর্শ দিয়েছি: (1) এপিআই এর পরীক্ষা করবেন না। (২) কোয়েরি টিউন করার জন্য ইন্টিগ্রেশন টেস্টগুলি ওয়ার্কব্যাঞ্চ হিসাবে ব্যবহার করবেন না। পরিবর্তে একটি সরঞ্জাম তৈরি করুন। (3) মূল প্রশ্নে ফিরে আসুন, এর একক এবং সংহতকরণ পরীক্ষা করুন। তবে এপিআই প্রতিক্রিয়াটির বিষয়বস্তু বৈধ নয়। (৪) প্রকল্প পরিচালকের কাছে জিজ্ঞাসা করুন যদি তারা প্রকল্পের পরীক্ষার পরিকল্পনার অংশ হিসাবে বহিরাগত এপিআইয়ের একটি পরীক্ষার স্যুট তৈরি করতে পারে / করতে পারে কিনা।
লাইভ

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

1
আইএমও, সর্বোত্তম উপায়ে কার্যকরী পরীক্ষা করা হচ্ছে, যেখানে যে ধারাটি কখনও সত্য হতে পারে না সেখানে পরিবর্তনটি আমার এক বা একাধিক কার্যকরী পরীক্ষায় ভিন্ন আচরণের কারণ ঘটায়। ইউটি পরীক্ষার পরিকল্পনার সামান্য অংশ।
লাইভ

2
সাউন্ডিং বোর্ড হওয়ার জন্য ধন্যবাদ আমি শেষ পর্যন্ত অনুমান করি, যদিও ক্যোয়ারিতে এতে কাস্টম লজিক রয়েছে, এটি ইউনিট পরীক্ষার ডোমেনের বাইরে কারণ কোয়েরিটি কোড যা পরীক্ষা করা হচ্ছে এটি সিস্টেমের বাইরে "চালিত" হয়। আমার দেখার জন্য আমার কেবলমাত্র একজনের প্রয়োজন ছিল যে এটি দেখার আগে একাধিকবার;)
জোশুয়া কোডি

2

আমি ইউনিট চেকগুলি দেখেছি যা উত্পন্ন ক্যোয়ারী স্ট্রিংটি প্রত্যাশিত মানের সাথে মেলে।

যাহোক. সীমিত ব্যবহার হলে এটি আমার মতে ছিল। ক্যোরিয়াম সিনট্যাক্সটি জটিল, সম্ভবত বগী ছিল, তাই এ যাচাই করার জন্য অবিরাম সম্ভাবনা ছিল এবং বি স্ট্রিংটি 'সঠিকভাবে' উত্পন্ন হলেও, লাইভ পরিবেশে অপ্রত্যাশিত ফলাফল ফিরে আসতে পারে।

আমি মনে করি আপনি নিজের বিকল্পটি অনুসরণ করার পক্ষে ঠিক বলেছেন the লাইভ ইভেন্টের বিপরীতে ইন্টিগ্রেশন পরীক্ষা চালান।

যতক্ষণ না এগুলি ধ্বংসাত্মক, ততক্ষণ এগুলি আপনার লিখতে হবে প্রথম পরীক্ষাগুলি, কারণ তারা ধরবে যদিও কোনও ত্রুটির কারণ চিহ্নিত না করে।

বিকল্প 3 'ডামি ডেটা সহ একটি পরীক্ষার উদাহরণ স্থাপন করুন' উন্নত। তবে আপনার পরীক্ষার লিখনকে প্রভাবিত করে না, কারণ আপনি পরীক্ষার সার্ভারে একই পরীক্ষাগুলি নির্দেশ করতে পারেন যদি এবং কখন এটি একটি স্থাপনার সময়কালের একটি ভাল ব্যবহার হয়ে যায়।


0

এটি এপিআই-র উপর নির্ভর করে, তবে সম্ভব হলে বিকল্প # 3 (ব্যক্তিগত পরীক্ষার উদাহরণ) এ যান।

আপনার উল্লেখ করা কারণগুলির কারণে এপিআই (বিকল্প # 1) টি স্ট্যাবিং করা সবচেয়ে খারাপ বিকল্প, এবং এই রুটে যাওয়া সম্ভবত ভাল (অনেক সময় নষ্ট সময়) এর চেয়ে বেশি ক্ষতি করতে পারে।

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

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


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

আমি বলছি খারাপ পরীক্ষাগুলি অবশ্যই ক্ষতিকারক। ফ্লেকি পরীক্ষাগুলি প্রচুর সময় এবং প্রচেষ্টা নষ্ট করে এবং লোকেরা সামগ্রিক ইউনিট পরীক্ষায় বিশ্বাস হারাতে পারে। পরীক্ষাগুলি যা প্রয়োগের পরিবর্তনের (# 1) সাথে বিরতি দেয় বা এলোমেলোভাবে যখন ডেটা পরিবর্তন (# 2) ভাল পরীক্ষা না করে।
মিশাল টেনেনবার্গ

ইন্টিগ্রেশন টেস্ট ডেটা পরীক্ষা করে না। এটাই. তারা পরীক্ষাটি ভেঙে ফেলতে পারে না, কেবল সংহতিকে বৈধতা দেয়। পরীক্ষা বিশ্বাসের বিষয় নয় যে ভাল অভ্যাসগুলি প্রয়োগের ক্ষেত্রে মূল্য যুক্ত করে
লাইভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.