Продолжение
Как мы все прекрасно понимаем, автоматизация тестирования это далеко не только UI часть, по сему сегодня я предлагаю рассмотреть часть по созданию платформы для тестирования Rest API сервисов.
Что же такое Rest API.
Wiki
Передача состояния представления (Representational State Transfer (REST)) — это стиль архитектуры программного обеспечения для распределенных гипермедиа систем, подобных Всемирной паутине. Термин Передача состояния представления введен и определен в 2000 году Роем Филдингом в его кандидатской диссертации. Филдинг является одним из основных авторов спецификации протокола передачи гипертекста (HTTP) версий 1.0 и 1.1.
Соответствие ограничениям REST называется «RESTful»
По сути же своей это передача данных по средствам HTTP запросов, таких как Get, Post, Put и Delete.
Насколько сталкивался я, так передают данные в виде JSON, но это для нас не так важно.
Так вот – наша основная цель запрограммировать эти запросы и научить наш фреймверк с ними работать.
GET – простой сетевой запрос направленный на получение какой-то информации, и при этом не содержащий никого тела, GET запрос можно просто выполнить вбив ссылку с нужными параметрами в URL.
Для написания на Python я выбрал одну из стандартных библиотек версии 2,7 urllib2 (в 3-й версии ее разнесли по двум другим)
Начнем.
Как мы узнали в Get достаточно передать URL, но нет, ему так же нужны и Cookie, в которых хранится сессия. Очевидно, что Cookie эта та часть которую мы тоже должны научиться получать, но об этом позже.
Python code:
def getter(url, cookie):
gh_url = url
response = urllib2.Request(gh_url)
response.add_header('Host',’some host’)
response.add_header('Accept','some encoding')
response.add_header('Content-Type','some content-type')
response.add_header('Cookie',cookie)
return urllib2.urlopen(response, timeout = 30).read()
Вот где-то так. На выходе мы получим именно то что нам вернет запрос в браузере, а с полученной информацией мы можем делать все что угодно.
Как я говорил ранее, нам нужно получить Cookie. И тут мы подходим к методу POST, который зачастую используется для авторизации и при этом возвращает Cookie, а точнее Set-Cookie как один из параметров Header.
Вот собственно код данного метода
def loginForSecCookie(self, login, password):
gh_url = TempDataStorage.basic_url+'/authenticate/'
values = '{"user":"'+login+'","password":"'+password+'"}'
response = urllib2.Request(gh_url, values, self.setHeaders())
return urllib2.urlopen(response).info().getheader('Set-Cookie')
Все просто до нельзя – закидываем логин и пароль в формате JSON (ну вот так, у вас при этом может быть другой JSON) и получаем назад Cookie которые подставляем туда куда нам надо.
PUT и DELETE не отличаются от POST и GET почти ни чем, за исключением названия.
По сему просто вставлю куски кода
def putter(self, url, body, cookie):
gh_url = 'http://'+some_host+url
header = {'Host':some_host
'Accept':'some accept’,
'Content-Type':'some content-type',
'Cookie' : cookie}
response = urllib2.Request(gh_url, body, header
response.get_method = lambda: 'PUT'
return urllib2.urlopen(response, timeout = 30).read()
def deleter(self,url, cookie):
gh_url = 'http://'+some_host+url
response = urllib2.Request(gh_url)
responce.add_header('Host',’some_host’)
responce.add_header('Accept','some encoding')
responce.add_header('Content-Type','some content-type')
responce.add_header('Cookie',cookie)
response.get_method = lambda: 'DELETE'
return urllib2.urlopen(response, timeout = 30).read()
Ну вот где-то так, это на сегодня все. В следующий раз расскажу как связать эти части – Google Docs и RestAPI
No comments:
Post a Comment