कर्स्ट के साथ रेस्टफुल एपीआई का परीक्षण करने का एक व्यवस्थित तरीका?


14

मैंने एकीकरण परीक्षण के दौरान देखा है कि मैं वास्तव में रेस्टफुल एपीआई (या सामान्य HTTP इंटरफेस में) के साथ आवर्ती उपयोग के मामलों पर काम करता हूं, मैं यहां और वहां bash + cURL के साथ जांच करता हूं।

यह काफी गड़बड़ लग रहा है और बनाए रखने के लिए कठिन हो जाता है। क्यों देते हैं गंदगी?

विशिष्ट उपयोग के मामले हैं:

  • जाँच करें कि एक URL http प्रतिक्रिया कोड जैसे 200 लौटाता है
  • जाँच करें कि सामग्री प्रकार उस मामले में आपकी जरूरत के कुछ मेल से मेल खाता है
  • जांचें कि लौटाई गई सामग्री कुछ पैटर्न से मेल खाती है, या एक अमूर्त सत्यापन प्रक्रिया से गुजरती है

मैंने अब तक क्या पाया है और पहिया को फिर से स्थापित किए बिना एक व्यावहारिक विकल्प पर विचार करें:

  • PyCurl के साथ जाना है - एक उम्मीद में यह पूरी तरह से सभी curl विकल्प esp को लागू करता है। समीपवर्ती लेकिन अन्य स्विच भी जिनकी मुझे आवश्यकता हो सकती है
  • पायथन के यूनिट टेस्टेज में निर्मित का उपयोग करें

उदाहरण के लिए, मैं उदाहरण के लिए, प्रति यूनिट एक इकाई परीक्षण कर सकता हूं जिसे मैं जांचना चाहता हूं:

import unittest, pycurl

class TestService (unittest.TestCase):

    def test_1(self):
        self.assertEqual(pycurl.returncode("some_url"), 200)

    def test_2(self):
        self.assertTrue(pycurl.response("some_url").matches ("xxx") )

    def test_3(self):
        self.assertTrue (pycurl.ContentType("some_url").equal("xxx"))

if __name__ == '__main__':
    unittest.main()

क्या यह समझ में आता है या टूलिंग को और अधिक उच्च-स्तरीय (लेकिन बहुत जटिल नहीं है कि वह उठा और एकीकृत कर सके)?


1
एपीआई कोड क्या है? एकीकरण परीक्षण प्रणालियों का एक समूह है और एक को चुनना आमतौर पर उसी भाषा पर किया जाता है जिस कोड का परीक्षण किया जा रहा है ताकि एक ही देव दोनों को अपडेट कर सके।
तेंसिबाई


1
तो आपकी टीम किस भाषा में अधिक सहज है? हर उपकरण इस तरह की चीजों का परीक्षण करने के लिए करेगा, बैश + कर्ल से लेकर
कैपिस्ट्रानो

2
शेफ इकोसिस्टम में आपको इंस्पेक मिलेगा जो आपके सवाल का जवाब http संसाधन के साथ दे सकता है , लेकिन यह सर्वरस्पेक / आरस्पेक पर आधारित है, इसलिए यह अजगर दुनिया की तुलना में अधिक रूबी दुनिया है लेकिन कोशिश के लायक हो सकता है।
तन्निबाई

2
मैं अजगर के अनुरोध पुस्तकालय का उपयोग करके अन्य कॉल करने के लिए कुछ अजगर कोड पर काम कर रहा हूं । यह आपको किसी भी हेडर को जोड़ने देगा जो आप चाहते हैं और HTTP (एस) प्रॉक्सी समर्थन का समर्थन करता है, इसलिए यह कर्ल की सभी विशेषताओं का समर्थन करने में सक्षम होना चाहिए। आप अपनी आवश्यकताओं के लिए मेरा कोड उधार लेने के लिए स्वागत करते हैं या यदि यह सहायक है तो एक उदाहरण के रूप में उपयोग करें।
जेम्स शेवेई

जवाबों:


7

आप पोस्टमैन जैसे उपकरणों को देख सकते हैं जो जावास्क्रिप्ट के साथ रीस्ट एपीआई का परीक्षण करने पर ध्यान केंद्रित करते हैं - इसमें कुछ अच्छी विशेषताएं हैं लेकिन आप पायथन के उपयोग को खो देते हैं।

इसके बजाय, मैं सुझाव दूंगा कि पाइस्टेस्ट , पायथन टेस्ट फ्रेमवर्क के लिए REST- संबंधित प्लगइन्स को देखना , जो आपके टेस्ट कोड को सरल करता है, जबकि अभी भी लिखित परीक्षणों का उपयोग करके चल रहा है unittest

Pytest में प्लगइन्स का एक विशाल सेट है, जो विभिन्न कार्यों को सरल करता है, जिनमें शामिल हैं:

  • टैवर्न , जो रेस्ट एपीआई का परीक्षण करने में माहिर हैं और यहां बहुत प्रासंगिक लगता है - "पोस्टमैन फॉर पाइथन यूनिट टेस्ट"।

  • पाइस्टेस्ट-कर्ल-रिपोर्ट - requestsलाइब्रेरी के साथ परीक्षण करते समय, एक curlकमांड प्रिंट करेगा जिसका उपयोग आप शेल से त्रुटि को पुन: उत्पन्न करने के लिए कर सकते हैं।

  • Testinfra - सर्वर परीक्षण पर ध्यान केंद्रित करता है (उदाहरण के लिए ओएस संकुल की स्थिति, फाइलें, प्रक्रियाएं, आदि, आमतौर पर दूरस्थ सर्वर पर परीक्षण किया जाता है) - दृढ़ता से सिफारिश की जाती है यदि आपको इस प्रकार की आवश्यकता है जैसे Ansible कोड का परीक्षण करने के लिए।

    • पपेट या शेफ का उपयोग करने वालों के लिए, टेस्टिनफ्रा बीकर (RSpec के साथ), सर्वरस्पीक या इंस्पेक के समान है।

आप सराय पसंद नहीं हैं, तो आप निश्चित रूप से उपयोग की कर सकते हैं pycurlके साथ pytestजो यह आसान का निदान करने में विफल रहा है कि वास्तव में क्या करता है,। पाइस्टेस्ट-कर्ल-रिपोर्ट साइट का यह उदाहरण केवल सामान्य पाइरेस्ट सुविधाओं का उपयोग करता है:

$ py.test test.py
============================= test session starts ==============================
platform darwin -- Python 2.7.9 -- py-1.4.27 -- pytest-2.6.4
plugins: curl-report, httpbin, cache, capturelog, cov, flakes, pep8
collected 1 items

test.py F

=================================== FAILURES ===================================
______________________________ test_requests_get _______________________________

    def test_requests_get():
        r = requests.get('http://httpbin.org/get')
>       assert False
E       assert False

test.py:7: AssertionError

पाइस्टेस्ट आपको एक सादे के साथ सभी परीक्षण लिखने देता है assert, और आउटपुट के भाग के रूप में वैकल्पिक रूप से एक उपयोगी संदेश शामिल करता है। उदाहरण के लिए, आपका एक परीक्षण लिखा जा सकता है:

def test_2():
    assert pycurl.response("some_url").matches ("xxx"), "xxx not found in response"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.