Jestem nowicjuszem w dziale REST i testowaniu. Musiałem napisać skrypty automatyzacji, aby przetestować nasze usługi REST. Planujemy regularnie uruchamiać te skrypty z pracy Jenkins CI. Wolę pisać je w pythonie, ponieważ mamy już skrypty testujące funkcjonalność interfejsu użytkownika w pythonie generowane przez selen IDE, ale jestem otwarty na każde dobre rozwiązanie. Sprawdziłem httplib, simplejson i Xunit, ale szukam lepszych rozwiązań tam dostępnych. A także, wolałbym napisać szablon i wygenerować rzeczywisty skrypt dla każdego interfejsu API REST, odczytując informacje o api z xml lub czegoś podobnego. Postępuj dzięki wszystkim radom.Potrzebne porady w celu zautomatyzowania testu usług REST
Odpowiedz
Zwykle używam Cucumber do testowania restful API. Poniższy przykład znajduje się w języku Ruby, ale można go łatwo przetłumaczyć na pytona za pomocą the rubypy gem lub lettuce.
start z zestawem relaksującego kroków bazowych:
When /^I send a GET request for "([^\"]*)"$/ do |path|
get path
end
When /^I send a POST request to "([^\"]*)" with the following:$/ do |path, body|
post path, body
end
When /^I send a PUT request to "([^\"]*)" with the following:$/ do |path, body|
put path, body
end
When /^I send a DELETE request to "([^\"]*)"$/ do |path|
delete path
end
Then /^the response should be "([^\"]*)"$/ do |status|
last_response.status.should == status.to_i
end
Then /^the response JSON should be:$/ do |body|
JSON.parse(last_response.body).should == JSON.parse(body)
end
A teraz możemy napisać funkcje, które umożliwiają testowanie przez API faktycznie wydawania żądań.
Feature: The users endpoints
Scenario: Creating a user
When I send a POST request to "/users" with the following:
"""
{ "name": "Swift", "status": "awesome" }
"""
Then the response should be "200"
Scenario: Listing users
Given I send a POST request to "/users" with the following:
"""
{ "name": "Swift", "status": "awesome" }
"""
When I send a GET request for "/users"
Then the response should be "200"
And the response JSON should be:
"""
[{ "name": "Swift", "status": "awesome" }]
"""
... etc ...
Są łatwe do uruchomienia w systemie CI wybór. Zobacz te linki do dokumentów:
Dzięki Swift. Podążę za twoim przykładem. – user1366786
Nie ma problemu, cieszę się, że mogłem pomóc – Swift
import openpyxl
import requests
import json
from requests.auth import HTTPBasicAuth
urlHead='https://IP_ADDRESS_HOST:PORT_NUMBER/'
rowStartAt=2
apiColumn=2
#payloadColumn=3
responseBodyColumn=12
statusCodeColumn=13
headerTypes = {'Content-Type':'application/json',
'Accept':'application/json',
'Authorization': '23324'
}
wb = openpyxl.load_workbook('Excel_WORKBOOK.xlsx')
# PROCESS EACH SHEET
for sheetName in (wb.get_sheet_names()):
print ('Sheet Name = ' + sheetName)
flagVar = input('Enter N To avoid APIs Sheets')
if (flagVar=='N'):
print ('Sheet got skipped')
continue
#get a sheet
sheetObj = wb.get_sheet_by_name(sheetName)
#for each sheet iterate the API's
for i in range(2, sheetObj.max_row+1):
#below is API with method type
apiFromSheet = (sheetObj.cell(row=i, column=apiColumn).value)
if apiFromSheet is None:
continue
#print (i, apiFromSheet)
#Let's split the api
apiType = apiFromSheet.split()[0]
method = apiFromSheet.split()[1]
if (apiType!='GET'):
continue
#lets process GET API's
absPath = urlHead + method
print ("REQUESTED TYPE AND PATH = ", apiType, absPath)
print('\n')
res = requests.get(absPath, auth=HTTPBasicAuth(user, pwd), verify=False, headers=headerTypes)
#LET's write res body into relevant cell
sheetObj.cell(row=i, column=responseBodyColumn).value = (res.text)
sheetObj.cell(row=i, column=statusCodeColumn).value = (res.status_code)
wb.save('Excel_WORKBOOK.xlsx')
`#exit(0)`
Co dokładnie próbujesz przetestować? Że odpowiedź jest tym, czego można się spodziewać? – Swift
Tak, należy zweryfikować dane odpowiedzi. Myślenie o testowaniu wszystkich akcji CRUD dla odpoczynku. Na przykład przy użyciu interfejsów API REST, Utwórz pięciu pracowników, odtwórz pracowników, zaktualizuj niektóre i ostatecznie usuń wszystkie ... Zastanawiam się w tej linii działań. – user1366786
Via Groovy poniżej znajduje się link. http://stackoverflow.com/questions/38972221/api-automation-groovy-soapui-all-together-for-most/38974183#38974183 –