2013-07-29

Неожиданное применение автоматического тестирования

У всех в работе бывают косяки. Я не исключение, поэтому однажды, при написании довольно сложной формы допустил очень неочевидную ошибку, в результате чего, прежде чем я успел этому помешать, несколько сотен раз пользователи сохранили неверные данные.

Когда форма была исправлена, встал вопрос: что делать? Вопрос "Кто виноват", понятное дело, не стоял. Исправление можно было произвести двумя путями: один - это писать скрипт, учитывающий все условия формы и прогонять сохранённые данные через него. Можно, но времени разбираться на этот момент не было (форма всё-таки и правда не тривиальная была). Второй способ - это заставить пользователей снова открывать форму для редактирования и пересохранить данные, т.е. просто открыть страницу с определённым URL и нажать кнопку "Сохранить". Конечно, они в этом не виноваты, и страдать не должны. Делать это мне? Ещё дольше, чем скрипт писать!

А почему бы не поручить это кому-нибудь, у кого много свободного времени, кто не будет возражать и способен делать рутинную работу без всякого ропота? Среди людей таких нет. Тогда обратимся к роботам.

Ну и тут, как вы догадались, Selenium спешит на помощь. Буквально несколько минут, и готов тестовый скрипт, который займётся всей работой. Запускаем Selenium server ...


java -jar selenium-server-standalone-2.33.0.jar

... и наш скрипт ...


python test.py

... и наблюдаем, как человек-невидимка открывает браузер, переходит по ссылкам и нажимает кнопки. Что нам и нужно было.

А вот, собственно, скрипт.


#!/usr/bin/env python
#coding:utf8

from selenium import webdriver
import unittest
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

class Wd(unittest.TestCase):
 def setUp(self):
  self.driver = webdriver.Remote(
   command_executor='http://0.0.0.0:4444/wd/hub',
   desired_capabilities=DesiredCapabilities.FIREFOX)
  self.driver.implicitly_wait(30)
  self.base_url = "http://my.address.ru"

 def test_saveButtonClick(self):
  driver = self.driver
  for id in [222706,426061,441101]:
   url = "%s/edit_page_%d" % (self.base_url,id)
   driver.get(url)
   driver.find_element_by_id("saveform").click()

 def tearDown(self):
  self.driver.quit()

if __name__ == "__main__":
 unittest.main()

Комментариев нет: