restful接口开发实例_Restful接口开发与测试—接口测试
開發(fā)完接口,接下來(lái)我們需要對(duì)我們開發(fā)的接口進(jìn)行測(cè)試。接口測(cè)試的方法比較多,使用接口工具或者Python來(lái)測(cè)試都可以,工具方面比如之前我們學(xué)習(xí)過的Postman或者Jmeter?,Python腳本測(cè)試可以使用Requests?+?unittest來(lái)測(cè)試。
測(cè)試思路
功能測(cè)試:數(shù)據(jù)的增刪改查
異常測(cè)試:未授權(quán),參數(shù)異常等
Postman測(cè)試
使用測(cè)試工具Postman測(cè)試結(jié)果如下所示:
user接口測(cè)試
查詢所有用戶
創(chuàng)建用戶
修改用戶
刪除用戶
未授權(quán)測(cè)試
groups接口測(cè)試
查詢所有g(shù)roups數(shù)據(jù)
修改group數(shù)據(jù)
刪除groups
Requests+Unittest
在api目錄下面新建一個(gè)test_unittest.py,代碼實(shí)現(xiàn)如下:
tests_unittest.py
import requests
import unittest
class UserTest(unittest.TestCase):
def setUp(self):
self.base_url='http://127.0.0.1:8000/users'
self.auth=('51zxw','zxw20182018')
def test_get_user(self):
r=requests.get(self.base_url+'/1/',auth=self.auth)
result=r.json()
self.assertEqual(result['username'],'51zxw')
self.assertEqual(result['email'],'51zxw@163.com')
def test_add_user(self):
form_data={'username':'zxw222','email':'zxw668@qq.com','groups':'http://127.0.0.1:8000/groups/2/'}
r=requests.post(self.base_url+'/',data=form_data,auth=self.auth)
result=r.json()
self.assertEqual(result['username'],'zxw222')
def test_delete_user(self):
r=requests.delete(self.base_url+'/11/',auth=self.auth)
self.assertEqual(r.status_code,204)
def test_update_user(self):
form_data={'email':'2222@163.com'}
r=requests.patch(self.base_url+'/2/',auth=self.auth,data=form_data)
result=r.json()
self.assertEqual(result['email'],'2222@163.com')
def test_no_auth(self):
r=requests.get(self.base_url)
result=r.json()
self.assertEqual(result['detail'],'Authentication credentials were not provided.')
class GroupTest(unittest.TestCase):
def setUp(self):
self.base_url='http://127.0.0.1:8000/groups'
self.auth=('51zxw','zxw20182018')
def test_group_developer(self):
r=requests.get(self.base_url+'/7/',auth=self.auth)
result=r.json()
self.assertEqual(result['name'],'Developer')
def test_add_group(self):
form_data={'name':'Pm'}
r=requests.post(self.base_url+'/',auth=self.auth,data=form_data)
result=r.json()
self.assertEqual(result['name'],'Pm')
def test_update_group(self):
form_data={'name':'Boss'}
r=requests.patch(self.base_url+'/6/',auth=self.auth,data=form_data)
result=r.json()
self.assertEqual(result['name'],'Boss')
def test_detele_group(self):
r=requests.delete(self.base_url+'/6/',auth=self.auth)
self.assertEqual(r.status_code,204)
if __name__ == '__main__':
unittest.main()
Django自帶測(cè)試模塊
打開api目錄下面的tests文件,編寫如下測(cè)試代碼
tests.py
from django.test import TestCase
import requests
# Create your tests here.
class UserTest(TestCase):
def setUp(self):
self.base_url='http://127.0.0.1:8000/users'
self.auth=('51zxw','xxxxx')
def test_get_user(self):
r=requests.get(self.base_url+'/1/',auth=self.auth)
result=r.json()
self.assertEqual(result['username'],'51zxw')
self.assertEqual(result['email'],'zxw886@qq.com')
# @unittest.skip('skip add user')
def test_add_user(self):
form_data={'username':'zxw222','email':'zxw668@qq.com','groups':'http://127.0.0.1:8000/groups/2/'}
r=requests.post(self.base_url+'/',data=form_data,auth=self.auth)
result=r.json()
self.assertEqual(result['username'],'zxw222')
# @unittest.skip('skip test_delete_user')
def test_delete_user(self):
r=requests.delete(self.base_url+'/11/',auth=self.auth)
self.assertEqual(r.status_code,204)
def test_update_user(self):
form_data={'email':'2222@163.com'}
r=requests.patch(self.base_url+'/2/',auth=self.auth,data=form_data)
result=r.json()
self.assertEqual(result['email'],'2222@163.com')
def test_user_already_exists(self):
form_data = {'username': 'zxw222', 'email': 'zxw668@qq.com', 'groups': 'http://127.0.0.1:8000/groups/2/'}
r = requests.post(self.base_url + '/', data=form_data, auth=self.auth)
result = r.json()
#預(yù)期返回值:{"username":["A user with that username already exists."]}
self.assertEqual(result['username'][0], 'A user with that username already exists.')
def test_no_auth(self):
r=requests.get(self.base_url)
result=r.json()
self.assertEqual(result['detail'],'Authentication credentials were not provided.')
class GroupTest(TestCase):
def setUp(self):
self.base_url='http://127.0.0.1:8000/groups'
self.auth=('51zxw','xxxxxx')
def test_group_developer(self):
r=requests.get(self.base_url+'/3/',auth=self.auth)
result=r.json()
self.assertEqual(result['name'],'Pm')
# @unittest.skip('skip test_add_group')
def test_add_group(self):
form_data={'name':'Leader'}
r=requests.post(self.base_url+'/',auth=self.auth,data=form_data)
result=r.json()
self.assertEqual(result['name'],'Leader')
def test_update_group(self):
form_data={'name':'Boss'}
r=requests.patch(self.base_url+'/6/',auth=self.auth,data=form_data)
result=r.json()
self.assertEqual(result['name'],'Boss')
def test_detele_group(self):
r=requests.delete(self.base_url+'/6/',auth=self.auth)
self.assertEqual(r.status_code,204)
運(yùn)行方式:打開cmd使用如下命令來(lái)運(yùn)行即可:
D:\django_restful>python manage.py test上面命令是默認(rèn)測(cè)試全部的用例,如果想測(cè)試部分用例則可以使用如下命令:
測(cè)試指定的測(cè)試類
D:\django_restful>python manage.py test api.tests.UserTest測(cè)試具體的某一條具體用例
D:\django_restful>python manage.py test api.tests.UserTest.test_get_user報(bào)錯(cuò)相關(guān)
1.遷移數(shù)據(jù)庫(kù)時(shí)沒有權(quán)限寫入
File "C:\Users\jli75\AppData\Local\Programs\Python\Python37\lib\site-packages\MySQLdb\connections.py", line 280, in query_mysql.connection.query(self, query)
django.db.utils.InternalError: (7, "Error on rename of '.\\httprunnermanager\\#sql-1178_7.frm' to '.\\httprunnermanager\\djcelery_taskstate.frm' (Errcode: 13 - Permission denied)")
原因:可能是殺毒軟件通過阻止修改frm文件來(lái)解決此問題。通過在殺毒軟件威脅防護(hù)高級(jí)選項(xiàng)中禁用按訪問掃描,并殺毒軟件設(shè)置為忽略這些擴(kuò)展名來(lái)解決此問題
遷移數(shù)據(jù)庫(kù)時(shí)沒有清除之前的遷移文件migrations
_mysql.connection.query(self, query)
_mysql_exceptions.OperationalError: (1050, "Table 'djcelery_crontabschedule' already exists")
解決方案:刪除migrations文件夾即可。
setting配置錯(cuò)誤
django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table ((1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1"))
解決方案:Django2.1不再支持MySQL5.5,必須5.6版本以上 可以使用如下命令 查看當(dāng)前Mysql版本
mysql -Vmysql Ver 8.0.1-dmr for Win64 on x86_64 (MySQL Community Server (GPL))
更多干貨
Restful接口開發(fā)與測(cè)試—集成Swagger
Restful接口開發(fā)與測(cè)試—Django安裝
Restful接口開發(fā)與測(cè)試—Rest簡(jiǎn)介
Python接口自動(dòng)化——Requests基礎(chǔ)功能
Python接口自動(dòng)化——Requests
Jmeter+Ant+Jenkins接口自動(dòng)化測(cè)試平臺(tái)
Jmeter+Ant+Jenkins接口自動(dòng)化測(cè)試平臺(tái)
Jmeter用例數(shù)據(jù)分離
Jmeter CSV文件管理與正則匹配
Jmeter變量設(shè)置
Jmeter簡(jiǎn)介與安裝
斷言與參數(shù)設(shè)置
Jmeter簡(jiǎn)介與安裝
Postman批量執(zhí)行與集成Jenkins
Mac 環(huán)境Appium自動(dòng)化測(cè)試環(huán)境搭建
眾里尋他千百度—Appium Android 元素定位方式
Android自動(dòng)化測(cè)試設(shè)備彈窗處理
Appium iOS 元素定位與操作
Ubuntu+Docker+STF環(huán)境搭建
Anyproxy抓包代理安裝使用
Python自動(dòng)化日志收集
Android 測(cè)試工具——Monkeyrunner API
關(guān)注公眾號(hào),更多干貨秒得到
總結(jié)
以上是生活随笔為你收集整理的restful接口开发实例_Restful接口开发与测试—接口测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python统计excel文本单元格_p
- 下一篇: javascript实现图片轮播_第2章