Skip to content

Shakiba-Alipour/Money-Tracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

پروژه سلنیوم آزمون نرم افزار

پاییز 1401

شرح پروژه

با استفاده از ابزار سلنیوم، یک مجموعه تست برای روال لاگین یک پروژه تبدیل واحد پولی انجام داده ایم.

unittest

این کتابخانه در پایتون، وظیفه تست کردن مواردی که ما برای آن تعیین می کنیم را دارد. پروژه ما یک کلاس دارد که از کلاس TestCase این کتابخانه ارث بری می کند. این کلاس، متدهای مختلفی دارد که به تفصیل در زیر آنها را معرفی خواهیم کرد:

تابع توضیحات
setUp وظیفه این متد، انجام کارهایی است که نیاز است قبل از هر تست انجام پذیرد. در پروژه ما، وظیفه این متد راه اندازی درایور سلنیوم و رفتن به آدرس پروژه ری اکت اجرا شده است (http://localhost:3000)
tearDown وظیفه این متد، انجام کارهایی است که پس از هر تست باید انجام شود. در پروژه ما، وظیفه این متد بستن درایور است.

هنگامی که ما یک کلاس بسازیم که از TestCase ارث بری کند، هر تابع به جز توابع بالا را که بنویسیم، یک تست کیس محسوب می شود.

نصب و اجرا

برای اجرای پروژه باید کارهای زیر را انجام دهیم: ابتدا باید یک محیط مجازی (virtual environment)ایجاد کنیم. برای این کار، دستور زیر را در ترمینال وارد می کنیم:

virtualenv env

اگر virtualenv روی سیستم شما نصب نبود باید با دستورpip install virtualenvآن را نصب کنید.

پس از ساخته شدن محیط مجازی، آن را فعال می کنیم:

.\env\Scripts\activate

بعد از فعال سازی، پکیج سلنیوم را به وسیله دستور زیر نصب می کنیم:

pip install selenium

حال هر زمان که بخواهیم پروژه را اجرا کنیم، با دستور python .\Demo\sample1.py آن را اجرا می کنیم.

شرح تست های پروژه:

test_signup_click

هنگام اجرای پروژه ری اکتی، یک لینک signin در صفحه دیده می شود. به کمک inspect گرفتن، مقدار xpath آن لینک را گرفته و به وسیله درایور سلنیوم روی آن کلیک می کنیم. اگر url صفحه به http://localhost:3000/auth تغییر یافت، تست به درستی کار می کند.

def test_signup_click(self):
        signup_link = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/p[1]/a')
        signup_link.click()
        self.assertEqual(self.driver.current_url, 'http://localhost:3000/auth')

test_email_field

پس از بازشدن صفحه لاگین، یک فیلد ایمیل در آن موجود است. مقدار xpath آن اینپوت را به دست آورده و به وسیله متد send_keys سلنیوم، یک ایمیل معتبر را در آن وارد می کنیم. پس از وارد کردن مقدار ایمیل، اگر attribute value آن اینپوت برابر با همان مقدار ایمیل بود، تست صحیح می باشد.

def test_email_field(self):
        signup_link = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/p[1]/a')
        signup_link.click()
        emailField = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/form/div/div/input')
        emailField.send_keys('toobaahrabi@gmail.com')
        self.assertEqual(emailField.get_attribute('value'), 'toobaahrabi@gmail.com')

test_btn_click

هنگامی که روی دکمه سابمیت کلیک می شود، اینپوت حالت غیرفعال دارد. پس ما ابتدا روی دکمه کلیک می کنیم و اگر attribute disabled اینپوت فعال باشد، تست درست کار می کند. برای این کار از متد is_enabled() سلنیوم استفاده کرده ایم.

def test_btn_click(self):
        signup_link = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/p[1]/a')
        signup_link.click()
        emailField = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/form/div/div/input')
        emailField.send_keys('toobaahrabi@gmail.com')
        submit_button = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/form/div/div/button')
        submit_button.click()
        self.assertEqual(emailField.is_enabled(), False)

test_btn_loading_class

هنگامی که روی دکمه سابمیت کلیک می شود، یک کلاس loading به کلاس هایش اضافه می شود و انیمیشن لودینگ روی دکمه قرار میگیرد. به وسیله get_attribute('class')این تست را بررسی می کنیم.

def test_btn_loading_class(self):
        signup_link = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/p[1]/a')
        signup_link.click()
        emailField = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/form/div/div/input')
        emailField.send_keys('toobaahrabi@gmail.com')
        submit_button = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/form/div/div/button')
        submit_button.click()
        self.assertEqual('loading' in submit_button.get_attribute('class'), True)

test_empty_field

اگر هیچ مقداری در فیلد ایمیل قرار ندهیم، نباید عملیات اجرا شده و دکمه حالت لودینگ داشته باشد. در نتیجه کلاس لودینگ نباید در لیست کلاس های دکمه باشد.

def test_empty_field(self):
        signup_link = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/p[1]/a')
        signup_link.click()
        submit_button = self.driver.find_element(By.XPATH, '//*[@id="root"]/div/form/div/div/button')
        submit_button.click()
        self.assertEqual('loading' in submit_button.get_attribute('class'), False)

پروژه ری اکت

About

Software Testing for money tracker app

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published