কার্ল দিয়ে RESTful API গুলি পরীক্ষা করার পদ্ধতিগত উপায়?


14

আমি ইন্টিগ্রেশন পরীক্ষার সময় লক্ষ্য করেছি যে আমি আসলে বিশ্রামপ্রাপ্ত এপিআই (বা সাধারণ এইচটিটিপি ইন্টারফেসে) এর পুনরাবৃত্ত ব্যবহারের ক্ষেত্রে কাজ করি যা আমি এখানে এবং সেখানে বাশ + সিআরএল দিয়ে যাচাই করি।

এটি বেশ অগোছালো দেখা শুরু করে এবং বজায় রাখা আরও কঠিন হয়ে যায়। মেস কেন দেবেন?

সাধারণ ব্যবহারের কেসগুলি হ'ল:

  • পরীক্ষা করুন যে কোনও URL টি HTTP প্রতিক্রিয়া কোড যেমন 200 প্রদান করে 200
  • সেই ক্ষেত্রে আপনার প্রয়োজন এমন কিছু মাইমির সাথে সামগ্রীর প্রকারটি মেলে তা পরীক্ষা করুন
  • ফিরে আসা সামগ্রীটি কিছু প্যাটার্নের সাথে মেলে বা একটি বিমূর্ত বৈধকরণ পদ্ধতিটি পাস করে দেখুন

আমি এখন পর্যন্ত যা খুঁজে পেয়েছি এবং চাকাটি পুনরায় উদ্ভাবন না করে একটি কার্যক্ষম বিকল্প বিবেচনা করি তা হ'ল:

  • পাইকরেলের সাথে যেতে হবে - একটি আশায় এটি সম্পূর্ণরূপে সমস্ত সিআরএল বিকল্পগুলি কার্যকর করে sp প্রক্সিং করা তবে অন্যান্য সুইচগুলিও আমার প্রয়োজন হতে পারে
  • পাইথনের বিল্ট ইন ইউনিট টেস্টং ব্যবহার করুন

তারপরে আমি উদাহরণস্বরূপ, পরিষেবা প্রতি এক ইউনিট পরীক্ষা আমি যাচাই করতে চাই:

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
শেফ ইকোসিস্টেমে আপনি পরিদর্শক পাবেন যা আপনার প্রশ্নের উত্তর দিতে পারে এইচটিসি রিসোর্স দিয়ে , তবে এটি সার্ভারস্পেক / আরএসপেকের উপর ভিত্তি করে, তাই এটি পাইথন ওয়ার্ল্ডের চেয়ে রুবি বিশ্ব তবে চেষ্টাটি মূল্যবান হতে পারে।
তেনসিবাই

2
পাইথনের অনুরোধ লাইব্রেরি ব্যবহার করে REST কল করার জন্য আমি কিছু পাইথন কোডে কাজ করছি । এটি আপনাকে যে কোনও শিরোনাম যোগ করতে দেয় এবং HTTP (গুলি) প্রক্সি সমর্থন সমর্থন করে, তাই এটি কার্লের সমস্ত বৈশিষ্ট্য সমর্থন করার পক্ষে সক্ষম হওয়া উচিত। আপনি আপনার প্রয়োজনের জন্য আমার কোড ধার নিতে বা এটি সহায়ক হিসাবে এটি একটি উদাহরণ হিসাবে ব্যবহার স্বাগত জানাই।
জেমস শেউই

উত্তর:


7

আপনি পোস্টম্যানের মতো সরঞ্জামগুলির দিকে নজর দিতে পারেন যা জাভাস্ক্রিপ্টের সাথে আরএসটি এপিআইয়ের পরীক্ষায় মনোনিবেশ করে - এতে কিছু দুর্দান্ত বৈশিষ্ট্য রয়েছে তবে আপনি পাইথনের ব্যবহার হারাবেন।

পরিবর্তে, আমি বিশ্রামে সংক্রান্ত প্লাগিন দিকে তাকিয়ে করার সুপারিশ করছি pytest , একটি পাইথন পরীক্ষা ফ্রেমওয়ার্ক যে আপনার পরীক্ষার কোড সরলীকৃত এখনও ব্যবহার করে লেখা পরীক্ষাগুলি চালানোর unittest

পাইস্টে প্লাগইনগুলির একটি বিশাল সেট রয়েছে যা বিভিন্ন কার্যকে সহজতর করে, সহ:

  • ট্যাভার , যা আরইএসটি এপিআইগুলির পরীক্ষায় বিশেষজ্ঞ এবং এখানে অত্যন্ত প্রাসঙ্গিক বলে মনে হচ্ছে - "পাইথন ইউনিট পরীক্ষার জন্য পোস্টম্যান" সাজানো।

  • পাইস্ট-কার্ল-রিপোর্ট - requestsগ্রন্থাগারের সাথে পরীক্ষা করার সময় , curlশেল থেকে ত্রুটিটি পুনরুত্পাদন করতে আপনি একটি কমান্ড মুদ্রণ করতে পারেন।

  • টেস্টিনফ্রা - সার্ভার টেস্টিংয়ে ফোকাস করে (উদাহরণস্বরূপ, দূরবর্তী সার্ভারগুলিতে ওএস প্যাকেজগুলি, ফাইলগুলি, প্রক্রিয়াগুলি ইত্যাদির স্টেটের অবস্থা) - আপনার যদি এই ধরণের প্রয়োজন যেমন উদাহরণস্বরূপ কোড পরীক্ষা করার জন্যও দৃ recommended়ভাবে সুপারিশ করা হয়।

    • যারা পুতুল বা শেফ ব্যবহার করেন তাদের জন্য টেস্টিনফরা বেকার (আরএসপেক সহ), সার্ভারস্পেক বা ইনস্পেকের মতো।

আপনি সরাই পছন্দ না হয়, আপনি অবশ্যই ব্যবহারের করতে পারেন 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"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.