一、概述
前邊寫的自動化測試用例是直接用sql語句插入數據,沒有考慮到多條測試數據,如果後期和數據庫交互有多條數據,則用戶和數據放在一個文件中就沒有很好的分離,這樣腳本的維護性就很差,並且增加的接口用例,所有目錄結構更新如下:
- mysql_db.py爲數據庫的封裝操作;
- test_data.py爲測試數據;
- add_event_test.py爲接口的測試,包含正常、異常參數測試;
二、代碼示例
1、test_data.py
import sys,time
sys.path.append('../db_fixture')
try:
from mysql_db import DB
except ImportError:
from .mysql_db import DB
# 定義過去時間
past_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()-100000))
# 定義將來時間
future_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()+10000))
#創建測試數據
datas = {
#發佈會數據
'sign_event':[
{'id':1,'name':'紅米','`limit`':2000,'status':1,'address':'北京會展中心','start_time':future_time,'create_time':'2020-02-13 19:08:42'},
{'id':2,'name':'可參展人數爲0','`limit`':0,'status':1,'address':'北京會展中心','start_time':future_time,'create_time':'2020-02-13 19:08:42'},
{'id':3,'name':'當前狀態0關閉','`limit`':2000,'status':0,'address':'北京會展中心','start_time':future_time,'create_time':'2020-02-13 19:08:42'},
{'id':4,'name':'發佈會已結束','`limit`':2000,'status':1,'address':'北京會展中心','start_time':past_time,'create_time':'2001-02-13 19:08:42'},
{'id':5,'name':'蘋果發佈會','`limit`':2000,'status':1,'address':'西安會展中心','start_time':future_time,'create_time':'2020-02-13 19:08:42'},
],
#嘉賓數據
'sign_guest':[
{'id':'1','realname':'alen','phone':12312341234,'email':'[email protected]','sign':0,'event_id':1,'create_time':'2020-02-13 19:08:42'},
{'id':'2','realname':'has sign','phone':12312341235,'email':'[email protected]','sign':1,'event_id':1,'create_time':'2020-02-13 19:08:42'},
{'id':'3','realname':'john','phone':12312341236,'email':'[email protected]','sign':1,'event_id':5,'create_time':'2020-02-13 19:08:42'},
]
}
# Inster table datas
def init_data():
DB().init_data(datas)
print(datas)
if __name__ == '__main__':
init_data()
2、 add_event_test.py
import unittest
import requests
import os, sys
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parentdir)
from db_fixture import test_data
class AddEventTest(unittest.TestCase):
''' 添加發佈會 '''
def setUp(self):
self.base_url = "http://127.0.0.1:8000/api/add_event/"
def tearDown(self):
print(self.result)
def test_add_event_success(self):
''' 添加成功 '''
payload = {'eid':6,'name':'一加4手機fdfd發佈會','limit':2000,'address':"深圳寶體",'start_time':'2017-05-10 12:00:00','create_time':'2020-02-13 19:08:42'}
r = requests.post(self.base_url,data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 200)
self.assertEqual(self.result['message'], 'add event success')
def test_add_event_all_null(self):
''' 所有參數爲空 '''
payload = {'eid':'','name':'','limit':'','address':"",'start_time':''}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10021)
self.assertEqual(self.result['message'], 'parameter error')
def test_add_event_eid_exist(self):
''' id已經存在 '''
payload = {'eid':1,'name':'一加4發佈會','limit':2000,'address':"深圳寶體",'start_time':'2017-05-10 12:00:00','create_time':'2020-02-13 19:08:42'}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10022)
self.assertEqual(self.result['message'], 'event id already exists')
def test_add_event_name_exist(self):
''' 名稱已經存在 '''
payload = {'eid':11,'name':'紅米','limit':2000,'address':"深圳寶體",'start_time':'2017-05-10 12:00:00','create_time':'2020-02-13 19:08:42'}
r = requests.post(self.base_url,data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10023)
self.assertEqual(self.result['message'], 'event name already exists')
def test_add_event_data_type_error(self):
''' 日期格式錯誤 '''
payload = {'eid':13,'name':'一加4444手機發佈會','limit':2000,'address':"深圳寶體",'start_time':'dffd','create_time':'2020-02-13 19:08:42'}
r = requests.post(self.base_url,data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10024)
self.assertIn('start_time format error.', self.result['message'])
if __name__ == '__main__':
test_data.init_data() # 初始化接口測試數據
print("123")
unittest.main()
用例運行全部通過;