2012-05-29 7 views
10

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

+0

Co dokładnie próbujesz przetestować? Że odpowiedź jest tym, czego można się spodziewać? – Swift

+0

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

+0

Via Groovy poniżej znajduje się link. http://stackoverflow.com/questions/38972221/api-automation-groovy-soapui-all-together-for-most/38974183#38974183 –

Odpowiedz

18

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:

+2

Dzięki Swift. Podążę za twoim przykładem. – user1366786

+1

Nie ma problemu, cieszę się, że mogłem pomóc – Swift

1
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)`