การทดสอบอัตโนมัติสำหรับ REST Api [ปิด]


84

ฉันต้องการเขียนชุดทดสอบอัตโนมัติสำหรับ REST API ในขณะที่เราดำเนินการบริการใหม่ ๆ เราต้องการตรวจสอบเพื่อให้แน่ใจว่าบริการที่สร้างไว้ก่อนหน้านี้ทั้งหมดทำงานได้ตามที่คาดไว้ มีข้อเสนอแนะเกี่ยวกับเครื่องมือที่ดีที่สุดที่จะใช้เพื่อบรรลุเป้าหมายนี้หรือไม่? ฉันรู้ว่ามีเครื่องมือเช่น Apigee ที่ให้คุณทดสอบได้ครั้งละ 1 บริการ แต่เราต้องการวิธีทดสอบบริการทั้งหมดด้วยการคลิกปุ่ม


2
คุณสามารถลองvRESTได้ มีทั้งการทดสอบหน่วยและการล้อเลียน
Pankaj Jangid

1
JMeter เป็นเครื่องมือที่ดีที่สุดสำหรับการทดสอบ REST API - การเพิ่มความคิดเห็นนี้สำหรับผู้ที่กำลังมองหาขั้นตอนโดยละเอียดในการทดสอบ REST API โดยใช้ JMeter testautomationguru.com/how-to-test-rest-api-using-jmeter
vins

ไม่มีอะไรเต้น FRISBY - เครื่องมือที่สมบูรณ์แบบและทรงพลังที่สุดสำหรับการทดสอบ REST API
Piyush Chordia

2
JMeter ใช้งานมากเกินไปไม่ต้องพูดถึงมี UI ที่น่ากลัวสำหรับการทดสอบการทำงานขั้นพื้นฐานของ REST api มีไว้สำหรับการทดสอบประสิทธิภาพ / โหลด
Kevin M

2
JMeter ให้ความสำคัญกับการทดสอบโหลดมากขึ้นบางทีคุณควรตรวจสอบ12 เครื่องมือทดสอบบริการเว็บที่ยอดเยี่ยมเพื่อค้นหาตัวเลือกที่ดีที่สุด เครื่องมือบางอย่างจากรายการนี้เช่นSOAPUIหรือHttpMasterมีการสนับสนุนระบบอัตโนมัติที่ดีสำหรับจุดสิ้นสุด REST API
Joxi

คำตอบ:


36

ที่ทำงานของฉันเมื่อเร็ว ๆ นี้เราได้รวบรวมชุดทดสอบสองชุดที่เขียนใน Java เพื่อทดสอบ RESTful API ที่เราสร้างขึ้น บริการของเราอาจเรียกใช้ RESTful API อื่น ๆ ที่ขึ้นอยู่กับ เราแบ่งออกเป็นสองห้องสวีท


  • Suite 1 - ทดสอบแต่ละบริการแยกกัน
    • เยาะเย้ยบริการ peer ใด API ขึ้นอยู่กับการใช้restito ทางเลือกอื่น ๆ ได้แก่ส่วนที่เหลือขับ , wiremockและBetamax
    • ทดสอบบริการที่เรากำลังทดสอบและการจำลองทั้งหมดทำงานใน JVM เดียว
    • เปิดตัวบริการในท่าเทียบเรือ

