এখন একাধিক টেস্টের পর আপনি সম্ভবত আপনি আপনার অগ্রগতি সম্পর্কে বেশ ভাল অনুভব করছেন। তবে আরও কোড দক্ষতা উন্নত করার অন্যান্য উপায় আছে— আপনি হয়তো খেয়াল করছেন যে এ পর্যন্ত আপনাকে setUp()
এবং একটি tearDown()
মেথড প্রতিটি ফাইলে অন্তর্ভুক্ত করতে হয়েছে, যেগুলো বর্তমান কন্সট্রাক্টর দিয়ে পরিচালিত হচ্ছে আমরা এই সিরিজে দেখেছি। আপনি কয়েক ডজন পরীক্ষা থেকে থাকে তাহলে সেই কোড অনুলিপি অনেক! এই নিবন্ধে আমরা দেখব কিভাবে setUp()
/tearDown()
কোড একটি TestBase
ক্লাসে সকল টেস্টের জন্য রাখা যায়, যা তারপর প্রতিটি টেস্ট ফাইলের মধ্যে ইম্পোর্ট করা যাবে।
test_base.py
প্রথমত, একটি নতুন ফাইল তৈরি করুন test_base.py
, আপনার টেস্ট কেইস হিসেবে একিই ডিরেক্টরির মধ্যে।
পরবর্তীতে, আপনার প্রয়োজনীয় স্টেটমেন্ট যা সাধারণ সেট আপ এর সাথে সম্পর্কযুক্ত (unittest
, Marionette
and time
) ফাইলটিতে সরিয়ে ফেলুন, একটি TestBase
ক্লাস সহ যার মধ্যে setUp()
and tearDown()
মেথডগুলো, এবং সাহায্যকারি সাধারণ helper ফাংশনগুলো আছে (such as unlock_screen()
)। ফাইলটি কিছুটা এরকম দেখানো উচিত:
import time import unittest from marionette import Marionette class TestBase(unittest.TestCase): def unlock_screen(self): self.marionette.execute_script('window.wrappedJSObject.lockScreen.unlock();') def kill_all(self): self.marionette.switch_to_frame() self.marionette.execute_async_script(""" // Kills all running apps, except the homescreen. function killAll() { let manager = window.wrappedJSObject.AppWindowManager; let apps = manager.getApps(); for (let id in apps) { let origin = apps[id].origin; if (origin.indexOf('homescreen') == -1) { manager.kill(origin); } } }; killAll(); // return true so execute_async_script knows the script is complete marionetteScriptFinished(true); """) def setUp(self): # Create the client for this session. Assuming you're using the default port on a Marionette instance running locally self.marionette = Marionette() self.marionette.start_session() # Unlock the screen self.unlock_screen() # kill all open apps self.kill_all() # Switch context to the homescreen iframe and tap on the contacts icon time.sleep(2) home_frame = self.marionette.find_element('css selector', 'div.homescreen iframe') self.marionette.switch_to_frame(home_frame) def tearDown(self): # Close the Marionette session now that the test is finished self.marionette.delete_session()
আপনার টেস্ট ফাইল আপডেট করা
আপনার test_base.py
ফাইল তৈরি হওয়ার পর, আপনাকে আপনার টেস্ট ফাইলে TestBase
ইমপোর্ট করতে হবে, এবং টেস্ট ক্লাসগুলো TestBase
ক্লাস প্রসারিত করতে পরিবরতন করতে হবে:
import unittest from marionette import Wait from marionette import By from test_base import TestBase class TestContacts(TestBase): def test(self): # Tests in here if __name__ == '__main__': unittest.main()
পুনরায় আপনার টেস্ট ফাইল চালানোর চেষ্টা করুন।
এটা এখন অনেক বেশি বোঝা না যেতে পারে কিন্তু যখন আপনার কয়েক ডজন অথবা শতাধিক টেস্ট থাকবে এটি আসলেই অনেক কোড ডুপ্লিকেট হওয়ার সমস্যা যাতে না হয় সাহায্য করবে।