Django框架学习18--虫师web接口开发与自动化测试2--django单元测试与接口开发

1.django单元测试

在tests.py文件中编写测试类,继承django的TestCase,该类继承自unittest

from django.test import TestCase, Client

# Create your tests here.
from django.test.utils import setup_test_environment

from sign.models import Guest, Event


# 不要单独执行该测试文件,python3 manage.py test 执行测试,test后可以添加模块或某个模块下的某个python文件或某个方法进行测试
#如 python3 manage.py test sign仅测试sign目录下的脚本,test sign.tests仅运行tests.py下脚本或-p test*.py
class ModelTest(TestCase):#继承django的unittest实现类TestCase
    def setUp(self) -> None:
        #创建event和Guest对象,并不会真正向数据库插入数据,所以测试完毕后不用清理数据,测试脚本可反复执行
        event1 = Event.objects.create(id=4, name='宜家发布会', limit=6000, status=True, start_time
        ='2018-08-31 02:18:22', address='北京')
        Guest.objects.create(realname='divid', event=event1, phone='15696963235', email='divid@qq.com', sign=False)

    def test_event_models(self):
        #测试查询出来的结果
        event = Event.objects.get(name="宜家发布会")
        self.assertEqual(event.address, "北京")
        self.assertTrue(event.status)

    def test_guest_models(self):
        guest = Guest.objects.get(realname='divid')
        self.assertEqual(guest.phone, "15696963235")
        self.assertFalse(guest.sign)

    def test_3(self):
        response = self.client.get('/login/')#通过client发出请求
        #test.client可以模拟浏览器发出请求
        self.assertEqual(response.status_code, 200)

2.接口开发

1.在urls.py中填写url规则

2.编写接口函数,通过requests对象解析出参数,然后对参数进行判断进行不同类型json格式对象的返回

from django.core.exceptions import ValidationError
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt

from sign.models import Event
#接口开发
@csrf_exempt
def add_event(request):
    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', '')  # 发布会时间#获取请求参数
    result = Event.objects.filter(name=name)#查询数据库
    #根据结果与参数进行判断和返回,返回Json类型数据
    if name == '' or limit == '' or address == '' or start_time == '':
        return JsonResponse({'status': 10021, 'message': 'parameter error'})
    if result:
        return JsonResponse({'status': 10023, 'message': 'event name already exists'})

    if status == '':
        status = 1

    try:
        Event.objects.create(name=name, limit=limit, address=address, status=int(status), start_time=start_time)
    except ValidationError:
        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 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))

    n_time = int(time.time())  # 当前时间

    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_event_list(request):
    eid = request.GET.get("eid", "")  # 发布会id
    name = request.GET.get("name", "")  # 发布会名称

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

    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})

    if name != '':
        datas = []
        results = Event.objects.filter(name__contains=name)
        if results:
            for r in results:
                event_dict = {
                    'eid': r.id,
                    'name': r.name,
                    'limit': r.limit,
                    'status': r.status,
                    'address': r.address,
                    'start_time': r.start_time,
                }
                datas.append(event_dict)
            return JsonResponse({'status': 200, 'message': 'success', 'data': datas})
        else:
            return JsonResponse({'status': 10022, 'message': 'query result is empty'})


# 嘉宾查询接口
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_dict = {
                    "realname": r.realname,
                    "phone": r.phone,
                    "email": r.email,
                    "sign": r.sign,
                }
                datas.append(guest_dict)
            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'})

    try:
        result = Event.objects.get(id=eid)
    except Event.DoesNotExist:
        return JsonResponse({'status': 10022, 'message': 'event id null'})

    if result.status is False:
        return JsonResponse({'status': 10023, 'message': 'event status is not available'})

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

    n_time = int(time.time())  # 当前时间

    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'})
    else:
        for res in result:
            if res.event_id == int(eid):
                break
        else:
            return JsonResponse({'status': 10026, 'message': 'user did not participate in the conference'})

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

3.接口开发文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值