Как раз сейчас занимаюсь разработкой очередного фреймверка для автоматизированного тестирования, по сему это будут, так сказать, записки с линии фронта.
Основа для будущего фреймверка
Часть первая
Так как это фреймверк для автоматизированного тестирования, ключевое слово тестирование, то начну с непосредственной процедуры написание тестов.
Как ни странно ни с какого-то решения типа Selenium или xUnit или еще чего-то, а именно с процесса создания, хранения и считывания тестов.
1. По моему мнению тесты должны храниться отдельно от кода.
- Почему?
- Да банально потому что так их легче поддерживать.
2. Где должны храниться тесты?
- текстовые документы - плохо, в ручную писать структуры для тестов, сложно, скучно и все такое
- xml и все что угодно более-менее структурированное - в принципе, почему бы и нет, за исключением того, что надо будет еще что-то чтоб эти тесты туда удобно заносить и считывать, ну не люблю я кучи тегов
- электронные таблицы - это уже лучше - тут как бы и структура есть, и самое любимое место жизни тест кейсов это excel. excel/open office что угодно, надо устанавливать, чтоб иметь возможность отредактировать тесты.
- googledocs - мой выбор. Для того чтоб тестировать web я почень редко (один раз) сталкивался с ситуацией когда web сайт есть, а интернета про этом нет. Используя гугл докс не нужно ничего ставить и таблица тоже есть. Опять же немаловажный факт - совместное использование и версионирование (svn позволяет и с xls такое делать, но вот незадача, он воспринимает xls как бинарник и с версионированием там грусть в таком случае)
3. Ну ок, googleDocs, так googleDocs.
Теперь давайте смотреть как к нему доступиться. Об этом собсно и будет сегодняшняя статья, как работать с гугловой электронной таблицей.
Все я надеюсь знаю как ее создать и смогут что-то там написать.
Давайте по очереди с кодом (это Python если что):
1. Создать сессию для клиента по работае со spreadsheets:
gd_client = gdata.spreadsheet.service.SpreadsheetsService()Вот это вас, как бы, логинит в этот самый клиент для последующей работы.
gd_client.email = ‘Ваш гугловый мейл user@gmail.com’
gd_client.password = ‘Ваш гугловый пароль p@$$w0rd’
gd_client.ProgrammaticLogin()
2. Теперь создаем инстанс работы с Google Spreadsheets
q = gdata.spreadsheet.service.DocumentQuery()3. Ну и собсно конектимся к нашему spreadsheet
q['title'] = ‘Полное имя нашего spreadsheet типа SomeMySpread’Как ни странно, почти все тут построенно на такой штуке как feed по сему работа со списками гугловых документов мало чем отличается от работы с worksheet в том же spreadsheet или с рядками в последнем.
q['title-exact'] = 'true'
feed = gd_client.GetSpreadsheetsFeed(query=q)
4. Для того чтоб получить именно наш spreadsheet в работу берем его из вышеописанного фида (не смущайтесь если что он там всего один)
spreadsheet_id = feed.entry[0].id.text.rsplit('/',1)[1]Дальше начинаем копаться внутри него.
5. Берем список worksheets которые есть в нашем документе
feed = gd_client.GetWorksheetsFeed(spreadsheet_id)
Я предполагаю использование большого количества worksheets в будущем по сему закладываю это сразу, при построении последующего парсера.
for wsCount, entry in enumerate(feed.entry):currentWorkВookName я буду использовать как название тестового сценария
worksheet_id = feed.entry[wsCount].id.text.rsplit('/',1)[1]
currentWorkBookName = feed.entry[wsCount].title.text
6. Теперь мне нужно получить строки и считывать с них данные
rows = gd_client.GetListFeed(spreadsheet_id, worksheet_id)Это все строки которые есть, но все они мне не очень то нужны, они мне нужны одна за другой
for rowCount, entry in enumerate(rows.entry):row – это одна строка, но мне ее нужно разобрать, она состоит не только из того что в ней написано но и из идентификатора для каждой ячейки
row = rows.entry[rowCount]
Идентификатор это Method, ParamX, etc.
Надо разбирать
params = []Юмор ситуации заключается в том, что row.custom возвращает ячейки в каком ему вздумается порядке, при чем никак при этом не уважая того в каком порядке их выставили создатели. По сему я в массив и загоняю значение ячейки и ключ (идентификатор), для того чтоб в последствии работать как с HashMap в java.
""" Creating list of data for one step """
for key in row.custom:
if row.custom[key].text != None:
params.append(key);
params.append(row.custom[key].text);
7. Как вы видите по картинке googleDoc у нас есть Method и есть параметры, не сложно предположить, что с программной точки зрения это будет так же – метод и в него полетят параметры. Для этого нужно все содержимое массива params разбросать по нужным ящичкам
execMethod=""
paramArray=[]
if len(params) > 0:
execMethod = params[params.index('method')+1]if len(params)>2:
for element in range(0, (len(params)/2)-1):
try:
tmpParam = params[params.index('param'+str(element+1))+1]except:
paramArray.append(tmpParam)
e = sys.exc_info()[1]
print "Something wrong: \n" + e
Вот собственно у вас уже и есть кусок который будет парсить googledocs spreadsheet. В конце такого кода вы получите execMethod - то что должно запуститься и массив paramArray - то что туда надо передать.
Как запускать методы разберем немного позже
Пока.
Ах да, чуть не забыл - цельный кусок кода
import gdata.spreadsheet.service
import gdata.service
import atom.service
import gdata.spreadsheet
import atom
import sys
def paramsParcer (params):
paramArray = []
for element in range(0, (len(params)/2)-1):
try:
tmpParam = params[params.index('param'+str(element+1))+1]
paramArray.append(tmpParam)
except:
e = sys.exc_info()[1]
print "Something wrong: \n" + e
return paramArray
entryPoint = methodsEntryPoint()
getAllConfigValues (entryPoint)
gd_client = gdata.spreadsheet.service.SpreadsheetsService()
gd_client.email = 'Ваше Мыло в гугле'
gd_client.password = 'Ваш гуглопароль'
gd_client.ProgrammaticLogin()
q = gdata.spreadsheet.service.DocumentQuery()
q['title'] = 'Имя вашего дока'
q['title-exact'] = 'true'
feed = gd_client.GetSpreadsheetsFeed(query=q)
spreadsheet_id = feed.entry[0].id.text.rsplit('/',1)[1]
"""Title of SpreadSheet"""
print feed.entry[0].title.text
feed = gd_client.GetWorksheetsFeed(spreadsheet_id)
logger = logger()
""" Getting all worksheets one by one """
for wsCount, entry in enumerate(feed.entry):
worksheet_id = feed.entry[wsCount].id.text.rsplit('/',1)[1]
""" Printing name of the WorkSheet """
TempDataStorage.currentWorkBookName = feed.entry[wsCount].title.text
logger.reportFileGenerator()
rows = gd_client.GetListFeed(spreadsheet_id, worksheet_id)
for rowCount, entry in enumerate(rows.entry):
row = rows.entry[rowCount]
params = []
""" Creating list of data for one step """
for key in row.custom:
if row.custom[key].text != None:
params.append(key);
params.append(row.custom[key].text);
"""Splitting list of data for one step for Execution """
execMethod=""
paramArray=[]
if len(params) > 0:
execMethod = params[params.index('method')+1]
if len(params)>2:
paramArray = paramsParcer(params)
No comments:
Post a Comment