分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

接口测试随笔四之根据Django web框架进行接口测试

发布时间:2023-09-06 01:12责任编辑:苏小强关键词:暂无标签

    

Django快速开发之投票系统

  之前分享过一篇Django开发投票系统的例子。今天在这个例子上做一些延伸,来讲讲web接口的开发与测试。

开发投票系统接口                                                     

 

  虽然投票系统的的功能已经开发完成,但我们并没有开发专门的接口,在当前的投票系统中,在我们调用一个get或post请求时,系统会返回整个页面,并且把测试连同页面一起返回。

  例如,当我们要调用所有问题的接口时(test_get.py)

import requestsbase_url = ‘http://127.0.0.1:8000/polls‘r = requests.get(base_url)code = r.status_codetext = r.textprint(code)print(text)

得到如下结果:

200<html lang="zh-CN"> ?<head> ???<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"> ???<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> ?????</head> ?<body> ???<nav class="navbar navbar-inverse navbar-fixed-top"> ?????<div class="container"> ???????<div class="navbar-header"> ?????????<a class="navbar-brand" href="#">Polls System</a> ???????</div> ?????</div> ???</nav> ???<br><br> ??<div class="well"> ?????<h3>Question List:</h3> ????????????????<ul> ????????????<li><a href="/polls/1/">十一国庆七天假期做什么?</a></li> ????????????<li><a href="/polls/2/">你最想学的自动化工具是什么?</a></li> ?????????</ul> ???</div> ?????<footer> ???????<p>&copy; Company 2016 & chongshi</p> ?????</footer> ?</body></html>

   而特有的接口应该返回的是数据,而不是整个页;而数据一般格式为Json格式。所以,需要对试图层(.../polls/views.py)进行改造,使其只提供接口,并单纯的返回数据。

 

from django.shortcuts import render, get_object_or_404from django.http import HttpResponseRedirectfrom django.core.urlresolvers import reversefrom .models import Question, Choicefrom django.http import HttpResponseimport json# Create your views here.# 查看所有问题def index(request): ???latest_question_list = Question.objects.all() ???dicts = {} ???if latest_question_list: ???????for question in latest_question_list: ???????????dicts[question.id] = question.question_text ???????j = json.dumps(dicts) ???????return HttpResponse(j) ???else: ???????return HttpResponse("question list null")# 查看单个问题选项def detail(request, question_id): ???choices = Choice.objects.filter(question_id=question_id) ???dicts = {} ???print(question_id) ???if question_id: ???????for choice in choices: ???????????dicts[choice.id] = choice.choice_text ???????j = json.dumps(dicts) ???????return HttpResponse(j).....

   为了节省时间,暂时先对查看所有问题、单个问题的所有选项两个功能进行接口改造当然这里的改造也不够完整和健壮例如单个问题的所有选项的接口,接收的参数question_id 如果为空,应该提示,参数错误。如果查询不到相关问题,应该提示,查询结果为空,如果传的类型不为数字,应该提示,类型错误。这些都是一个健壮的接口应有的处理逻辑。

 

再次执行test_get.py文件。

200{"1": "\u5341\u4e00\u56fd\u5e86\u4e03\u5929\u5047\u671f\u505a\u4ec0\u4e48\uff1f", "2": "\u4f60\u6700\u60f3\u5b66\u7684\u81ea\u52a8\u5316\u5de5\u5177\u662f\u4ec0\u4e48\uff1f"}

   这一次得到的就是json类型的数据了。不过,返回值对中文进行了unicode的编码。这里提供个小技巧,将其转换成中文。

  打开Firefox浏览器的Firebug工具,切换到“控制台”标签。

 

 

 

编写接口文档                                                         

  

  编写接口文档也是非常重要的一个环节,因为我们编写的接口是需要给别人调用的,那么别人如何知道我们的接口是用get还是post调用呢?参数都有哪些?当然需要参考接口文档了。

1、获取所有问题

url

http://127.0.0.1:8000/polls

请求类型

get

需要参数

返回格式

json

返回结果

{"1": "十一国庆七天假期做什么?", 

"2": "你最想学的自动化工具是什么?"

}

错误类型

暂无(接口代码需要补充逻辑)

 

2、获取单个问题的所有选项

url

http://127.0.0.1:8000/polls/

请求类型

get

需要参数

question_id

 

返回格式

json

 

返回结果

{"1": "旅行",

 "2":"看电影" ,

 "3":"看书" 

}

错误类型

暂无(接口代码需要补充逻辑)

……

  好啦!接口文档的大体结构就是上面的样子。有了这个份文档,我们接下来就很容易知道如何调用这些接口做测试了。

系统接口测试                                                          

 

  对于编写接口测试来说,我们会涉及到两个技术。前面也都有过简单介绍,unittest单元测试框架和request库。

 

import unittestimport requestsclass PollsTest(unittest.TestCase): ???def setUp(self): ???????self.base_url = ‘http://127.0.0.1:8000/polls‘ ???????def tearDown(self): ???????pass ???????def test_get_poll_index(self): ???????‘‘‘测试投票系统首页‘‘‘ ???????r = requests.get(self.base_url) ???????code = r.status_code ???????text = r.text ???????self.assertEqual(code, 200) ???def test_get_poll_question(self): ???????‘‘‘获得问题1的所有选项‘‘‘ ???????r = requests.get(self.base_url+‘/1/‘) ???????code = r.status_code ???????text = r.text ???????self.assertEqual(code, 200) ???????self.assertIn("3",text)if __name__ == ‘__main__‘: ???unittest.main()

 

  接口用例测试本身的编写是简单的,我们只用调用接口,传递不同的参数。从而验证返回值是否符合预期即可。

接口测试随笔四之根据Django web框架进行接口测试

原文地址:http://www.cnblogs.com/ruanchengqing/p/7542743.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved