web接口开发与测试——你了解多少

news2024/12/26 23:13:50

目录

前言

Django快速开发之投票系统

编写接口文档

系统接口测试

总结:


前言

最近一直在学习和整理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()

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自然语言生成:解决低频Tokens退化整个Tokens模型问题

Rare Tokens Degenerate All Tokens:Improving Neural Text Generation via Adaptive Gradient Gating for Rare Token Embeddings 摘要 最近的研究发现&#xff0c;大规模神经语言模型学到的Token embeddings&#xff08;令牌嵌入&#xff09;具有退化的各向异性和狭锥形状。…

MobileNet

MobileNet 文章目录 MobileNet单词重要不重要 摘要MobileNetV1Motivation深度可分离卷积逐通道卷积&#xff08;Depthwise Convolution&#xff09;逐点卷积&#xff08;Pointwise Convolution&#xff09;参数对比计算量对比 V2Inverted ResidualsLinear BottlnecksModel Arch…

使用docker进行upload-labs靶场的安装搭建

由于我是在kali上搭建&#xff0c;默认没有docker服务&#xff0c;这里就从按照docker开始讲解 一、docker按装 1、Linux内核版本查看 #如果你是kali可直接从第四步开始 #安装docker要求内核版本kerner>3.10 #为此&#xff0c;先检查当前Linux系统的内核版本 uname -a2…

分析Spring Boot项目启动慢原因之 《一》打印bean耗时

分析Spring Boot项目启动原因之 一 打印bean耗时 由于项目比较久远&#xff0c;积累的代码犹如屎山&#xff0c;然后项目启动也特别慢&#xff0c;然后产生想要优化一下启动速度&#xff0c;故写了一个Bean启动时的耗时分析&#xff1a;package com.tekrally.assetManagement.u…

【Linux】Haproxy搭建Web群集

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Haproxy搭建Web群集 一、Haproxy概述1.常见的Web集群调度器2.Haproxy应用分析3.Haproxy常用调度算法4.Haproxy的主要特性5.LVS、Nginx、Haproxy的区别 二、Haproxy搭建Web群集…

【算法题解】49. 二叉树的序列化与反序列化

这是一道 困难 题 https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/ 文章目录 题目深度优先搜索&#xff08;前序遍历&#xff09;Java 代码实现Go 代码实现复杂度分析 广度优先搜索&#xff08;层序遍历&#xff09;Java 代码实现Go 代码实现复杂度分析 …

容器的本质是什么

广义上来说&#xff0c;容器技术是动态的容器、静态的镜像和远端的仓库这三者的组合。 容器&#xff0c;就是一个特殊的隔离环境&#xff0c;它能够让进程只看到这个环境里的有限信息&#xff0c;不能对外界环境施加影响。 对于 Linux 操作系统来说&#xff0c;一个不受任何限…

【区块链】常见共识机制汇总

文章目录 公有链PoW - Proof of WorkPoS - Proof of StakeDPoS - Delegate Proof of StakePoA - Proof of Activity - 行动证明PoB - Proof of Burn 联盟链PaxosMulti-PaxosPBFTDDBFTIDBFTHotstuffZyzzyvaPoETCasperOurobrosPoSVMG-DPoSRPCAAlgorandTendermint 私有链 公有链 P…

用python实现扫雷游戏

前言 本人最近在学习python语言&#xff0c;发现python是一门很有意思的语音。python有大量的库&#xff0c;大量的函数&#xff0c;可以实现非常多的功能。尤其是在可视化方面&#xff0c;可以画图&#xff0c;可以弹出窗口。于是我就想着看能不能用python编写一个扫雷游戏。…

5. 创建声卡

代码位置 sound/soc/generic/simple-card.c static int asoc_simple_card_probe(struct platform_device *pdev) {...ret devm_snd_soc_register_card(dev, card);... } asoc_simple_card_probe -> devm_snd_soc_register_card -> snd_soc_register_card int snd_soc_r…

MS1825 SDK 移植指南