แน่นอนฉันอยากจะแนะนำให้ทำเช่นนี้ มันได้ผลดีสำหรับเราจริงๆ ข้อดีหลัก ๆ คือ:

  • บริการเพียร์ถูกล้อเลียนดังนั้นคุณไม่จำเป็นต้องตั้งค่าข้อมูลที่ซับซ้อน ก่อนการทดสอบแต่ละครั้งคุณเพียงแค่ใช้ restito เพื่อกำหนดว่าคุณต้องการให้บริการเพียร์ทำงานอย่างไรเช่นเดียวกับที่คุณทำกับชั้นเรียนในการทดสอบหน่วยด้วย Mockito
  • คุณสามารถถามบริการเพื่อนที่ถูกล้อเลียนหากพวกเขาถูกเรียก คุณไม่สามารถยืนยันสิ่งเหล่านี้ได้อย่างง่ายดายด้วยบริการเพียร์จริง
  • ชุดนี้ทำงานได้รวดเร็วเป็นพิเศษเนื่องจากบริการจำลองให้บริการตอบกลับในหน่วยความจำสำเร็จรูป ดังนั้นเราจึงสามารถได้รับความคุ้มครองที่ดีโดยไม่ต้องใช้ชุดอายุ
  • ชุดนี้มีความน่าเชื่อถือและทำซ้ำได้เนื่องจากแยกได้ใน JVM ของตัวเองดังนั้นจึงไม่ต้องกังวลเกี่ยวกับห้องชุด / ผู้คนอื่น ๆ ที่ยุ่งเกี่ยวกับสภาพแวดล้อมที่ใช้ร่วมกันในขณะเดียวกันชุดกำลังทำงานและทำให้การทดสอบล้มเหลว

  • Suite 2 - Full End to End
    • Suite ทำงานกับสภาพแวดล้อมเต็มรูปแบบที่ปรับใช้ในหลายเครื่อง
    • API ติดตั้งบน Tomcat ในสภาพแวดล้อม
    • บริการเพียร์เป็นของจริง 'เสมือนจริง'

ชุดนี้ต้องการให้เราทำการตั้งค่าข้อมูลในบริการเพียร์ซึ่งหมายความว่าการทดสอบโดยทั่วไปจะใช้เวลาในการเขียนมากกว่า เราใช้ไคลเอนต์ REST เพื่อทำการตั้งค่าข้อมูลในบริการเพียร์ให้มากที่สุด

การทดสอบในชุดนี้มักใช้เวลาเขียนนานกว่าดังนั้นเราจึงนำความครอบคลุมส่วนใหญ่ไปไว้ใน Suite 1 ดังที่กล่าวไว้ในชุดนี้ยังคงมีคุณค่าที่ชัดเจนเนื่องจากการจำลองของเราใน Suite 1 อาจไม่ทำงานเหมือนกับบริการจริง



25

Frisby เป็นเฟรมเวิร์กการทดสอบ REST API ที่สร้างขึ้นบน node.js และ Jasmine ที่ทำให้การทดสอบปลายทาง API ง่ายรวดเร็วและสนุก http://frisbyjs.com

ตัวอย่าง:

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();

ฉันโหวตบทความนี้ฉันใช้มันในการทำงานประจำวันของฉันและตอนนี้มันเป็นงานอดิเรกทั้งหมดที่ถูกโยนทิ้งไป ฉันได้แบ่งปันสิ่งเดียวกันนี้ในบล็อกของฉัน: cubicrace.com/2016/04/frisby-rest-api-automation-framework.html
Piyush Chordia

2
Frisby ตายแล้วgithub.com/vlucas/frisby/issues/347
Ernst Ernst

Frisby เริ่มต้นใช้งานได้ง่ายและมีประสิทธิภาพเพียงพอที่จะทดสอบแม้แต่ขั้นตอน API ขั้นสูง น่าเศร้าที่ผลลัพธ์ของรายงานทำให้เป็นที่ต้องการอย่างมาก ข้อความแสดงข้อผิดพลาดเมื่อ API ล้มเหลวนั้นเกือบจะไร้ประโยชน์ ซึ่งเป็นเรื่องแปลกเนื่องจากผลลัพธ์เมื่อคุณเรียกใช้การทดสอบด้วยตนเองนั้นค่อนข้างดี เป็นเรื่องน่าเสียดาย
Kasper Holdum

1
ในกรณีที่มีคนสะดุดในแบบที่ฉันทำดูเหมือนว่า frisby จะยังไม่ตายตามความคิดเห็นที่ระบุไว้ข้างต้น คอมไพล์มีการอัปเดตล่าสุด github.com/vlucas/frisby
S.Huston

