REST Api için otomatik test [kapalı]


84

Bir REST API için otomatik bir test paketi yazmak istiyorum. Yeni hizmetleri tamamlarken, önceden oluşturulmuş tüm hizmetlerin beklendiği gibi çalışıp çalışmadığını kontrol etmek isteriz. Bunu başarmak için kullanılacak en iyi araçlar hakkında herhangi bir öneriniz var mı? Bir seferde 1 hizmeti test etmenize olanak tanıyan Apigee gibi araçlar olduğunu biliyorum, ancak tüm hizmetleri tek bir düğmeyi tıklayarak test etmenin bir yolunu bulmak istiyoruz.


2
Sen verebilir vREST bir deneyin. Hem birim testi hem de alayları vardır.
Pankaj Jangid

1
JMeter, REST API testi için en iyi araçtır - Bu yorumu, JMeter kullanarak bir REST API'yi test etmek için bazı ayrıntılı adımlar arayan kişiler için ekleme. testautomationguru.com/how-to-test-rest-api-using-jmeter
vins


2
JMeter, bir REST api'nin sadece temel işlevsel testi için korkunç bir kullanıcı arayüzüne sahip olduğundan bahsetmiyorum bile. Performans / yük testi içindir.
Kevin M

2
JMeter daha çok yük testine odaklanmıştır, belki de en iyi seçeneği bulmak için 12 Harika Web Hizmeti Test Aracını kontrol etmelisiniz . Bu listedeki araçlardan bazıları, örneğin SOAPUI veya HttpMaster , REST API uç noktaları için oldukça iyi bir otomasyon desteğine sahiptir.
Joxi

Yanıtlar:


36

Çalışmamda, oluşturduğumuz bazı RESTful API'leri test etmek için yakın zamanda Java ile yazılmış birkaç test paketini bir araya getirdik. Hizmetlerimiz, bağlı oldukları diğer RESTful API'leri çağırabilir. İki süite ayırdık.


  • Suite 1 - Her hizmeti ayrı ayrı test etme
    • API'nin restito kullanmaya bağlı olduğu herhangi bir eş hizmetle alay edin . Diğer alternatifler şunlardır dinlenme sürücüsü , wiremock ve Betamax .
    • Test ettiğimiz hizmeti test eder ve taklitlerin tümü tek bir JVM'de çalışır
    • Jetty'de hizmeti başlatır

Bunu kesinlikle tavsiye ederim. Bizim için gerçekten iyi çalıştı. Ana avantajlar:

  • Eş hizmetlerle alay edilir, bu nedenle herhangi bir karmaşık veri kurulumu yapmanız gerekmez. Her testten önce, Mockito ile birim testlerindeki sınıflarda yapacağınız gibi, eş hizmetlerin nasıl davranmasını istediğinizi tanımlamak için restito kullanmanız yeterlidir.
  • Alay edilen akran hizmetlerine arandıklarını sorabilirsiniz. Bu iddiaları gerçek eş hizmetlerle bu kadar kolay yapamazsınız.
  • Alay edilen hizmetler önceden korunmuş bellek içi yanıtlar sunduğundan, süit süper hızlıdır. Böylelikle süit bir yaşa girmeden iyi bir koruma sağlayabiliriz.
  • Paket, kendi JVM'sinde izole edildiği için güvenilir ve tekrarlanabilirdir, bu nedenle, paket çalışırken ve testlerin başarısız olmasına neden olurken, aynı zamanda paylaşılan bir ortamla uğraşan diğer süitlerin / kişilerin endişelenmesine gerek yoktur.

  • Süit 2 - Uçtan Uca Tam
    • Suite, birkaç makineye dağıtılan tam bir ortama karşı çalışır
    • Ortamda Tomcat üzerinde dağıtılan API
    • Eş hizmetleri gerçek 'canlı' tam dağıtımlardır

Bu paket, eş hizmetlerde veri kurulumu yapmamızı gerektiriyor, bu da testlerin genellikle yazılması için daha fazla zaman aldığı anlamına geliyor. Eş hizmetlerde veri kurulumu yapmak için mümkün olduğunca REST istemcilerini kullanıyoruz.

