Fakultas Ilmu Komputer UI

Commit 1c7f58c9 authored by Dwi Nanda Susanto's avatar Dwi Nanda Susanto
Browse files

Testinggoat/ch6

parent 8fcc1b1c
......@@ -4,3 +4,8 @@
The **deployed** simple home page can be accessed here :
[http://dwi-simplehomepage.herokuapp.com/](http://dwi-simplehomepage.herokuapp.com/)
# Exercise 3
Pada exercise 3 kali ini dibuat sebuah integration test yang akan mengautomasi waktu menunggu hingga terjadi perubahan pada rows.
Pada integration test ini sudah bisa melakukan listening terhadap request dari url LiveServer yang sedang aktif. Jadi tidak perlu melihat lagi url apa yang sedang berjalan.
Jika dibandingkan dengan test lama, fungsi test memanggil sleep selama 1 second. Tidak ada jaminan selama 1 second tersebut apakah benar ada perubahan pada row atau tidak. Tetapi dengan integration test dari fungsi test yang baru sekarang adalah disediakan waktu maksimal 10 detik untuk menunggu, maksudnya adalah 10 detik tersebut adalah waktu maksimal bagi fungsi untuk menunggu akan ada perubahan atau tidak, apa bila waktu menunggu sudah melebihi 10 detik maka fungsi **wait_for_row_in_list_table** tidak akan me-return apa-apa.Sedangkan pengecekan terhadap perubahan dilakukan dalam interval **setengah detik** sekali.
\ No newline at end of file
No preview for this file type
......@@ -3,12 +3,26 @@ from selenium.webdriver.common.keys import Keys
import unittest
import time
import unittest
from django.test import LiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.common.exceptions import WebDriverException
class NewVisitorTest(unittest.TestCase):
class NewVisitorTest(LiveServerTestCase):
MAX_WAIT = 10
def setUp(self):
self.browser = webdriver.Chrome('C:/webdriver/chromedriver.exe')
def tearDown(self):
self.browser.quit()
def check_for_row_in_list_table(self, row_text):
table = self.browser.find_element_by_id('id_list_table')
rows = table.find_elements_by_tag_name('tr')
self.assertIn(row_text, [row.text for row in rows])
def test_can_start_a_list_and_retrieve_it_later(self):
# Edith has heard about a cool new online to-do app. She goes
# to check out its homepage
......@@ -22,13 +36,26 @@ class NewVisitorTest(unittest.TestCase):
inputbox.get_attribute('placeholder'),
'Enter a to-do item'
)
inputbox.send_keys('Buy peacock feathers')
# inputbox.send_keys('Buy peacock feathers')
inputbox.send_keys(Keys.ENTER)
time.sleep(1)
self.wait_for_row_in_list_table('1: Buy peacock feathers')
table = self.browser.find_element_by_id('id_list_table')
rows = table.find_elements_by_tag_name('tr')
self.assertIn('1: Buy peacock feathers', [row.text for row in rows])
inputbox = self.browser.find_element_by_id('id_new_item')
inputbox.send_keys('Use peacock feathers to make a fly')
inputbox.send_keys(Keys.ENTER)
self.wait_for_row_in_list_table('2: Use peacock feathers to make a fly')
self.wait_for_row_in_list_table('1: Buy peacock feathers')
try:
table = self.browser.find_element_by_id('id_list_table')
rows = table.find_elements_by_tag_name('tr')
self.assertIn('foo', [row.text for row in rows])
return
except:
pass
self.check_for_row_in_list_table('1: Buy peacock feathers')
self.check_for_row_in_list_table('2: Use peacock feathers to make a fly')
......@@ -37,6 +64,24 @@ class NewVisitorTest(unittest.TestCase):
self.fail("finish the test")
def test_can_start_a_list_and_retrieve_it_later(self):
# Edith has heard about a cool new online to-do app. She goes
# to check out its homepage
self.browser.get(self.live_server_url)
def wait_for_row_in_list_table(self, row_text):
start_time = time.time()
while True:
try:
table = self.browser.find_element_by_id('id_list_table')
rows = table.find_elements_by_tag_name('tr')
self.assertIn(row_text, [row.text for row in rows])
return
except (AssertionError, WebDriverException) as e:
if time.time() - start_time > MAX_WAIT:
raise e
time.sleep(0.5)
if __name__ == '__main__':
unittest.main(warnings='ignore')
# pass
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment