Web接口及接口自动化测试用例

接口代码

from django.http import JsonResponse
from guest.Sign.models import Event, Guest
from django.core.exceptions import ValidationError, ObjectDoesNotExist
from django.db.utils import IntegrityError
import time


# 添加发布会接口
def add_event(request):
    """
    通过post请求接收发布会参数
    :param request:
    :return:
    """
    eid = request.POST.get('eid','')                 # 发布会id
    name = request.POST.get('name','')               # 发布会标题
    limit = request.POST.get('limit','')             # 限制人数
    status = request.POST.get('status','')           # 状态
    address = request.POST.get('address','')         # 地址
    start_time = request.POST.get('start_time','')   # 发布会时间
    #  判断eid,name,limit,address,start_time不能为空,否则JsonResponse()返回响应状态码和提示
    #  jsonResponse()非常有用,他可以将字典转换成JSON格式返回给客户端
    if eid =='' or name == '' or limit == '' or address == '' or start_time == '':
        return JsonResponse({'status':10021,'message':'parameter error'})
    #  判断eid是否存在,如果存在则说明重复,返回状态码及提示
    result = Event.objects.filter(id=eid)
    if result:
        return JsonResponse({'status':10022,'message':'event id already exists'})
    # 判断name是否存在,如果存在则说明重复,返回状态码及提示
    result = Event.objects.filter(name=name)
    if result:
        return JsonResponse({'status':10023,'message':'event name already exists'})
    #  判断发布会状态是否为空,如果为空则置为1
    if status == '':
        status = 1
    #  插入数据,在插入过程中如果日期格式错误,则抛出ValidationError
    #  异常处理接受该异常并返回相应的状态和提示,否则插入成功,返回状态码200和成功提示
    try:
        Event.objects.create(id=eid,name=name,limit=limit,address=address,status=int(status),start_time=start_time)
    except ValidationError as e:
        error = 'start_time format error. It must be in YYYY-MM-DD HH:MM:SS format.'
        return JsonResponse({'status':10024,'message':error})

    return JsonResponse({'status':200,'message':'add event success'})
#发布会查询
def get_event_list(request):
   
    eid = request.GET.get("eid", "")      # 发布会id
    name = request.GET.get("name", "")    # 发布会名称
    # 通过GET请求接收eid和name,两个参数都是可选项,但不能同时为空,否则返回10021和错误提示
    if eid == '' and name == '':
        return JsonResponse({'status':10021,'message':'parameter error'})
    # 如果eid不为空,则使用eid查询,将查询结果以字典的形式存放到定义的event中,并将event作为接口返回字典中data对应的值
    if eid != '':
        event = {}
        try:
            result = Event.objects.get(id=eid)
        except ObjectDoesNotExist:
            return JsonResponse({'status':10022, 'message':'query result is empty'})
        else:
            event['eid'] = result.id
            event['name'] = result.name
            event['limit'] = result.limit
            event['status'] = result.status
            event['address'] = result.address
            event['start_time'] = result.start_time
            return JsonResponse({'status':200, 'message':'success', 'data':event})
    # name为模糊查询,返回结果可能是多条,先将查询的每一条数据放到一个event字典中,再把每个event字典放到datas数组中,最后将整个datas数组作为接口返回字典中data对应的值
    if name != '':
        datas = []
        results = Event.objects.filter(name__contains=name)
        if results:
            for r in results:
                event = {}
                event['eid'] = r.id
                event['name'] = r.name
                event['limit'] = r.limit
                event['status'] = r.status
                event['address'] = r.address
                event['start_time'] = r.start_time
                datas.append(event)
            return JsonResponse({'status':200, 'message':'success', 'data':datas})
        else:
            return JsonResponse({'status':10022, 'message':'query result is empty'})

# 添加嘉宾接口
def add_guest(request):
    eid =  request.POST.get('eid','')                # 关联发布会id
    realname = request.POST.get('realname','')       # 姓名
    phone = request.POST.get('phone','')             # 手机号
    email = request.POST.get('email','')             # 邮箱

    if eid =='' or realname == '' or phone == '':
        return JsonResponse({'status':10021,'message':'parameter error'})

    result = Event.objects.filter(id=eid)
    if not result:
        return JsonResponse({'status':10022,'message':'event id null'})

    result = Event.objects.get(id=eid).status
    if not result:
        return JsonResponse({'status':10023,'message':'event status is not available'})

    event_limit = Event.objects.get(id=eid).limit        # 发布会限制人数
    guest_limit = Guest.objects.filter(event_id=eid)     # 发布会已添加的嘉宾数

    if len(guest_limit) >= event_limit:
        return JsonResponse({'status':10024,'message':'event number is full'})

    event_time = Event.objects.get(id=eid).start_time     # 发布会时间
    timeArray = time.strptime(str(event_time), "%Y-%m-%d %H:%M:%S")
    e_time = int(time.mktime(timeArray))

    now_time = str(time.time())          # 当前时间
    ntime = now_time.split(".")[0]
    n_time = int(ntime)

    if n_time >= e_time:
        return JsonResponse({'status':10025,'message':'event has started'})

    try:
        Guest.objects.create(realname=realname,phone=int(phone),email=email,sign=0,event_id=int(eid))
    except IntegrityError:
        return JsonResponse({'status':10026,'message':'the event guest phone number repeat'})

    return JsonResponse({'status':200,'message':'add guest success'})

# 嘉宾查询接口
def get_guest_list(request):
    eid = request.GET.get("eid", "")       # 关联发布会id
    phone = request.GET.get("phone", "")   # 嘉宾手机号

    if eid == '':
        return JsonResponse({'status':10021,'message':'eid cannot be empty'})

    if eid != '' and phone == '':
        datas = []
        results = Guest.objects.filter(event_id=eid)
        if results:
            for r in results:
                guest = {}
                guest['realname'] = r.realname
                guest['phone'] = r.phone
                guest['email'] = r.email
                guest['sign'] = r.sign
                datas.append(guest)
            return JsonResponse({'status':200, 'message':'success', 'data':datas})
        else:
            return JsonResponse({'status':10022, 'message':'query result is empty'})

    if eid != '' and phone != '':
        guest = {}
        try:
            result = Guest.objects.get(phone=phone,event_id=eid)
        except ObjectDoesNotExist:
            return JsonResponse({'status':10022, 'message':'query result is empty'})
        else:
            guest['realname'] = result.realname
            guest['phone'] = result.phone
            guest['email'] = result.email
            guest['sign'] = result.sign
            return JsonResponse({'status':200, 'message':'success', 'data':guest})
# 用户签到接口
def user_sign(request):
    eid =  request.POST.get('eid','')       # 发布会id
    phone =  request.POST.get('phone','')   # 嘉宾手机号

    if eid =='' or phone == '':
        return JsonResponse({'status':10021,'message':'parameter error'})

    result = Event.objects.filter(id=eid)
    if not result:
        return JsonResponse({'status':10022,'message':'event id null'})

    result = Event.objects.get(id=eid).status
    if not result:
        return JsonResponse({'status':10023,'message':'event status is not available'})

    event_time = Event.objects.get(id=eid).start_time     # 发布会时间
    timeArray = time.strptime(str(event_time), "%Y-%m-%d %H:%M:%S")
    e_time = int(time.mktime(timeArray))

    now_time = str(time.time())          # 当前时间
    ntime = now_time.split(".")[0]
    n_time = int(ntime)

    if n_time >= e_time:
        return JsonResponse({'status':10024,'message':'event has started'})

    result = Guest.objects.filter(phone=phone)
    if not result:
        return JsonResponse({'status':10025,'message':'user phone null'})

    result = Guest.objects.filter(phone=phone,event_id=eid)
    if not result:
        return JsonResponse({'status':10026,'message':'user did not participate in the conference'})

    result = Guest.objects.get(event_id=eid,phone=phone).sign
    if result:
        return JsonResponse({'status':10027,'message':'user has sign in'})
    else:
        Guest.objects.filter(phone=phone).update(sign='1')
        return JsonResponse({'status':200,'message':'sign success'})

对应接口文档

名称 添加发布会
描述 添加发布会
URL http://127.0.0.1:8000/api/add_event/
调用方法 POST
传入参数 eid #发布会id, name #发布会标题, limit #限制人数,status #状态(非必填),address #地址,start_time #发布会时间(格式:2019-10-3012:00:00)
返回值 {‘status’:200, ‘message’:‘add event success’}
状态码 10021:parameter error 10022:event id already exists 10023: event name already exists 10024:start_time format error.It must be in YYY-MM-DD HH:MM:SS format 200:add event success
说明
名称 查询发布会
描述 查询发布会
URL http://127.0.0.1:8000/api/get_event_list/
调用方法 GET
传入参数 eid #发布会id, name #发布会标题
返回值 {“data”:{“start_time”: “2019-10-30T14:00:00”,“name”:“询盘云发布会A”, “limit”:“200”, “address”:“北京”, “status”:“true”},“message”:“success”, “status”:“200”}
状态码 10021:parameter error 10022:query result is empty 200:add event success
说明
名称 添加嘉宾接口
描述 添加嘉宾接口
URL http://127.0.0.1:8000/api/add_guest/
调用方法 POSST
传入参数 eid #关联发布会id, realname #姓名, phone #手机号,email #邮箱
返回值 {‘status’:200, ‘message’:‘add guest success’}
状态吗 10021:parameter error 10022:event id null 10023: event status is not available 10024:event number is full 10025: event has started 10026:the event guest phone number repeat 200:add event success
说明
名称 查询嘉宾接口
描述 查询嘉宾接口
URL http://127.0.0.1:8000/api/get_guest_list/
调用方法 GET
传入参数 eid #发布会id , phone #手机号
返回值 {“data”:[{“email”:“[email protected]”,“phone”:“18001156566”,“realname”:“davieyang”,“sign”:“false”},{“email”:“[email protected]”,“phone”:“18001156566”,“realname”:“davieyang”,“sign”:“false”},{“email”:“[email protected]”,“phone”:“18001156566”,“realname”:“davieyang”,“sign”:“false”}],“message”:“success”,“status”:“200”}
状态吗 10021:eid cannot be empty 10022:query result is empty 200:success
说明
名称 发布会签到接口
描述 发布会签到接口
URL http://127.0.0.1:8000/api/user_sign/
调用方法 GET
传入参数 eid #发布会id, phone #嘉宾手机号
返回值 {‘status’:200, ‘message’:‘sign success’}
状态码 10021:parameter error 10022:event id null 10023: event status is not available 10024:event has started 10025:user phone null 10026:user did not participate in the conference 10027:user has sign in 200:add event success
说明

接口测试用例

from testcase import test_data
import unittest
import requests
import os, sys
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)


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_all_null(self):
        """ 所有参数为空 """
        payload = {'eid': '', '': '', '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'}
        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': '红米Pro发布会', 'limit': 2000, 'address': "深圳宝体", 'start_time': '2017'}
        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': 11, 'name': '一加4手机发布会', 'limit': 2000, 'address': "深圳宝体", 'start_time': '2017'}
        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'])

    def test_add_event_success(self):
        """ 添加成功 """
        payload = {'eid': 11, 'name': '一加4手机发布会', 'limit': 2000, 'address': "深圳宝体",
                   'start_time': '2017-05-10 12:00:00'}
        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')


if __name__ == '__main__':
    test_data.init_data()  # 初始化接口测试数据
    unittest.main()

from testcase import test_data
import unittest
import requests
import os, sys
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)