Bu paketteki testlerin yazılması genellikle daha uzun sürer, bu nedenle kapsamımızın çoğunu Süit 1'e koyarız. Süit 1'deki taklitlerimiz gerçek hizmetler gibi davranmayabileceğinden, bu pakette hala net bir değer olduğu söyleniyor.



25

Frisby, API uç noktalarını test etmeyi kolay, hızlı ve eğlenceli hale getiren, node.js ve Jasmine üzerine kurulu bir REST API test çerçevesidir. http://frisbyjs.com

Misal:

var frisby = require('../lib/frisby');

var URL = 'http://localhost:3000/';
var URL_AUTH = 'http://username:password@localhost:3000/';

frisby.globalSetup({ // globalSetup is for ALL requests
  request: {
    headers: { 'X-Auth-Token': 'fa8426a0-8eaf-4d22-8e13-7c1b16a9370c' }
  }
});

frisby.create('GET user johndoe')
  .get(URL + '/users/3.json')
  .expectStatus(200)
  .expectJSONTypes({
    id: Number,
    username: String,
    is_admin: Boolean
  })
  .expectJSON({
    id: 3,
    username: 'johndoe',
    is_admin: false
  })
  // 'afterJSON' automatically parses response body as JSON and passes it as an argument
  .afterJSON(function(user) {
    // You can use any normal jasmine-style assertions here
    expect(1+1).toEqual(2);

    // Use data from previous result in next test
    frisby.create('Update user')
      .put(URL_AUTH + '/users/' + user.id + '.json', {tags: ['jasmine', 'bdd']})
      .expectStatus(200)
    .toss();
  })
.toss();

Bu makaleye oy verdim, günlük işlerimde kullandım ve şimdi tüm eğlenceleri fırlatılıyor. Blogumda da aynısını paylaştım: cubicrace.com/2016/04/frisby-rest-api-automation-framework.html
Piyush Chordia


Frisby'yi kullanmaya başlamak kolaydır ve gelişmiş API akışlarını bile test edecek kadar güçlüdür. Ne yazık ki rapor çıktısı arzulanan çok şey bırakıyor. API başarısız olduğunda ortaya çıkan hata mesajları neredeyse işe yaramaz hale gelir. Testleri manuel olarak çalıştırdığınızda çıktının oldukça iyi olduğu göz önüne alındığında bu garip. Bu bir utanç.
Kasper Holdum

1
Birisi benim yaptığım şekilde bu konuda tökezlediğinde, yukarıda belirtildiği gibi, Frisby henüz ölmüş görünmüyor. Git son güncellemeler içeriyor. github.com/vlucas/frisby
S.Huston

21

Bu nedenle PyRestTest çerçevesini başlatmak için iş arkadaşlarımdan biriyle işbirliği yaptım: https://github.com/svanoort/pyresttest

Python'daki testlerle çalışabilseniz de, normal test formatı YAML'dir.

Temel bir REST uygulaması için örnek test paketi - API'lerin doğru şekilde yanıt verdiğini doğrular, HTTP durum kodlarını kontrol eder, ancak yanıt gövdelerini de inceleyebilirsiniz:

---
- config:
    - testset: "Tests using test app"

- test: # create entity
    - name: "Basic get"
    - url: "/api/person/"
- test: # create entity
    - name: "Get single person"
    - url: "/api/person/1/"
- test: # create entity
    - name: "Get single person"
    - url: "/api/person/1/"
    - method: 'DELETE'
- test: # create entity by PUT
    - name: "Create/update person"
    - url: "/api/person/1/"
    - method: "PUT"
    - body: '{"first_name": "Gaius","id": 1,"last_name": "Baltar","login": "gbaltar"}'
    - headers: {'Content-Type': 'application/json'}
- test: # create entity by POST
    - name: "Create person"
    - url: "/api/person/"
    - method: "POST"
    - body: '{"first_name": "Willim","last_name": "Adama","login": "theadmiral"}'
    - headers: {Content-Type: application/json}

