Python for testers

Парсинг неправильного html c помощью стандартных библиотек Python

Written by Михаил Поляруш on . Posted in Автоматизация

Если вам приходилось работать c html и xml, то вы определенно знаете, что есть хороший и плохой html код. Что означает плохой html код? Теги могут быть незакрытые или может быть несколько рутовых элементов и т.д. Для xml эти правила обязательны, а вот для html они опциональны. Поэтому если Вы захотите распарсить такой html c помощью xml библиотеки, то вы получите разного рода ошибки, что ваш html не подходит под xml валидацию. Что делать? Я рекомендую использовать BeautifulSoup. Но если вы не можете добавить внешнюю библиотеку, что делать? Надо использовать, то что есть. Вот вы можете посмотреть пример кода, как получить текст элемента title для вашего html. В примере используете HTMLParser класс

from HTMLParser import HTMLParser 

class MyParser(HTMLParser): 
	def __init__(self, data): 
		self.title, self.is_title= None, None
		HTMLParser.__init__(self) 
		self.feed(data) 

	def handle_starttag(self, tag, attrs):
		if tag == 'title':
			self.is_title = 1 

	def handle_data(self, data): 
		if self.is_title: 
			self.title = data 
			self.is_title = 0 

if __name__ == "__main__": 

	m = MyParser(r"""
		<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
		<html><head>
		<title>404 Not Found</title>
		</head><body>
		<h1>Not Found</h1>
		<p>The requested URL was not found.</p>
		<hr>
		<address>Apache/2.2.14</address>
		</body></html>""")
	print m.title

Почему жаркое лето перешло и жаркую зиму? Конференция, тренинги …

Written by Михаил Поляруш on . Posted in iSpeaker Club, Автоматизация, Работаю, Размышляю, Тренинги

Обычно лето бывает жарким, осень прохладной а зима холодной. А у меня получается наоборот, наверное, я еще живу по испанским биоритмам:) После действительно жаркого лета, тенденция сохранилась. И жара до сих пор! Только недавно организовал и провел онлайн-конференцию по автоматизации. Также начал второй курс обучения python для тестировщика. А что же дальше?

В феврале буду делать большую очную конференцию по автоматизации Test Automation Days. Это будет грандиозное событие, потому как это будет первая конференция по автоматизации на територии СНГ. Плюс к тому на конференцию уже насобиралось докладчиков в два потока, что не может меня не радовать!

Меня недавно спрашивали, а где узнать об автоматизации не веб-приложений (видимо все остальные сейчас автоматизируют только веб :) ). Отвечаю – на первой конференции по автоматизации. Какие будут доклады?

  • Философия и построение тестового фреймворка на основе BDD в PHP проектах,  Зозуленко Алексей
  • Автоматизация тестирования как сервис, Павел Сташевский
  • Тестирование производительности и функциональности бэкэнда клиент-серверных приложений, Владимир Примаков
  • Основные ошибки внедрения ATDD, BDD, CI, CD на проектах, Резчиков Алексей
  • Быстрое расширение Robot Framework под свои нужды, Михаил Поляруш
  • Новый подход к автоматизации регрессионного тестирования с использованием BDD на основе WebDriver, Бордюг Иван
  • Тестирование производительности веб-приложений в Visual Studio, Юлия Соловьева
  • Автоматическое генерирование тестов в SoapUI, Михаил Дырда

А также сейчас еще где-то 6 докладчиков на утверждении. Более того, на протяжении недели до конференции я буду проводить серию тренингов по автоматизации. Кто хотел сделать старт в области автоматизации тестирования,  - это будет самых хороший старт после нового года :) . Так что могу констатировать факт, февраль будет жарким :)

Кстати, для людей, который хотят потренировать свои навыки публичных выступлений тоже будет о чем подумать. Я считаю, что самое главное на конференции – это качество докладов. Поэтому, в рамках подготовки докладчиков конференции http://atdays.com, я проведу 2-3 встречи клуба публичных выступлений iSpeaker Club. Так что записывайтесь, чтобы не пропустить.

