Python for testers

Выступил на конференции atdays 2013

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

На этих выходных (09.02.2013) я проводил и выступал на конференции Test Automation Days. За конференцию еще буду писать отдельно, а вот просто хочу поделиться слайдами моего доклада, как быстро расширять robot framework под свои потребности на python.

Тренинг основы автоматизации – отчет по следующей группе

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

Провел очередной тренинг по основам автоматизации тестирования ПО. Собралась группа 13 человек из разных проектов и с разными навыками. Должен констатировать факт, что все-таки осведомленность специалистов начального и среднего уровня об автоматизации тестирования остается на низком уровне. А ведь в Украине выполняется множество  проектов по автоматизации.

Меня посетила мысль, почему так происходит. Автоматизация – это промежуточное звено перед чем-то большим. Очень мало людей остается именно в этой роли. Поэтому специалист по автоматизации тестирования существует в среднем 2-3 года, а потом движется дальше. Соответственно,  этим и объясняется количество людей, занятых в автоматизации. Хотя по истории проведения своих авторских тренингов должен сказать, что все больше людей интересуется автоматизацией. Потому что методы разработки ПО заставляют команды использовать автоматизацию, хотят они этого или нет. Без этого просто быстро нельзя поставить ПО заказчику. При этом получается определенная пропасть в знаниях между специалистами, которые знают автоматизацию и теми, кто ее не знает.

В общем, это лирика :) Тренинг прошел успешно. По балам приблизительно 4.6 из 5. Есть несколько моментов в тренинге, которые я переделаю, а также решил еще добавить немного live coding и живых демонстраций, чтобы тренинг стал более полезным и интересным. Фотографии прикладываю.


Скоро у меня стартует марафон тренингов. Группы полностью укомплектованы. Буду учить подрастающее поколение.

Вторая встреча клуба iSpeaker Club – “Взаимодействие и поведение”

Written by Михаил Поляруш on . Posted in iSpeaker Club

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

Вчерашний день (17.01.2013) ознаменовался в моей личной истории проведением второй встречи клуба публичных выступлений. Клуб iSpeaker нацелен именно на практику и развитие навыков публичных выступлений. Нашей главной темой было “Взаимодействие и поведение”. В результате встречи мы получили массу эмоций, практики и материалов, которые в основном представлены в нашей закрытой группе. Тем не менее, я подготовил небольшую интеллектуальную карту, которой хочу с Вами поделиться.

ispeaker club interaction and behaviour

ChromeDriver + Python + Browsermob proxy

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

Для бывалых автоматизаторов веб-приложений известно, как важно иметь под руками прокси сервер, с помощью которого можно решить целый ряд вопросов и проблем с веб-автоматизации. NTLM авторизация, блокирование сторонних сайтов не относящихся к тестированию вашего веб-приложения и т.д. В разных случаях работу с прокси решают по разному, какое-то время назад был придуман хороший проект под названием Browsermob-proxy, который очень помогает при автоматизации.

David Burns написал клиент на python для использования прокси с помощью python и даже приложил пример его использования для FirefoxDriver.

from browsermobproxy import Server
server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()

from selenium import webdriver
profile  = webdriver.FirefoxProfile()
profile.set_proxy(proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)

proxy.new_har("google")
driver.get("http://www.google.co.uk")
proxy.har # returns a HAR JSON blob

server.stop()
driver.quit()

Но вот для ChromeDriver примера нет, даже если хорошо погуглить. И люди, которые хотят использовать ChromeDriver, не знают, как заставить цепочку ChromeDriver + Python + Browsermob proxy работать. Потому, что не знают, как правильно подключать прокси к ChromeDriver.

Заполняю этот пробел c соответствующим примером кода:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException, 
ElementNotVisibleException
from browsermobproxy import Server
import urlparse

server = Server(r"c:\browsermob\bin\browsermob-proxy.bat")
server.start()
proxy = server.create_proxy()
proxy.new_har()

chrome_options = webdriver.ChromeOptions()
url = urlparse.urlparse(proxy.proxy).path
chrome_options.add_argument('--proxy-server=%s' % url)
driver = webdriver.Chrome(
	executable_path=r"c:\chromedriver.exe", 
	chrome_options=chrome_options)
driver.get("http://google.com.ua/")
driver.find_element_by_id("gbqfsb").click()

print proxy.har

driver.quit()
server.stop()

Детальных шагов не расписывал. Будут вопросы, пишите!

Python mock: добавление метода реального класса к mock объекту

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

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

Так вот, в python есть прекрасная библиотека, которая называется mock. Все было бы хорошо, но к сожалению, у нее нет встроенных средств добавления метода реального класса к уже созданному mock экземпляру класса. Зачем это нужно? (Возможно спросите вы)

Например, вы разрабатываете класс и какой-то метод для него. Вам необходимо протестировать только этот метод класса не вызывая остальных. Как это можно сделать? Вот примерно где-то так:

from mock import Mock
import new

class RealClass(object):
	def other_method(self):
		self.attribute_initiated_earlier = "class value"
	
	def real_method(self):
		return [self.attribute_initiated_earlier, 'password']

fake_object = Mock(spec=RealClass())
class_method = object.__getattribute__(RealClass, 'real_method')
fake_object.real_method = new.instancemethod(class_method, fake_object, Mock)
fake_object.attribute_initiated_earlier = "new value"
print fake_object.real_method()

Меня комментируют

Mykhailo Poliarush

|

Добрый день, это вывод вы сделали по каким урокам?

Valerii Synenko

|

Опис курсу шикарний, теми затронуті правильні, але ведення курсу: “це сюди, те туди, все ж ясно!”, пояснень = 0.

Igor Vlasuyk

|

“Продолжительность 16 часов (2 дня)”
Это то есть 2 рабочих дня надо полностью быть на тренинге?
И на каком языке программирования будет практика?

Nataliia Koval

|

Большое спасибо! С расписанием вроде разобралась.

Chmel Viktor

|

Доброго дня

Что вас интересует на этом сайте?

View Results

Loading ... Loading ...