class AddGuessTest(unittest.TestCase):
    """ 添加嘉宾 """

    def setUp(self):
        self.base_url = "http://127.0.0.1:8000/api/add_guest/"

    def tearDown(self):
        print(self.result)

    def test_add_guest_all_null(self):
        """ 参数为空 """
        payload = {'eid': '', 'realname': '', 'phone': ''}
        r = requests.get(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_guest_eid_null(self):
        """ eid=901 查询为空 """
        payload = {'eid': 901, 'realname': 'tom', 'phone': 13711001100}
        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 null')

    def test_add_guest_status_close(self):
        """ eid=2 状态未开启 """
        payload = {'eid': 3, 'realname': 'tom', 'phone': 13711001100}
        r = requests.post(self.base_url,data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 10023)
        self.assertEqual(self.result['message'], 'event status is not available')

    def test_add_guest_limit_full(self):
        """ eid=2 发布会人数已满 """
        payload = {'eid': 2, 'realname': 'tom', 'phone': 13711001100}
        r = requests.post(self.base_url,data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 10024)
        self.assertEqual(self.result['message'], 'event number is full')

    def test_add_guest_time_start(self):
        """ eid=4 发布会已开始 """
        payload = {'eid':4,'realname':'tom','phone':13711001100}
        r = requests.post(self.base_url,data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 10025)
        self.assertEqual(self.result['message'], 'event has started')

    def test_add_guest_phone_repeat(self):
        """ phone=13800113001 手机号重复 """
        payload = {'eid': 1, 'realname': 'tom', 'phone': 13511001100}
        r = requests.post(self.base_url, data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 10026)
        self.assertEqual(self.result['message'], 'the event guest phone number repeat')

    def test_add_guest_success(self):
        """ 添加成功 """
        payload = {'eid': 1, 'realname': 'tom', 'phone': 13511001199}
        r = requests.post(self.base_url, data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 200)
        self.assertEqual(self.result['message'], 'add guest success')


if __name__ == '__main__':
    test_data.init_data()  # 初始化接口测试数据
    unittest.main()

import unittest
import requests
import os, sys
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)
from testcase import test_data


class GetEventListTest(unittest.TestCase):
    """ 获得发布会列表 """

    def setUp(self):
        self.base_url = "http://127.0.0.1:8000/api/get_event_list/"

    def tearDown(self):
        print(self.result)

    def test_get_event_list_eid_error(self):
        """ eid=901 查询结果为空 """
        r = requests.get(self.base_url, params={'eid': 901})
        self.result = r.json()
        self.assertEqual(self.result['status'], 10022)
        self.assertEqual(self.result['message'], 'query result is empty')

    def test_get_event_list_eid_success(self):
        """ 根据 eid 查询结果成功 """
        r = requests.get(self.base_url, params={'eid': 1})
        self.result = r.json()
        self.assertEqual(self.result['status'], 200)
        self.assertEqual(self.result['message'], 'success')
        self.assertEqual(self.result['data']['name'],u'红米Pro发布会')
        self.assertEqual(self.result['data']['address'],u'北京会展中心')

    def test_get_event_list_nam_result_null(self):
        """ 关键字‘abc’查询 """
        r = requests.get(self.base_url, params={'name': 'abc'})
        self.result = r.json()
        self.assertEqual(self.result['status'], 10022)
        self.assertEqual(self.result['message'], 'query result is empty')

    def test_get_event_list_name_find(self):
        """ 关键字‘发布会’模糊查询 """
        r = requests.get(self.base_url, params={'name': '发布会'})
        self.result = r.json()
        self.assertEqual(self.result['status'], 200)
        self.assertEqual(self.result['message'], 'success')
        self.assertEqual(self.result['data'][0]['name'],u'红米Pro发布会')
        self.assertEqual(self.result['data'][0]['address'],u'北京会展中心')


if __name__ == '__main__':
    test_data.init_data()  # 初始化接口测试数据
    unittest.main()

import unittest
import requests
import os, sys
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)
from testcase import test_data


class GetGuestListTest(unittest.TestCase):
    """ 获得嘉宾列表 """

    def setUp(self):
        self.base_url = "http://127.0.0.1:8000/api/get_guest_list/"

    def tearDown(self):
        print(self.result)

    def test_get_guest_list_eid_null(self):
        """ eid 参数为空 """
        r = requests.get(self.base_url, params={'eid': ''})
        self.result = r.json()
        self.assertEqual(self.result['status'], 10021)
        self.assertEqual(self.result['message'], 'eid cannot be empty')

    def test_get_event_list_eid_error(self):
        """ 根据 eid 查询结果为空 """
        r = requests.get(self.base_url, params={'eid': 901})
        self.result = r.json()
        self.assertEqual(self.result['status'], 10022)
        self.assertEqual(self.result['message'], 'query result is empty')

    def test_get_event_list_eid_success(self):
        """ 根据 eid 查询结果成功 """
        r = requests.get(self.base_url, params={'eid': 1})
        self.result = r.json()
        self.assertEqual(self.result['status'], 200)
        self.assertEqual(self.result['message'], 'success')
        self.assertEqual(self.result['data'][0]['realname'],'alen')
        self.assertEqual(self.result['data'][0]['phone'],'13511001100')

    def test_get_event_list_eid_phone_null(self):
        """ 根据 eid 和phone 查询结果为空 """
        r = requests.get(self.base_url, params={'eid': 1, 'phone': '10000000000'})
        self.result = r.json()
        self.assertEqual(self.result['status'], 10022)
        self.assertEqual(self.result['message'], 'query result is empty')

    def test_get_event_list_eid_phone_success(self):
        """ 根据 eid 和phone 查询结果成功 """
        r = requests.get(self.base_url, params={'eid': 1, 'phone': '13511001100'})
        self.result = r.json()
        self.assertEqual(self.result['status'], 200)
        self.assertEqual(self.result['message'], 'success')
        self.assertEqual(self.result['data']['realname'],'alen')
        self.assertEqual(self.result['data']['phone'],'13511001100')


if __name__ == '__main__':
    test_data.init_data()  # 初始化接口测试数据
    unittest.main()

import os
import sys
import unittest
import requests
from testcase import test_data
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)


class UserSignTest(unittest.TestCase):
    """ 用户签到 """
    def setUp(self):
        self.base_url = "http://127.0.0.1:8000/api/user_sign/"

    def tearDown(self):
        print(self.result)

    def test_user_sign_all_null(self):
        """ 参数为空 """
        payload = {'eid': '', 'phone': ''}
        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_user_sign_eid_error(self):
        """ eid=901 查询结果不存在 """
        payload = {'eid': 901, 'phone': 13711001100}
        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 null')

    def test_user_sign_status_close(self):
        """ eid=3 发布会状态关闭 """
        payload = {'eid': 3, 'phone': 13711001100}
        r = requests.post(self.base_url,data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 10023)
        self.assertEqual(self.result['message'], 'event status is not available')

    def test_user_sign_time_start(self):
        """ eid=4 发布会已开始 """
        payload = {'eid': 4, 'phone': 13711001100}
        r = requests.post(self.base_url, data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 10024)
        self.assertEqual(self.result['message'], 'event has started')

    def test_user_sign_phone_error(self):
        """ phone=10100001111 手机号不存在 """
        payload = {'eid': 1, 'phone': 10100001111}
        r = requests.post(self.base_url, data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 10025)
        self.assertEqual(self.result['message'], 'user phone null')

    def test_user_sign_eid_phone_error(self):
        """eid=1, phone=13511001102 手机号与发布会不匹配 """
        payload = {'eid': 1, 'phone': 13511001102}
        r = requests.post(self.base_url, data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 10026)
        self.assertEqual(self.result['message'], 'user did not participate in the conference')

    def test_user_sign_has_sign_in(self):
        """ 已签到 """
        payload = {'eid': 1, 'phone': 13511001101}
        r = requests.post(self.base_url, data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 10027)
        self.assertEqual(self.result['message'], 'user has sign in')

    def test_user_sign_success(self):
        """ 签到成功 """
        payload = {'eid': 1, 'phone': 13511001100}
        r = requests.post(self.base_url, data=payload)
        self.result = r.json()
        self.assertEqual(self.result['status'], 200)
        self.assertEqual(self.result['message'], 'sign success')


if __name__ == '__main__':
    test_data.init_data()  # 初始化接口测试数据
    unittest.main()

发布了162 篇原创文章 · 获赞 42 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/dawei_yang000000/article/details/102735688