web接口开发与测试

  最近一直在学习和整理web开发与接口测试的相关资料。接口测试本身毫无任何难度,甚至有很多工具和类库来帮助我们进行接口测试。大多测试人员很难深入了解web接口测试的原因是对web开发不太了解,当你越了解开发就会越看得清接口是什么。当然,web开发是比较麻烦,我们很难一下子掌握。

注:不过本文并不是一个零基础的文章,需要你对 Django web开发,requests接口库,unittest单元测试框架,三者有一定的了解。

Django快速开发之投票系统

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

开发投票系统接口                                                     

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

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

import requests

base_url = ‘http://127.0.0.1:8000/polls‘
r = requests.get(base_url)
code = r.status_code
text = r.text
print(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_404
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from .models import Question, Choice
from django.http import HttpResponse
import 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 unittest
import requests

class 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()

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

时间: 2024-10-12 03:54:01

web接口开发与测试的相关文章

关于《Web接口开发与自动化测试--基于Python语言》

关于封面logo 首先,你会被书封上面logo吸引,这么炫酷?双蛇杖?嗯,这是Requests的新logo. 旧的logo是一只乌龟. 新logo是双蛇杖: 看到新logo我首先想到的是 火爆全网页游 “大天使之剑”,直到前两天一位网友告诉我这是双蛇杖,然后,我百度了一下双蛇杖的神话故事.然后,找到了Requests库开发者的一次提交,有人说喜欢旧logo,然后,得到的答复是:“This represents the peace Requests brings between the serve

JAVA WEB接口开发简述

目录 1. JAVA WEB接口开发简述 1.1. 基本了解 1.2. 提供接口 1.3. 调用接口 1. JAVA WEB接口开发简述 1.1. 基本了解 当我们想去访问其他网站的接口时候,而又不想要登录验证等操作,那么可以选择使用平台提供的接口进行调用得到我们需要的信息.比如说,一个网站A有一个接口路径: http://192.168.10.119:8080/xmq/webservice/menu/search?ak=APP00013&token=yq6ZaljwYMa1x83r0hSHVh

体悟与总结之虫师作品《Web接口开发与自动化测试...Python..》问题处理(持续更新。。。)

在亚马逊购买了此书,在实际看完并身体力行地操作每一行代码后,也在该站留下了符合当时见解的评论.文中确实有不少令人疑惑的地方,因为很多细节没有谈到,可能虫师本人经验丰富没遇到,我作为小白遇到不少,但没有被吓退,一个一个解决好并总结在这里. ----------------------------- 这本书可以说虫师确确实实花了不少心思去做的.虫师姓胡,正好我也姓胡,但是我没有虫师那么优越的先天条件,也没有虫师那么博大的技术体系,而且我还要来吐槽一下下. 这本书可以说是虫师得意之作,测试能涉足接口.

Web接口开发-基于Python

首先.理解必知 建议:直接上Python3.x的车 Windows下 安装Python 3.5.2 安装包:https://www.python.org/downloads/release/python-352/ 记得勾选 "Add Python 3.5 to PATH"

向军2017年最新laravel开发宝典 laravel结合vue与接口开发webapp实战视频教程

课程介绍:Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它不仅可以让我们从面条一样杂乱的代码中解脱出来,还可以帮我们构建一个完美的网络APP,而且每行代码都可以简洁.富于表达力.在Laravel中已经具有了一套高级的PHP ActiveRecord实现 -- Eloquent ORM.它能方便的将"约束(constraints)"应用到关系的双方,这样你就具有了对数据的完全控制,而且享受到ActiveRecord的所有便利.Eloquen

python测试开发django-59.restful接口开发

前言 REST 不是什么具体的软件或者代码,而是一种思想.现在流行前后端分离开发项目,一般用 json 来交换数据. 相信写过模板的同学都知道,只要哪怕页面中的数据有一丝丝变动,那整个页面都需要重新渲染,这对性能无疑是巨大的浪费,并且页面中只有一些元素会和数据相联系, 比如列表中的 元素,如果数据有变化,能直接只更新 元素就好了,REST 就是为此而生. REST简介 什么是RESTful 面向资源? 先看REST是什么意思,英文Representational state transfer 表

Axis2实现 web service接口开发 + 客户端调用

一. 新建一个web项目, 1.打开axis2.war包,将conf,lib,modules三个文件夹复制到项目的WEB-INF文件夹下,再在WEB-INF目录下新建一个services文件夹,然后在services文件下新建一个文件夹(任意取名): 再新建META-INF文件夹,最后再新增services.xml,接口信息就写在这里面. 具体路径:WEB-INF/services/myservice/META-INF/services.xml 2.配置 web.xml .加载axis2 和 a

API接口开发 配置、实现、测试

Yii2 基于RESTful架构的 advanced版API接口开发 配置.实现.测试 环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_rewrite.so 将其前面的#去掉,如果没有找到则添加进去. 找到一下代码 <Directory "C:/phpStudy/Apache/cgi-bin"> AllowOverride

Web Service接口开发流程(转)

1.  设计数据库物理结构(可能体现为TABLE). 2.  设计数据库的逻辑结构(可能为VIEW OR PROCEDURE). 3.  对VIEW OR PROCEDURE 等数据库对象进行授权. 4.  对数据库对象授权文档收集.(保证以后移动数据库时快速对数据库用户进行授权) 5.  设计业务类库. 6.  把业务类库函数的文档写到接口系统数据库以存档.(由系统自动生成函数的唯一ID号) 7.  根据函数的唯一ID号设计封装成Web Service接口. 8.  把接口系统数据库已存档的文