21

ฉันร่วมมือกับเพื่อนร่วมงานคนหนึ่งของฉันเพื่อเริ่มกรอบงาน PyRestTest ด้วยเหตุผลนี้: https://github.com/svanoort/pyresttest

แม้ว่าคุณจะทำงานกับการทดสอบใน Python ได้ แต่รูปแบบการทดสอบปกติจะอยู่ใน YAML

ชุดทดสอบตัวอย่างสำหรับแอป REST พื้นฐาน - ตรวจสอบว่า API ตอบสนองอย่างถูกต้องตรวจสอบรหัสสถานะ HTTP แม้ว่าคุณจะตรวจสอบเนื้อหาตอบสนองได้เช่นกัน:

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

ด้วยการตรวจสอบสิทธิ์คุณจะเพิ่มด้านล่างในการทดสอบแต่ละครั้งที่อ้างอิงจากgithub.com/svanoort/pyresttest/blob/master/quickstart.mdโดยมีส่วนหัวด้านล่าง - auth_username: "foobar" - auth_password: "secret" - expected_status: [200]
agfe2

2

ฉันใช้SOAP UIสำหรับการทดสอบการทำงานและอัตโนมัติ SOAP UI ช่วยให้คุณสามารถเรียกใช้การทดสอบด้วยการคลิกปุ่ม นอกจากนี้ยังมีหน้าการทดสอบตัวควบคุมสปริงที่สร้างโดย Ted Young ฉันใช้บทความนี้เพื่อสร้างการทดสอบหน่วยที่เหลือในแอปพลิเคชันของเรา


ลิงค์อัพเดท: theodoreyoung.wordpress.com/2011/02/14/…
everdream

2

ปัญหาอย่างหนึ่งของการทำการทดสอบอัตโนมัติสำหรับ API คือเครื่องมือจำนวนมากกำหนดให้คุณต้องเปิดใช้งานเซิร์ฟเวอร์ API ก่อนที่จะเรียกใช้ชุดทดสอบ การมีเฟรมเวิร์กการทดสอบหน่วยที่สามารถเรียกใช้และสืบค้น API ในสภาพแวดล้อมการทดสอบอัตโนมัติได้เป็นประโยชน์อย่างแท้จริง

ตัวเลือกที่ดีสำหรับ API ที่ใช้กับ Node.JS / Express คือการใช้ mocha สำหรับการทดสอบอัตโนมัติ นอกเหนือจากการทดสอบหน่วยแล้วยังสามารถเขียนการทดสอบการทำงานเทียบกับ API ได้ง่ายโดยแยกออกเป็นชุดทดสอบต่างๆ คุณสามารถเริ่มต้นเซิร์ฟเวอร์ API โดยอัตโนมัติในสภาพแวดล้อมการทดสอบภายในและตั้งค่าฐานข้อมูลการทดสอบภายในเครื่อง การใช้ make, npm และบิลด์เซิร์ฟเวอร์คุณสามารถสร้างเป้าหมาย "ทำการทดสอบ" และบิวด์เพิ่มเติมที่จะเรียกใช้ชุดทดสอบทั้งหมดทุกครั้งที่มีการส่งโค้ดไปยังที่เก็บของคุณ สำหรับนักพัฒนาที่พิถีพิถันอย่างแท้จริงมันจะสร้างรายงานการครอบคลุมโค้ด HTML ที่ดีซึ่งแสดงให้คุณเห็นว่าส่วนใดของฐานรหัสของคุณได้รับการทดสอบหรือไม่ หากฟังดูน่าสนใจนี่คือบล็อกโพสต์ที่ให้รายละเอียดทางเทคนิคทั้งหมด

หากคุณไม่ได้ใช้โหนดดังนั้นเฟรมเวิร์กการทดสอบหน่วย defacto สำหรับภาษาคืออะไร (jUnit, cucumber / capybara ฯลฯ ) ให้ดูที่การสนับสนุนสำหรับการหมุนเซิร์ฟเวอร์ในสภาพแวดล้อมการทดสอบภายในเครื่องและเรียกใช้การสืบค้น HTTP หากเป็นโครงการขนาดใหญ่ความพยายามในการทดสอบ API อัตโนมัติและการทำงานร่วมกันอย่างต่อเนื่องจะได้ผลอย่างรวดเร็ว

