1.确保隔离
上一个随笔中功能测试操作的是正确的数据库,所以会保留一些数据影响,所以要隔离测试(而django中的单元测试是自动隔离的)使用django中的
LiveServerTestCase类
1.在项目中 mkdir function_test
2.touch function_test/__init__.py
3.将之前的功能测试移动到function_test下面,重命名tests.py
4.修改一些代码
2.去掉含糊的等待time.sleep
整体改动代码如下
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time from django.test import LiveServerTestCase from selenium.common.exceptions import WebDriverException class Myunittest(LiveServerTestCase): def setUp(self):#测试开始前运行 self.browser=webdriver.Firefox() def tearDown(self):#测试开始后运行 self.browser.quit() def test_can_start_a_list_and_retrieve_it_later(self):#测试的主要方法 self.browser.get(self.live_server_url) self.assertIn("To-Do lists",self.browser.title)#断言 header_text=self.browser.find_element_by_tag_name(‘h1‘).text self.assertIn(‘Hello World‘,header_text) input=self.browser.find_element_by_id("id_new_item") self.assertEqual( input.get_attribute(‘placeholder‘),#获取属性里的值 ‘Enter a to-do item‘ ) input.send_keys(‘Buy1‘)#填入文本框 input.send_keys(Keys.ENTER)#回车 self.wait_for_row_in_list_table(‘1:Buy1‘) input = self.browser.find_element_by_id("id_new_item") input.send_keys(‘Buy2‘) # 填入文本框 input.send_keys(Keys.ENTER) # 回车 self.wait_for_row_in_list_table(‘2:Buy2‘) def wait_for_row_in_list_table(self,row_text):#去掉含糊等待函数 start_time=time.time() max_wait=5 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) #AssertionError找到表格没有找到想要的行 #WebDriverException页面未加载或者没有找到表格
运行 python manage.py test function_test即可运行功能测试
(python manage.py test运行功能测试和单元测试)
(python manage.py test APP名称 运行单元测试)
原文:https://www.cnblogs.com/chenminyu/p/11734457.html