2012-05-29 12 views
10

Ben REST ve test dept için yeni tür bir tür. REST hizmetlerimizi test etmek için otomasyon scriptleri yazmam gerekiyordu. Bu scriptleri bir Jenkins CI işinden düzenli olarak çalıştırmayı planlıyoruz. Ben selenyum IDE tarafından üretilen python'larda kullanıcı arayüzü işlevselliği test komut dosyalarına sahip olduğumdan pythonda yazmayı tercih ederim, ancak iyi bir çözüme açığım. Httplib, simplejson ve Xunit'i kontrol ettim, ancak orada daha iyi çözümler arıyordum. Ayrıca, bir şablon yazmayı ve her REST API'sı için xml veya bir şeyden gelen api bilgilerini okuyarak gerçek betik oluşturmayı tercih ederim. Tüm tavsiyelere teşekkürler.REST hizmetlerini otomatikleştirmek için gerekli tavsiyeler sınama

+0

tam olarak test etmek çalışıyorsun? Bu cevap beklediğiniz şey mi? – Swift

+0

Evet, yanıt verilerinin doğrulanması gerekiyor. Tüm CRUD dinlenme api eylemlerini test etmeyi düşünmek. Örneğin, REST API'lerini kullanarak, beş çalışan yaratın, çalışanları geri okuyun, bazılarını güncelleyin ve son olarak tümünü silin ... Bu eylem dizisinde düşünüyorum. – user1366786

+0

Via Groovy link aşağıdadır. http://stackoverflow.com/questions/38972221/api-automation-groovy-soapui-all-together-for-most/38974183#38974183 –

cevap

18

Kısıtlı API'larımı sınamak için genellikle Cucumber kullanıyorum. Aşağıdaki örnek Ruby'dir, ancak the rubypy gem veya lettuce kullanarak python'a kolayca çevrilebilir. RESTful baz adımları bir set ile

Başlangıç:

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 

Ve şimdi biz aslında istekleri göndererek API sınamak özelliklerini yazabilir.

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

Seçtiğiniz CI sisteminde kolayca çalıştırılabilir. referanslar için bu bağlantıları bakınız:

+2

Teşekkürler Swift. Örneğini takip edeceğim. – user1366786

+1

Sorun değil, yardımcı olabileceğime sevindim – 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)` 
İlgili konular