以前接口測試都是用postman或者瀏覽器手動搞,費時費力,最近重構,把測試方法也梳理一下。
項目主要功能就是對數據庫的增刪改查,還有調用openstack接口,對於另一套系統採用的方式是自己寫一套mock系統對調用進行返回模擬,暫時忽略不表
1.TestCase 類的結構
from django.test import TestCase
class Demo(TestCase):
# 最先執行
def setUp(self):
print('setUp')
# 最後執行
def tearDown(self):
print('tearDown')
def test_demo(self):
print('test_demo')
def test_demo_2(self):
print('test_demo2')
輸出:
setUp
test_demo
tearDown
.setUp
test_demo2
tearDown
測試過程中還會自動創建測試數據庫,測試完成後自動銷燬
2.利用TestCase測試接口
假設路由,視圖函數,models等等都已經寫好了
from django.test import TestCase
from django.urls import reverse
from account.models import User
from mixer.backend.django import mixer
class RuleViewApiTestCase(TestCase):
def setUp(self):
# mixer這個模塊,這個模塊會根據你定義的模型和模型的字段來隨機生成測試數據,包括這個數據的外鍵數據。 這樣在我們這種層級非常多的關係型數據就非常的方便,否則需要一層一層的去生成數據。
self.user = mixer.blend(User)
self.user.uuid = 'fsfasfsa'
self.user.save()
def test_user_query_api(self):
# django.urls.reverse函數和在路由設置的name來得到請求的地址
url = reverse('user_query')
# 發送請求
response = self.client.get(url)
self.assertEqual(response.status_code, 403)
data = {'login': 0}
# 如果需要攜帶參數只需要傳入data參數
response = self.client.get(url, data)
# 檢查響應內容是否正確
self.assertEqual(response.status_code, 200)
res_data = response.json().get('results')
print(res_data)
print(type(res_data))
self.assertEqual(len(res_data), 1)
def tearDown(self):
print()
more about testing in Django:https://docs.djangoproject.com/en/2.2/topics/testing/