Kimlik doğrulama ile, aşağıdaki başlıklarla github.com/svanoort/pyresttest/blob/master/quickstart.md adresinde belirtilen her bir teste aşağıdakileri eklersiniz ; - auth_username: "foobar" - auth_password: "gizli" - beklenen_durum: [200]
agfe2


2

API'ler için otomatik test yapmanın sorunlarından biri, araçların çoğunun test paketinizi çalıştırmadan önce API sunucusunun hazır ve çalışır durumda olmasını gerektirmesidir. API'leri tam otomatik bir test ortamında çalıştırabilen ve sorgulayabilen bir birim test çerçevesine sahip olmak gerçek bir avantaj olabilir.

Node.JS / Express ile uygulanan API'ler için iyi bir seçenek, otomatik test için mocha kullanmaktır. Birim testlerine ek olarak, API'lere karşı farklı test paketlerine ayrılmış işlevsel testler yazması kolaydır. API sunucusunu yerel test ortamında otomatik olarak başlatabilir ve yerel bir test veritabanı kurabilirsiniz. Make, npm ve bir derleme sunucusunu kullanarak, bir "test yap" hedefi ve deponuza bir kod parçası her gönderildiğinde tüm test paketini çalıştıracak artımlı bir yapı oluşturabilirsiniz. Gerçekten titiz geliştirici için, kod tabanınızın hangi bölümlerinin testler kapsamında olup olmadığını gösteren güzel bir HTML kod kapsamı raporu bile oluşturacaktır. Bu ilginç geliyorsa, işte tüm teknik ayrıntıları sağlayan bir blog yazısı .

Düğüm kullanmıyorsanız, dil için fiili birim test çerçevesi ne olursa olsun (jUnit, salatalık / capybara, vb.) - yerel test ortamında sunucuları çalıştırma ve HTTP sorgularını çalıştırma desteğine bakın. Büyük bir projeyse, otomatik API testi ve sürekli entegrasyon çalışması yapma çabası oldukça hızlı bir şekilde karşılığını verecektir.

Umarım yardımcı olur.


2

Runscope , bir dizi test kullanarak Web API'lerini izleyebilen bulut tabanlı bir hizmettir. Testler, parametreli web kancaları aracılığıyla programlanabilir ve / veya çalıştırılabilir. Testler, yanıt sürelerinin küresel müşteri tabanı için kabul edilebilir olmasını sağlamak için dünyanın dört bir yanındaki veri merkezlerinden de yürütülebilir.

Ücretsiz Runscope katmanı, ayda 10.000'e kadar isteği destekler.

Feragatname: Runscope için bir geliştirici savunucusuyum.




0

Dakikada bire kadar API test otomasyonu, RightAPI aracılığıyla sunulan bir hizmettir . Test senaryolarınızı yaratır ve yürütürsünüz. Bu testler beklediğiniz şeyi yaptıktan sonra, onları planlayabilirsiniz. Kimlik doğrulama gerektiren senaryolar için testler birbirine 'zincirlenebilir'. Örneğin, Twitter'a OAuth isteği gönderen ve daha sonra başka herhangi bir test tarafından kullanılabilen paylaşılan bir jeton oluşturan bir testiniz olabilir. Testlere ayrıca http durum kodlarını sağlamak için eklenmiş doğrulama kriterleri veya hatta javascript veya şema doğrulaması kullanılarak yanıtların ayrıntılı incelenmesi olabilir. Testler programlandıktan sonra, belirli bir test doğrulamayı geçemediğinde veya yanıt süresi veya yanıt boyutu için belirlenen aralıkların dışında davrandığında sizi uyaran uyarıları sağlayabilirsiniz.


Bağlantı bozuk görünüyor.
Rao

0

Kendi REST API test çerçevemi oluşturmak için TestNG ve Apache HTTP sınıflarını kullandım, bu konsepti Selenium'da iki yıl çalıştıktan sonra geliştirdim.

Selenium sınıfları yerine Apache HTTP sınıflarını kullanmanız dışında her şey aynıdır.

bir deneyin, gerçekten sevimli ve güzel, test çerçevenizi tüm olasılıklarınıza göre özelleştirmek için tüm güce sahipsiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.