2012-05-29 13 views
10

Ich bin ein bisschen Neuling zu REST und Testabteilung. Ich musste Automatisierungsskripts schreiben, um unsere REST-Dienste zu testen. Wir planen, diese Skripte regelmäßig von einem Jenkins-CI-Job aus auszuführen. Ich bevorzuge es, diese in Python zu schreiben, da wir bereits Scripts für die UI-Funktionalität in Python haben, die von Selen IDE generiert werden, aber ich bin offen für jede gute Lösung. Ich habe httplib, simplejson und Xunit überprüft, aber nach besseren Lösungen gesucht. Und auch, würde ich lieber eine Vorlage schreiben und generieren tatsächlichen Skript für jede REST-API durch Lesen von API-Informationen aus XML oder etwas. Vorankommen dank allen Ratschlägen.Benötigte Rat zur Automatisierung von REST-Diensten Test

+0

Was genau wollen Sie testen? Dass die Antwort das ist, was Sie erwarten würden? – Swift

+0

Ja, Antwortdaten müssen überprüft werden. Denken Sie daran, alle CRUD-Rest-API-Aktionen zu testen. Zum Beispiel mithilfe von REST-APIs, Erstellen Sie fünf Mitarbeiter, lesen Sie Mitarbeiter zurück, aktualisieren Sie einige und schließlich alle löschen ... Ich denke in dieser Linie von Aktionen. – user1366786

+0

Via Groovy unten ist der Link. http://stackoverflow.com/questions/38972221/api-automation-groovy-soapui-all-together-for-most/38974183#38974183 –

Antwort

18

Normalerweise verwende ich Cucumber, um meine erholsamen APIs zu testen. Das folgende Beispiel ist in Ruby, könnte aber leicht in Python übersetzt werden, entweder the rubypy gem oder lettuce.

Beginnen Sie mit einem Satz von RESTful Grundschritte:

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 

Und jetzt können wir Funktionen schreiben, die die API testen, indem tatsächlich die Anforderungen ausgibt.

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 ... 

Diese sind einfach auf einem CI-System Ihrer Wahl zu betreiben. Sehen Sie diese Links für Referenzen:

+2

Danke Swift. Ich werde deinem Beispiel folgen. – user1366786

+1

Kein Problem, froh, dass ich helfen konnte – 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)` 
Verwandte Themen