一、概述
前边写的自动化测试用例是直接用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':'alen@mail.com','sign':0,'event_id':1,'create_time':'2020-02-13 19:08:42'},
{'id':'2','realname':'has sign','phone':12312341235,'email':'sign@mail.com','sign':1,'event_id':1,'create_time':'2020-02-13 19:08:42'},
{'id':'3','realname':'john','phone':12312341236,'email':'john@mail.com','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()
用例运行全部通过;
版权声明:本文为u011410999原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。