【发布时间】:2016-05-02 18:13:14
【问题描述】:
我使用 Django 1.4、Selenium 2.53.1 和 Chrome Webdriver 2.21 作为我的测试网络驱动程序来测试我的 Django 应用程序。
我这样初始化我的类:
class SeleniumTest(LiveServerTestCase):
@classmethod
def setUpClass(cls):
cls.display = Display(visible=0, size=(800, 600))
cls.display.start()
cls.driver = webdriver.Chrome()
cls.driver.set_page_load_timeout(15)
cls.driver.maximize_window()
super(SeleniumTest, cls).setUpClass()
def setUp(self):
settings.SESSION_ENGINE = 'django.contrib.sessions.backends.db'
engine = import_module(settings.SESSION_ENGINE)
self.sessionStore = engine.SessionStore()
self.sessionStore.save()
username = 'hello'
password = 'hello'
self.cad_user, created = User.objects.get_or_create(username=username, email='hello@hello.com')
self.cad_user.set_password(password)
self.cad_user.save()
try:
self.get_url('login')
if self.driver.title == 'Login':
self.driver.find_element_by_id('id_username').send_keys(username)
self.driver.find_element_by_id('id_password').send_keys(password)
self.driver.find_element_by_css_selector('input[type="submit"]').click()
下面是我的一个测试示例。它会测试一个包含多个级别的下拉菜单,这些下拉菜单会在您将鼠标移到它们上方并检查它们是否指向正确的链接
def dropdown_check(self, header_ids, choice_id, title):
choice = self.driver.find_element_by_id(choice_id)
mouse = webdriver.ActionChains(self.driver)
for header_id in header_ids:
header_element = self.driver.find_element_by_id(header_id)
WebDriverWait(self.driver, 1).until(EC.element_to_be_clickable((By.ID, header_id)))
mouse.move_to_element(header_element)
mouse.perform()
WebDriverWait(self.driver, 1).until(EC.element_to_be_clickable((By.ID, choice_id)))
choice.click()
self.assertEquals(self.driver.title, title)
def test_my_status_navigation(self):
self.dropdown_check(['menubar_my_status'], 'menubar_my_status', 'User Status')
我已经尝试过这些事情:
- 我已经为每个测试的代码计时,它们只需要不到一秒钟的时间。
- 我还为 setup 和 setupclass 方法计时,它们最多需要 2 秒。
- 我已将 set_page_load_timeout 设置为 0,它不会改变总体执行时间。
- 我通过每轮添加一个额外的测试来运行测试,发现每次测试都会增加大约 40 秒的总测试套件时间。
鉴于此,整个 8 项测试套件需要 300 多秒,我不知道为什么。我确信 Webdriver 的加载需要一些时间,但是在每个单独的测试结束后,我可以看到 Webdriver 只是坐在那里什么都不做。
【问题讨论】:
-
不知道细节很难回答。您能否展示您的测试,如何初始化 webdriver,selenium 和 django 的版本,您使用的是什么浏览器和版本?谢谢。
-
@alecxe 我已经用你提到的内容更新了问题!我希望这会有所帮助
-
非常感谢。会不会是虚拟显示的启动占用了大部分时间?您能否衡量对绩效产生最大负面影响的因素?
-
@alecxe 我通常在没有虚拟显示器的情况下运行(当我开发时),它需要相同的时间。我刚查了一下,整个setUpClass方法只需要2秒。
-
@alecxe 这也是我遇到的问题之一,我不确定如何使用 django 测试来测试/观察哪些行正在运行以查看影响性能的因素。
标签: django python-2.7 selenium selenium-webdriver