selenium
์ webdriver
๋ฅผ ๊ฐ๋ํ๋ค.from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://localhost:8000')
assert 'Django' in browser.title
์ ์์ค์ฝ๋๋ฅผ ์คํํ๋ฉด selenium์ import ํ ์ ์๋ค๊ณ ํ ๊ฒ์ด๋ค.
pip๋ก selenium
์ ์ค์นํด๋ณด์.
pip install -U selenium
selenium
์ ์ด์ฉํด ๋ธ๋ผ์ฐ์ ๋ฅผ ์คํ์ํฌ ์น ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํด์ฃผ์ด์ผ ํ๋ค.
์ ์ ํ ํ์ผ์ ๋ค์ด๋ก๋ํ์ฌ ์ํ๋ ๊ณณ์ ์ ์ฅ์ํค์.
ํ์๋ Chrome์ ์ด์ฉํ ๊ฒ์ด๋ฏ๋ก ChromeDriver๋ฅผ ๋ฐ์๋ค.
๋๋ผ์ด๋ฒ ์ค์น๋ฅผ ์๋ฃํ๋ค๋ฉด ๋ค์ ์คํํด๋ณด์.
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฌ๋ค๋ฉด ์น ๋๋ผ์ด๋ฒ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ์ง ์์์์ด๋ค. ์น ๋๋ผ์ด๋ฒ๋ฅผ ์ ์ฅํ ์๋ ๊ฒฝ๋ก๋ ์ ๋ ๊ฒฝ๋ก๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ฃ์ด์ฃผ์.
browser = webdriver.Chrome('/path/to/chromedriver')
๊ทธ๋ฆฌ๊ณ ๋ค์ ์คํํด๋ณด์.
Traceback (most recent call last):
File "functional_test.py", line 11, in
assert 'Django' in browser.title
AssertionError
ํฌ๋กฌ ์ฐฝ์ด ๋จ๊ธด ํ๋๋ฐ ์ฌ์ดํธ ์ฐ๊ฒฐ์ด ์๋๊ณ ์ ์๋ฌ๊ฐ ๋ํ๋๋ค๋ฉด Django ์๋ฒ๊ฐ ์ผ์์ง ์์์์ด๋ค. ํฐ๋ฏธ๋์ ํ๋ ๋ ์ผ์ Django ์๋ฒ๋ฅผ ์คํ์ํค์.
python manage.py runserver
๊ทธ๋ฆฌ๊ณ ๋ค์ ์คํํด๋ณด์.
์ ์์ ์ผ๋ก Django ์น ํ์ด์ง๊ฐ ๋ณด์ธ๋ค.
Title์ Django: the Web framework โฆ ๋ผ๊ณ ์ฐ์ฌ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์์์ ์์ฑํ assert๋ฌธ(Title์ Django๊ฐ ์๋์ง ํ์ธํ๋ ๋ฌธ์ฅ)์ด True
์ฌ์ผ ํ๋ค.
ํฐ๋ฏธ๋ ์ฐฝ์ ํ์ธํด๋ณด๋ฉด ์๋ฌด๋ฐ ์๋ฌ ๋ฉ์์ง๊ฐ ๋จ์ง ์์ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ฒ์๋ unittest
๋ชจ๋์ ์ด์ฉํ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์.
from selenium import webdriver
import unittest
class DjangoTest(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Chrome('/path/to/chromedriver')
def tearDown(self):
self.browser.quit()
def test_can_start_django(self):
self.browser.get('http://localhost:8000')
self.assertIn('Django', self.browser.title)
if __name__ == '__main__':
unittest.main()
์ฐ์ unittest.TestCase
๋ฅผ ์์ํ๋ ํด๋์ค DjangoTest
๋ฅผ ๋ง๋ ๋ค.
ํ
์คํธ์ ๋ฉ์ธ ์ฝ๋๋ test_can_start_django()
๋ผ๋ ๋ฉ์๋์ด๋ค.
setUp()
๊ณผ tearDown()
์ ๊ฐ ํ
์คํธ ์์ ์ ๊ณผ ํ์ ์คํ๋๋ ๋ฉ์๋๋ก setUp
์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด ๋, tearDown
์ ๋ซ์ ๋ ์ฌ์ฉํ๋ค.
assertIn(a, b)
๋ฉ์๋๋ a in b๋ฅผ ํ์ธํ๋ ๋ฉ์๋์ด๋ค.
์ ์ฝ๋๋ก Django๋ผ๋ ํ
์คํธ๊ฐ ๋ธ๋ผ์ฐ์ ์ ํ์ดํ์ ์๋์ง ํ์ธํ ์ ์๋ค.
์๋ฌ ๋ฉ์์ง๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ์์๋ณด๊ธฐ ์ํด Django ์๋ฒ๋ฅผ ๋๊ณ ์ ์ฝ๋๋ฅผ ์คํํด๋ณด์.
Traceback (most recent call last):
File "functional_tests.py", line 19, in test_can_start_django
self.assertIn('Django', self.browser.title)
AssertionError: 'Django' not found in 'localhost'
----------------------------------------------------------------------
Ran 1 test in 2.233s
FAILED (failures=1)
์ฒซ๋ฒ์งธ ์ฝ๋์ ๋น๊ตํด๋ณด๋ฉด ๋๋ฒ์งธ ์ฝ๋๊ฐ ์๋ฌ๊ฐ ์ด๋ค ํจ์์์ ๋ฌ๋์ง ๋ ๋ช ๊ฐ์ ํ ์คํธ์์ ๋ช ๊ฐ๊ฐ ํ๋ ธ๋์ง ์ ํํ๊ฒ ์ง์ด์ฃผ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์์๋๋ก โDjangoโ not found in โlocalhostโ ๋ผ๋ ์๋ฌ ๋ฉ์์ง๊ฐ ๋ณด์ธ๋ค. ์ด๋ฒ์ Django ์๋ฒ๋ฅผ ์ผ๊ณ ๋๋ ค๋ณด์.
.
----------------------------------------------------------------------
Ran 1 test in 2.130s
OK
์ฑ๊ณตํ๋ค. ํ์ง๋ง ์ฌ๊ธฐ์ ํ๊ฐ์ง ๋ ์์ ํด์ฃผ์ด์ผ ํ ๊ฒ์ด ์๋ค.
selenium
์ ๋น๊ต์ ์์ ์ ์ผ๋ก ํ์ด์ง ๋ก๋ฉ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ํ
์คํธ๋ฅผ ์คํํ์ง๋ง ์๋ฒฝํ์ง ์๋ค.
implicitly_wait
๋ ํ์์ ๋ฐ๋ผ ์ง์ ํ ์๊ฐ๋งํผ ๋์์ ๋๊ธฐ ์ํ๋ก ๋ ์ ์๋ค.
๋ค์์ 3์ด๊ฐ ๋๊ธฐ ํ ์ฒ๋ฆฌํ๋๋ก ํ๋ ์ฝ๋์ด๋ค.
def setUp(self):
self.browser = webdriver.Chrome('/path/to/chromedriver')
self.browser.implicitly_wait(3)