1. 概述 MS1825 SDK 支持以下 Macrosilicon 芯片&#xff0c;按照芯片功能组合的不同&#xff0c; SDK 中相关 API 和类型的定义有所 不同&#xff0c;请在该文档 API 和类型说明时特别关注&#xff1a; MS1825 SDK 的作用是帮助用户建立基于 MS1825 的视频输入输…

力扣 17. 电话号码的字母组合

题目来源&#xff1a;https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/ C题解&#xff1a; 递归法。 确定回溯函数参数&#xff1a;首先需要一个字符串s来收集叶子节点的结果&#xff0c;一个字符串数组result保存起来&#xff0c;定义为全局…

78-基于stm32单片机电压电流检测LCD1602显示(程序+原理图+元件清单全套资料)...

资料编号&#xff1a;078 功能介绍&#xff1a;采用stm32单片机作为主控CPU&#xff0c;采用精密电阻分压将高电压分压后接入STM32单片机ADC接口&#xff0c;采用ADC可以采集出当前的电压值&#xff0c;通过功率电阻来测量电路中的电流&#xff0c;通过串联电路电流相同的原理&…

正则表达式 教程与简介 | 一看就懂!!!(一)

目录 一、正则表达式 - 教程 二、 正则表达式的模式 &#xff08;一&#xff09;字面值字符 &#xff08;二&#xff09;特殊字符 &#xff08;三&#xff09;字符类 &#xff08;四&#xff09;元字符 &#xff08;五&#xff09;量词 &#xff08;六&#xff09;边界…

如何进行小红书笔记关键词布局,热词分析!

坐拥2.6亿活跃用户&#xff0c;小红书已经成为品牌宣推、种草的重要平台之一。那么品牌进入平台&#xff0c;如何进行小红书笔记关键词布局&#xff0c;热词分析&#xff01; 一、 如何确定关键词 想要做好小红书关键词布局&#xff0c;首先要明确如何确定关键词。 1、当我们要…

shell判断程序是否运行,守护进程

一、需求 服务部署在linux上&#xff0c;要求服务器上的服务可以一直保持正常运行 二、问题 在linux上部署的微服务&#xff0c;不知道什么原因过一段时间就自己停掉了&#xff0c;无法启动。 三、解决办法 添加angle守护进程&#xff0c;通过定时执行脚本来判断程序是否运行…

为什么对ChatGPT、ChatGLM这样的大语言模型说“你是某某领域专家”,它的回答会有效得多?(一)...

“ 太长不看总结版&#xff1a;LLM大模型的本质在于计算某个词汇后面应该跟着哪些词汇的概率。当问题给定了特定的限定范围后&#xff0c;它能够找到一条相对明确的计算路径&#xff0c;从一系列概率分布中挑选出所需的答案。否则&#xff0c;它会根据最常见且最高概率的组合方…

浑元太极马老师和小薇-UMLChina建模知识竞赛第4赛季第7轮[更新]

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 第7轮一直无人得分&#xff0c;再次更换题目。 因有的题目之前已经出过&#xff0c;本轮需要最先答对全…

聊天室(二)__ unipush 推送如何实现?

你想搞个自己的聊天室 app 吗&#xff1f;好多前端同学会好奇聊天室app的推送是怎么搞的&#xff1f;今天就以前端同学使用最多的 uniapp 开发的 app 推送为例&#xff0c;悄悄告诉大家推送是如何实现的&#xff01; 项目技术栈&#xff1a; 项目基于 vue3 的 uniapp 推送基于…

从小白到大神之路之学习运维第51天---第三阶段----redis高可用集群数据库的安装部署

第三阶段基础 时 间&#xff1a;2023年7月3日 参加人&#xff1a;全班人员 内 容&#xff1a; 生产级redis cluster部署 目录 一、环境配置&#xff1a;【两台服务器】 二、redis多实例配置&#xff1a; 三、构建redis cluster集群 四、生产集群部署 五、集群故障切…