หวังว่าจะช่วยได้


2

Runscopeเป็นบริการบนคลาวด์ที่สามารถตรวจสอบ Web API โดยใช้ชุดการทดสอบ การทดสอบสามารถกำหนดเวลาและ / หรือเรียกใช้ผ่านเว็บตะขอที่กำหนดพารามิเตอร์ นอกจากนี้ยังสามารถดำเนินการทดสอบจากศูนย์ข้อมูลทั่วโลกเพื่อให้แน่ใจว่าเวลาตอบสนองเป็นที่ยอมรับของฐานลูกค้าทั่วโลก

Runscope ระดับฟรีรองรับคำขอได้ถึง 10K คำขอต่อเดือน

คำเตือน: ฉันเป็นผู้สนับสนุนนักพัฒนาสำหรับ Runscope


1

ฉันติดตั้งระบบอัตโนมัติหลายกรณีตาม REST Assured ซึ่งเป็น DSL แบบ jave สำหรับการทดสอบบริการที่เงียบสงบ https://code.google.com/p/rest-assured/

ไวยากรณ์เป็นเรื่องง่ายรองรับ json และ xml https://code.google.com/p/rest-assured/wiki/Usage

ก่อนหน้านั้นฉันลองใช้ SOAPUI และมีปัญหากับเวอร์ชันฟรี นอกจากนี้กรณียังอยู่ในไฟล์ xml ซึ่งยากที่จะขยายและนำมาใช้ซ้ำฉันไม่ชอบ



0

อัตโนมัติทดสอบ API ขึ้นครั้งต่อนาทีเป็นบริการที่สามารถใช้ได้ผ่านtheRightAPI คุณสร้างสถานการณ์ทดสอบของคุณและดำเนินการ เมื่อการทดสอบเหล่านั้นทำในสิ่งที่คุณคาดหวังได้แล้วคุณสามารถกำหนดเวลาได้ การทดสอบสามารถ 'ผูกมัด' เข้าด้วยกันสำหรับสถานการณ์ที่ต้องมีการรับรองความถูกต้อง ตัวอย่างเช่นคุณสามารถทดสอบที่ส่งคำขอ OAuth ไปยัง Twitter และสร้างโทเค็นที่ใช้ร่วมกันซึ่งสามารถใช้โดยการทดสอบอื่น ๆ ได้ การทดสอบยังสามารถแนบเกณฑ์การตรวจสอบเพื่อให้แน่ใจว่ารหัสสถานะ http หรือแม้กระทั่งการตรวจสอบการตอบสนองโดยละเอียดโดยใช้การตรวจสอบจาวาสคริปต์หรือสคีมา เมื่อกำหนดเวลาการทดสอบแล้วคุณสามารถแจ้งเตือนได้ทันทีที่การทดสอบหนึ่ง ๆ ล้มเหลวในการตรวจสอบความถูกต้องหรือทำงานนอกช่วงที่กำหนดไว้สำหรับเวลาตอบสนองหรือขนาดการตอบกลับ


ดูเหมือนว่าลิงก์จะเสีย
Rao

0

ฉันใช้คลาส TestNG และ Apache HTTP เพื่อสร้างกรอบการทดสอบ REST API ของฉันเองฉันได้พัฒนาแนวคิดนี้หลังจากทำงานในซีลีเนียมเป็นเวลาสองปี

ทุกอย่างเหมือนกันยกเว้นคุณควรใช้คลาส Apache HTTP แทนคลาส Selenium

ลองดูสิมันน่ารักและดีจริงๆคุณมีอำนาจในการปรับแต่งกรอบการทดสอบของคุณให้เป็นไปได้อย่างเต็มที่


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.