একটি জিইউআইয়ের জন্য রক্ষণযোগ্য, ভঙ্গুর নয়, ইউনিট পরীক্ষা কীভাবে লিখবেন?


16

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

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


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


1
@ মিশেলডুরান্ট: আপনি সাধারণভাবে ইউআই পরীক্ষার বিষয়ে প্রশ্নটি সম্পাদনা করেছেন, যখন আমি প্রাথমিকভাবে ইউনিট পরীক্ষার বিষয়ে জিজ্ঞাসা করেছি। আমি একীকরণ পরীক্ষাগুলি বজায় রাখা আরও কঠিন এবং আমি যখনই সম্ভব তাদের উপর ইউনিট পরীক্ষা পছন্দ করি।
mik01aj

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

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

2
সম্পর্কিত তবে ডুপ্লিকেট নয় যেহেতু এটি গুই পরীক্ষাগুলি সম্পর্কে: প্রোগ্রামার্স.সটাকেক্সচেঞ্জ
প্রশ্নগুলি १०৯70০৩/২

উত্তর:


3

জিইউআই পরীক্ষাগুলির সাথে একটি সাধারণ সমস্যা ... এই পরীক্ষাগুলিগুলি ভঙ্গুর হিসাবে বিবেচিত হওয়ার মূল কারণ হ'ল তারা জিইউআইতে পরিবর্তনটি টিকতে পারবেন না যা প্রয়োজনীয়তার পরিবর্তন নয় is । আপনার পরীক্ষা কোডটি এমনভাবে গঠন করার জন্য প্রচেষ্টা করা উচিত যাতে জিইউআইতে পরিবর্তনগুলি পরীক্ষাগুলির একক জায়গায় বিচ্ছিন্ন হয়।

উদাহরণস্বরূপ, এমন একটি পরীক্ষা বিবেচনা করুন যা শব্দ হিসাবে বর্ণিত হয়:

যখন ব্যবহারকারী ফোনেম্বার ক্ষেত্রের মধ্যে '999' প্রবেশ করে এবং সেভ বোতামটি ক্লিক করেন, ত্রুটি বার্তা পপআপটিকে 'অবৈধ ফোন নম্বর' বলা উচিত।

আপনি যখন ইন্টারফেসটি পুনরায় কাজ করবেন তখন এই পরীক্ষার জন্য এখানে প্রচুর জায়গা ভাঙতে হবে, এমনকি যদি বৈধতার জন্য প্রয়োজনীয়তাটি থেকে যায়।

এখন, এটিকে একটি বিকল্প বিকল্প শব্দবন্ধের মধ্যে রাখি:

যখন ব্যবহারকারী ফোনোনম্ব হিসাবে '999' প্রবেশ করে এবং প্রোফাইল পৃষ্ঠাটি সংরক্ষণ করে, তখন এটি একটি ত্রুটি দেখানো উচিত যা 'অবৈধ ফোন নম্বর' বলে

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


4

