Hướng dẫn test api bằng python
Chào các bạn, đây là 1 bài viết ngắn để giới thiệu sơ qua cho các bạn cách setup API test sử dụng ngôn ngữ Python, trên Mac OS (bạn hoàn toàn có thể lặp lại các step trên headline để cài đặt trên window). Hy vọng các bạn sẽ làm quen nhanh với API test vì nó không quá khó. Nếu các bạn muốn tìm hiểu khi test API nên focus vào test những gì, hãy xem thử bài này của mình, có một số lời khuyên hữu ích trong đó. Show Trước khi bắt đầu, hãy Open Iterm ra, và cd thư mục Home của Mac. Bạn có thể chọn thư mục khác, tùy bạn. 1/ Install Homebrewbạn install Homebrew trên Mac để install những component khác, ví dụ như pip đơn giản hơn /usr/bin/ruby -e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" Press ENTER để tiếp tục cài đặt bạn nhé :). Nó sẽ hỏi password của bạn nữa đó. Nếu thành công nó sẽ show giống giống thế này: 2/ Install pythonMình chọn dùng python, đơn giản là vì mình thích :D. Nó khá đơn giản và dễ hiểu khi lập trình. Mình sẽ không nói nhiều, những ví dụ tiếp sau sẽ dùng python, bạn sẽ catch up với nó nhanh thôi :). brew install python
3/ Install pipĐơn giản là nó install Python cho bạn sudo easy_install pip 4/ Install requests"requests" này chính là những component cần có của python để viết code test API, trong request sẽ cung cấp đủ các hàm để bạn gọi GET, PUT,... Pip install requests
5/ Install DjangoCái này là optional, nhưng khi mình install cái này xong thì việc setup 1 project để viết API test dễ dàng hơn rất nhiều. pip install django
6/ Tạo 1 projectTới đây là bước để tạo project rồi. Sau bước này, bạn có thể bắt tay vào viết test :D Dòng lệnh 1: django-admin startproject demotvn sau đó thì cd demotvn
Dòng lệnh 2: python manage.py startapp apidemo Cuối cùng trong thư mục của bạn sẽ có 1 thứ giống giống thế này: 7/ Demo viết code test API public của FPT, Method GETdocument ở đây http://doc.openfpt.vn/services/cyradar/documentation.html#/README Và mình sẽ test thử cái API này http://api.openfpt.vn/cyradar/?url=https://dubkill.com Nếu bạn copy và run nó trên URL của trình duyệt, bạn sẽ thấy nó ra kết quả là { "conclusion": "danger", "domain": "dubkill.com", "threat": [ "malicious" ], "uri": "https://dubkill.com" } Mình sẽ viết code, để test xem khi gọi API này,cái parameter"uri"trả về có phải là "https://dubkill.com". Mình sẽ viết code trong file test.py nha. Mình thì thích dùng Pycharm, nhưng bạn thậm chí có thể viết code bằng text editor như sublime cũng chẳng sao ^^. Mình sẽ viết 1 đoạn để test cho 1 public API: import json import requests import unittest classTVNTestCase(unittest.TestCase):# fixtures = ['data/test_data_dump.json', ]defsetUp(self):# self.client = Client() self.request = requests deftest_demo_get(self): url = 'http: test_request = self.request.get(url).json() #import pdb;#pdb.set_trace() self.assertEqual(test_request.get('uri'),'http: 'chet roi, sai ha :D') Bạn thấy đó, cú pháp chẳng có gì ghê gớm:
Đừng ngại, cứ copy toàn bộ, đè vào file tests.py trong thư mục apidemo của bạn sau đó để run file test này, bạn làm các bước sau.
python manage.py test apidemo.tests
python manage.py test apidemo.tests.TVNTestCase.test_demo_get
python manage.py test folder_api_name.file_name.class_name.test_case_name
Rồi, bạn đi tới bước này, làm theo tui chỉ hết, thì kết quả ra như vầy nè :D FAILED! Lý do là vì bạn có kết quả expect là http://dubkill.com trong khi đúng thì nó phải là https://dubkill.com. Fix cái code ở trên là sẽ chạy pass 8/ Demo API POST methodMình sẽ demo 1 cái API post nha, cũng của OpenFPT: Document ở đây http://doc.openfpt.vn/services/name2gender/documentation.html#/README ở đó bạn sẽ thấy nếu gọi API bạn có thể gọi bằng cách copy and paste dòng này vào terminal: curl -X POST -H "api_key: xxxxxxxxxxxxx" -H "Cache-Control: no-cache" -d 'Nguyễn Dương Hải' "http://api.openfpt.vn/name2gender/json" bạn để ý là 'xxxxxxxx' là cái key do mình tạo ra bằng cách đăng ký OpenFPT và create new app nha. Các bạn tự làm lấy phần đó, mình sẽ không public key của mình Đây là 1 ví dụ good để demo cách viết code
Làm theo tất cả các step như mục số 7, với đoạn code sau đây: deftest_demo_post(self): url = 'http://api.openfpt.vn/name2gender/json' headers = {"api_key": "xxxxxxxxxxxxxxx", "Cache-Control": "no-cache"} data = {'Nguyen Duong Hai': ''} test_request = self.request.post(url, params=data, headers=headers).json() self.assertEqual(test_request.get('gender'), 'female','chet roi, sai ha :D') ah, nhớ chắc chắn là bạn copy xong thì nó ngay hàng nha! Python nó dựa vào alignment để biết code thuộc part nào đó =.= 9/ Debug với PythonNãy giờ chắc các bạn cũng để ý, trong code mình luôn có 1 đoạn # import pdb;# pdb.set_trace()
Khi bạn uncomment nó ra và chạy, nó sẽ là debug gate. Chương trình của bạn sẽ dừng tại đó cho bạn thỏa sức debug. Bạn thử xem, chạy tới đây rồi bạn thử đánh:
Nếu bạn muốn tiếp tục chạy code, gõ continue nha! Bài hướng dẫn của mình tới đây là hết, chúc các bạn tìm thấy niềm vui trong việc test API để phát triển nghề nghiệp của mình. |