Меня очень просят побольше проводить онлайн выступлений. Так вот, кто все таки не может приехать или не хочет, регистрируйтесь на ближайший вебинар по автоматизации. Обещаю максимальную практическую направленность и программирование :) Ну вообщем, как всегда. Пока что не меняю своих принципов обучения.

Как параметризировать docstrings в Python?

Written by Михаил Поляруш on . Posted in Автоматизация, Работаю, Разработка

Зачастую автоматизаторы сталкиваются с проблемой вывода в логи нужной информации. Ко мне обратилась коллега с вопросом параметризации docstrings в python. Хочу просто подвести пунктиками, что можно, а что нельзя делать с docstrings.

  • Вы можете указывать docstrings для модуля, класса, функции, метода
  • Все описания docstrings идут сразу же после определения какой-то сущности, т.е. сразу после класса, функции и т.д.
  • docstrings не могут быть параметризированны
  • docstrings это только строка и не более того

Для того, чтобы вам продемонстрировать, как работает python docstrings посмотрите на этот код:

"""module docstring"""
import unittest

def function():
	"""function docstring"""
	pass

class LoginTestCase(unittest.TestCase):
	"""class docstring"""

	def testLogin(self):
		"""method docstring"""
		pass

if __name__ == "__main__":
	print __doc__
	print function.__doc__
	print LoginTestCase.testLogin.__doc__
	print LoginTestCase.__doc__

Но все же, если вам например, нужно в docstrings что-то заменить, то вы наверное захотите сделать это так.

"""module docstring %s """ % myvariable

К сожалению, так работать код у вас не будет и когда вы будете обращаться к docstrings, то объект будет с типом None. И все же как туда вставить нужные данные для того, чтобы использовать docstrings в своих нуждах? Просто надо работать с строкой docstrings и все. Пример, вам нужно использовать docstrings метода для вывода чего-то там в лог. Как вы это можете сделать?

"""module docstring"""
variable = "some string"
import unittest

def function():
	"""function docstring"""
	pass

class LoginTestCase(unittest.TestCase):
	"""class docstring"""
	def testLogin(self):
		"""method docstring %%replace%%"""
		print LoginTestCase.testLogin.__doc__.replace(r"%%replace%%", variable)
		pass

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

Т.е. вы указываете какую-то любую строку в docstrings, а потом ее заменяете на то что вам нужно в момент выполнения программы. Это конечно неидеальное решение потому как есть ряд побочных эффектов, но если вам действительно это необходимо, то можете пользоваться :)

Удачи и хорошего python программирования!

Вебинар по автоматизации на Sikuli

Written by Михаил Поляруш on . Posted in Tестирование, Работаю, Тренинги

Не так давно я организовывал и проводил онлайн-конференцию по автоматизации тестирования ПО. Мой доклад о Sikuli был по достоинству оценен зрителями и я занял первое место среди 10 выступающих.  После конференции мне начали задавать много вопросов, на которые я не смог ответить во время самого вебинара.

Я считаю, что эти знания были бы полезны для всех специалистов, которые занимаются автоматизацией. Поэтому я решил провести вебинар на тему
“Как начать автоматизацию на Sikuli?” Это будет 6-й вебинар из серии вебинаров по автоматизации.  Должен заметить, что 30000 просмотров моих предыдущих вебинаров меня вдохновляют.

Регистрация на вебинар уже открыта

IT Jam и сообщество автоматизаторов тестирования ПО

Written by Михаил Поляруш on . Posted in Работаю, Тренинги

Сообщество автоматизаторов тестирования ПО http://automated-testing.info будет представлено на IT Jam http://it-jam.ciklum.net/. Специально для этого мероприятия был подготовлен промо ролик, которым хочу с вами поделиться.

Как быстро летит время! Вроде бы только недавно начал делать встречи, а уже на носу 19я встреча!

Twitter лента

autotestinfo

Как продолжить тест при случайном появлении попапа? http://t.co/tGqX8PjPzD

mpoliarush

http://t.co/9879JVgl21 automates tests written with QUnit, Jasmine, Mocha with Expect.js assertions, Dojo Objective Harness, or YUI Test.