এটি একটি সাধারণ সমস্যা। আমি মনোযোগ দিতে হবে:

  • আপনি উপাদানগুলির নাম কীভাবে রাখবেন

    উপাদান সনাক্ত করতে CSS আইডি বা শ্রেণি ব্যবহার করুন। সিএসএস আইডি ব্যবহার করে পছন্দ করুন যখন বস্তুটি অনন্য। আপনি যে কাঠামোটি ব্যবহার করছেন তা বিবেচনা করুন, উদাহরণস্বরূপ, রুবি অন রেলগুলির সাথে nameঅ্যাট্রিবিউটটি স্বয়ংক্রিয়ভাবে বরাদ্দ করা হয়েছে এবং সিএসএস আইডি বা ক্লাস ব্যবহার করার চেয়ে (স্বজ্ঞাতই) ভাল হতে পারে

  • আপনি উপাদানগুলি কীভাবে চিহ্নিত করবেন।

    table/tr/td/tdযেমন td[id="main_vehicle"বা হিসাবে ফর্মের পক্ষে অবস্থানগত সনাক্তকারীদের এড়িয়ে চলুন td[class='alternates']। উপযুক্ত হলে ডেটা অ্যাট্রিবিউট ব্যবহার করা বিবেচনা করুন। আরও ভাল করে যেমন এড়ানোর বিন্যাস ট্যাগ চেষ্টা <td>পুরাপুরি যাতে আপনি উপরে হয় একটি স্প্যান এবং ব্যবহারের যে, যেমন যোগ করতে পারিনি জন্য <span id="main_vehicle">বা এই ধরনের যেমন একটি ওয়াইল্ড কার্ড নির্বাচক *[id="main_vehicle"]যেখানে *এখন একটি div, বিঘত, TD, ইত্যাদি হতে পারে

  • পরীক্ষা নির্দিষ্ট ডেটা অ্যাট্রিবিউটগুলি ব্যবহার করা যা কেবলমাত্র QA এবং পরীক্ষার জন্য ব্যবহৃত হয়।

  • উপাদানগুলির জন্য অপ্রয়োজনীয় যোগ্যতা এড়িয়ে চলুন। আপনি নিম্নলিখিত ব্যবহার করে নিজেকে খুঁজে পেতে পারেন:

    body.main div#vehicles > form#vehicle input#primary_vehicle_name

    তবে এটির জন্য ইনপুট ক্ষেত্রটি গাড়ির যথাযথ আইডি সহ কোনও ফর্মের মধ্যে থাকতে হবে এবং একটি বডি সহ একটি পৃষ্ঠা রয়েছে যা প্রধান শ্রেণীর এবং একটি ডিভি ডি যে যানবাহনের আইডি সহ একটি আইডি সহ একটি ফর্মের তাত্ক্ষণিক শিশু রয়েছে with গাড়ির। যে কোনও কাঠামোর যে কোনও পরিবর্তন এবং পরীক্ষা বিরতি। এই ক্ষেত্রে আপনি এটি পেতে পারেন

    input#primary_vehicle_name

    উপাদানটি অনন্যভাবে সনাক্ত করতে যথেষ্ট is

  • দৃশ্যমান পাঠ্যের উল্লেখ করে এমন পরীক্ষাগুলি এড়িয়ে চলুন। ব্যবহারকারীর কাছে প্রদর্শিত পৃষ্ঠাগুলি সাইটটি রক্ষণাবেক্ষণ এবং আপডেট হওয়ার সাথে সাথে সময়ের সাথে সাথে সাধারণত পরিবর্তিত হয়, সুতরাং সিএসএস আইডি এবং সিএসএস শ্রেণি বা ডেটা অ্যাট্রিবিউট হিসাবে সনাক্তকারী ব্যবহার করুন। যেমন উপাদানসমূহ form, inputএবং selectফর্ম ব্যবহার এছাড়াও চিহ্নিতকরণের উপাদানের ভাল অংশ, সাধারণত আইডি বা বর্গ, যেমন সঙ্গে একযোগে হয় li.vehicleবা input#first-vehicle এছাড়াও আপনি আপনার নিজস্ব শনাক্তকারী, যেমন যুক্ত করতে পারেন <div data-vehicle='dodge'>। এইভাবে আপনি উপাদান আইডি বা ক্লাস ব্যবহার করা এড়াতে পারেন, সম্ভবত বিকাশকারী এবং ডিজাইনারদের দ্বারা এটি পরিবর্তন করা যেতে পারে। আমি আসলে সময়ের সাথে খুঁজে পেয়েছি যে কেবলমাত্র বিকাশকারী এবং ডিজাইনারদের সাথে কাজ করা এবং নাম এবং স্কোপগুলির সাথে একমত হওয়া ভাল। এটা কঠিন.

  • কিভাবে স্থির ডেটা বজায় রাখা হয়।

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

    storedVars["eqv_auto_year"] = "2015";
    storedVars["eqv_auto_make_1"] = "ALFA ROMEO";
    storedVars["eqv_auto_make_2"] = "HONDA";`  
    

    পৃষ্ঠাতে আরো এ বস্তু সেলেনিয়াম উইকি এবং সেলেনিয়াম ডক্স

  • বিকাশকারীদের সাথে যোগাযোগ।

    'বিকাশকারীগণের পরিবর্তে QA অটোমেশনটি ভাঙ্গা' শর্তে প্রযুক্তিগত পন্থা নির্বিশেষে এটি একটি কর্মপ্রবাহ সমস্যা। আপনার এটি নিশ্চিত করতে হবে: প্রত্যেকেই একই দল; বিকাশকারী একই সংহত পরীক্ষা চালান; মান উভয় গ্রুপের দ্বারা সম্মত এবং অনুসরণ করা হয়; সম্পন্ন সংজ্ঞা চলমান এবং সম্ভবত ইউআই পরীক্ষা আপডেট করা অন্তর্ভুক্ত; বিকাশকারী এবং পরীক্ষার জোড় পরীক্ষার পরিকল্পনা এবং উভয়ই টিকিট গ্রুমিংয়ে উপস্থিত হন (যদি চপল করে থাকেন) এবং সাজসজ্জার অংশ হিসাবে ইউআই পরীক্ষার বিষয়ে কথা বলেন। আপনার নিশ্চিত করা উচিত যে আপনি নামকরণের জন্য যে কোনও পদ্ধতির এবং কৌশল ব্যবহার করেন তা অ্যাপ্লিকেশন বিকাশকারীদের সাথে সমন্বিত। আপনি যদি একই পৃষ্ঠাতে না পান তবে আপনি অবজেক্টের নামকরণের বিষয়ে সংঘর্ষের পছন্দ করতে পারেন। আমি সম্প্রতি একটি রুবি প্রকল্পের জন্য তৈরি পৃষ্ঠা পৃষ্ঠা পদ্ধতির কয়েকটি উদাহরণ:

    def css_email_opt_in_true
      'auto_policy[email_opt_in][value=1]'
    end 
    
    def css_phone_opt_in
      '*[name="auto_policy[phone_opt_in]"]'
    end 
    
    def css_phone_opt_in_true
      'input[name=phone_opt_in][value=true]'
    end 
    
    def css_credit_rating
      'auto_policy[credit_rating]'
    end
    

    এখানে জাভাস্ক্রিপ্ট ভেরিয়েবল হিসাবে একই পৃষ্ঠা অবজেক্টস:

    storedVars["css_email_opt_in"] = "css=*[name='auto_policy[email_opt_in]']";
    storedVars["css_phone_opt_in"]="css=*[name='auto_policy[phone_opt_in]']";
    storedVars["css_phone_opt_in_true"]="css=input[name='phone_opt_in'][value=true]";
    storedVars["css_credit_rating"]="css=select[name='auto_policy[credit_rating]']";
    

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

1
আহ্, এটা জেনে রাখা ভাল। হ্যাঁ এই স্টাফের জন্য আমি ওয়ার্কফ্লো এবং সাংগঠনিক ক্যু-বিকাশকারী মিথস্ক্রিয়ায় ফোকাস করব
মাইকেল ডুরান্ট

1
আমি অন্যদের জন্যও তথ্য পোস্ট করছি যারা আপনার প্রশ্নটি সন্ধান করে এবং আপনার কাছে থাকা সমস্ত টুকরোগুলি নাও থাকতে পারে এবং সেগুলি সম্পর্কেও জানেন না।
মাইকেল ডুরান্ট

1
আমি আপনার মতামতের ভিত্তিতে আমার শেষ বুলেট পয়েন্টটি প্রসারিত করেছি।
মাইকেল ডুরান্ট

1
এবং আমি উপাদানগুলি নামকরণ এবং সনাক্তকরণ এবং দৃশ্যমান পাঠ্য ব্যবহার না করার বিষয়ে অংশগুলি আপডেট করেছি।
মাইকেল ডুরান্ট

3

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

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

অন্যদিকে, ব্যবসায়ের যুক্তি পরীক্ষা ইউনিট পরীক্ষায় করা যেতে পারে। এবং এটি আপনার প্রশ্নের উত্তর। মডেলের সমস্ত কিছুর পরীক্ষা করুন, এবং আপনি যদি চান এবং করতে চান তবে আপনি নিয়ামকের কোডও পরীক্ষা করতে পারেন।


জিইউআইগুলি অনেক পরিবর্তন হয়

এটি তখনই ঘটতে পারে যখন আপনি প্রয়োজনীয়তা পরিবর্তন করতে পারেন। যখন কোনও প্রয়োজনীয়তা পরিবর্তন হয়, কোডটি সংশোধন করা ছাড়া এটির চারপাশের কোনও উপায় নেই। আপনি যদি ভাল নকশা এবং আর্কিটেকচার তৈরি করতে পরিচালনা করেন তবে পরিবর্তনটি অনেক জায়গায় প্রচার করবে না।


2
আমি মনে করি এটি একটি ভাল পয়েন্ট। সম্ভবত আমি কেবল এমভিসি ভুল করছি :) বিটিডব্লু, আমি বিশ্বাস করি যে আপনি যখন প্রচুর ব্যবহারকারীর জন্য একটি ওয়েব প্ল্যাটফর্ম তৈরি করেন তখন পরিবর্তনের প্রয়োজনীয়তাগুলি অনিবার্য। আপনার ব্যবহারকারীরা জিইআইআই ব্যবহার শুরু না করা পর্যন্ত তাদের আচরণ কেমন হবে তা আপনি জানেন না।
mik01aj

2

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

তুলনা হিসাবে:

ইউনিট পরীক্ষা

মূল : validateEmail()একটি নিক্ষেপ করা উচিতInvalidData ব্যতিক্রম । যা আপনার ইউনিট পরীক্ষায় সঠিকভাবে আচ্ছাদিত।

পরিবর্তন : validateEmail()একটি InvalidEmailব্যতিক্রম নিক্ষেপ করা উচিত । এখন আপনার পরীক্ষাটি ভুল হয়েছে, আপনি এটি আপডেট করুন এবং সবকিছু আবার সবুজ।

জিইউআই পরীক্ষা

মূল : একটি অবৈধ ইমেল প্রবেশের ফলে "অবৈধ ডেটা প্রবেশ করানো" সম্বলিত একটি পপআপ ত্রুটি বাক্সের ফলাফল হবে। আপনার পরীক্ষাগুলি দ্বারা সঠিকভাবে সনাক্ত করা।

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


মনে রাখবেন আপনি ইনপুট এবং আউটপুটগুলির জন্য পরীক্ষা করছেন - কিছু ভাল সংজ্ঞায়িত আচরণ। এটি কোনও জিইউআই পরীক্ষা বা ইউনিট পরীক্ষা বা ইন্টিগ্রেশন পরীক্ষা ইত্যাদি নির্বিশেষে

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