热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTTP接口测试还可以这么玩[通俗易懂]

HTTP接口测试还可以这么玩[通俗易懂]1、背景随着H5在各行业领域的运用,无论是在APP内嵌入H5页面的hybrid应用还是直接在微信公众号或者轻应用中使用H5页面都是非常的

1、背景
  随着H5在各行业领域的运用,无论是在APP内嵌入H5页面的hybrid应用还是直接在微信公众号或者轻应用中使用H5页面都是非常的常见(比如前端页面通过HTTP 接口调用拉取数据进行交互,实现前后台分离)。 而随着此类
技术的应用和发展,作为一个
测试人员,跟上时代的变化,除了保证前端页面UI的正确性,也要保证HTTP接口的正确性,从而保证了整个业务功能逻辑的正确性,而接口如果手工测试,不仅
工作量很大,而且效率比较地下,而它的特点更适合通过搭建自动化框架来测试,既能提升效率,又能保证质量。
  HTTP 接口一般有两种请求方式,一种是POST,一种是GET, 需要关注发起请求headers(POST请求还要关注post 数据)和响应的headers和body,一般情况下返回的数据都是json格式。从Chrome的Network去分析一个网页的请求加载顺序大概就能看出,目前很多网页的请求顺序都是先去请求html,从html里得到css和js的地址,去请求css和js,从js里的http接口去请求相关的数据,如果拉取回来的数据还有很多图片或其他地址,在继续请求图片,回填内容到html网页里,网页内容不断更新变化,其实也就是接口拉取出来数据的变化,页面的样式基本都是一样的:
  
HTTP接口测试还可以这么玩[通俗易懂]
 
 1.1、手工测试hold不住的问题
  
HTTP接口测试还可以这么玩[通俗易懂]
  1)    如上图,视频分类很多,电影、电视剧、综艺、动漫等,每次都把各个频道测试一遍,比较耗时;
  2)   在进行视频组合查询时,各种条件组合能拉取回不同的数据,而组合的方式有上千种,如何都保证查询过滤的正确性;
  3)   前端页面都是正常的,可用户总反馈有时候拉取不到数据,到底哪里出了问题;
  4)   写了用例,但是发现覆盖不全,因为组合场景太多,每个组合场景都测试,工作量又太大;
  5)   线上出现问题了我们却不是第一个知道出问题了,没法对页面的内容进行很好的监控,因为用户场景变化多端;
  
1.2、怎么来通过HTTP接口测试很好的解决上面问题呢
  1)    抽取接口(chrome爬取? http工具分析?手工提取)
  2)    拿到接口后,怎么获取接口参数所有的值(通过线上数据去挨个查找?从运营平台获取数据?)
  3)    怎么把所有线上接口都全部抓取并监控起来
  4) 发现问题的反馈处理
  5) 接口修改维护
  带着这些问题,进行了下面整个自动化
接口测试平台的搭建。
  
2、接口自动化测试思路
  2.1、整个测试流程的梳理
  根据上面1.2所描述将会遇到的问题,整理测试设计思路,每个大项划分出要完成的子项,流程图如下:
  
HTTP接口测试还可以这么玩[通俗易懂]
  
2.2、运行时机
  设计这个测试,是为了更好的更快的发现问题,能尽早的完成测试闭环,找出产品缺陷,反馈开发同学,加快整个迭代的速度。具体有以下场景:
  1)开发自测:开发同学开发完新的接口后,不知道对其他接口有没有影响,可以跑一遍接口测试来确定;
  2)冒烟测试:开发提测后,可以把所有接口和参数都运行一遍,所需要修改域名为测试环境域名和新增接口;
  3)线上监控:对已上线业务进行监控,当某些组合条件查询不到数据或者某些接口拉取不到数据时,能够及时提醒相关测试和开发人员。


 
3、HTTP接口自动化测试平台搭建
  
3.1、技术选型
  1) 前端和后台逻辑:根据目前所熟悉的框架和语言,选择Python+Django+Bootstrap
  2) 存储:使用Mysql存储所有接口数据,分为3块数据(抓取回来所有接口数据、唯一接口数据、参数化接口数据)
  3) 接口监控任务调起管理:Jenkins
  
3.2、接口数据抓取
  1)  手工抓取 (模块、标签是为了方便从业务角度管理http接口脚本)
  
HTTP接口测试还可以这么玩[通俗易懂]
  2) 自动批量抓取:测试人员在手机上访问业务,手机通过笔记本商的Fiddler来代理上网,这样Fiddler可以抓取到所有数据,相关设置可以参考Fiddler手机抓包教程http://jingyan.baidu.com/article/03b2f78c7b6bb05ea237aed2.html,抓包并分析出HTTP 接口数据的流程如下:
 
HTTP接口测试还可以这么玩[通俗易懂]
  a、设置Fiddler的Customize Rules…
  b、修改Script内容,具体代码和相关描述如下图,注意你需要过滤的主要域名,因为手机上有很多其他的请求也会被抓出来,通过域名过滤可以过滤出来当前域名的请求;
  c、在这个脚本中,还可以定义请求中以html、gif、css、js、jpg等等其他和接口无关的请求;
  
HTTP接口测试还可以这么玩[通俗易懂]
  3)把所有有效的接口请求头,请求body,返回头,返回body全部存储到文件里,等待下一步分析;
  抓取到的文件数据如下:
 
HTTP接口测试还可以这么玩[通俗易懂]

  3.3、分析接口
  1)接口清洗:
  a、作用:接口回放,回归测试;
  b、过滤掉提取的http session中的js、css、图片等杂质;
  c、Post请求:过滤掉经过加密请求(暂不考虑),其他session保留;
  d、Get请求:api返回数据都是json类型,根据response中的”Content-Type”字段是否为json判定是否为有效接口;
  e、保留返回码为301/302跳转的http session;
  2)唯一接口过滤:
  a、作用:接口回放,回归测试;
  b、过滤掉提取的http session中的js、css、图片等杂质;
  c、Post请求:过滤掉经过加密请求(暂不考虑),其他session保留;
  d、Get请求:api返回数据都是json类型,根据response中的”Content-Type”字段是否为json判定是否为有效接口;
  e、保留返回码为301/302跳转的http session;
  3)接口清洗流程
 
HTTP接口测试还可以这么玩[通俗易懂]
 
 3.4、接口测试
  1)对清洗的接口进行测试,测试通过后,接口再做入库处理;
  2)接口调用的处理流程:
  
HTTP接口测试还可以这么玩[通俗易懂]


3.5、脚本管理
  1)  可以对测试任务进行管理,设置在批量运行时是否要进行运行,运行的状态展示,运行详情设置以及删除操作,因为接口数量众多,可以选择删除选中或是全部删除:
 
HTTP接口测试还可以这么玩[通俗易懂]
  2)  右侧可以看到所有请求的原始数据(请求时间、接口更新时间、请求数据、请求头部、响应头部、响应内容数据),左侧可以对响应进行校验,分为基础校验和自定义断言,基础校验可以校验返回头代码、返回内容类型、内容长度,自定义断言可以自己添加任何返回数据的字段并设置对比方式和值进行对比,可设置多个字段:
 
HTTP接口测试还可以这么玩[通俗易懂]
  自定义断言:
 
HTTP接口测试还可以这么玩[通俗易懂]
  3)接口参数化,在获取到接口后,可以通过接口参数的key,加上从开发或者运维那里获取到的参数值列表,进行快速参数化,所有参数进行排列组合,生成该接口全集,进行回放测试;
  
3.6、更新接口
  在使用过程中,会遇根据由于业务变动来 新增、修改、删除HTTP API的情况,所以在接口自动化测试时,我们可以通过下面两种情况来处理接口的变动;
  1)从开发那里得知有更改变化的接口,手动通过接口管理页面进行参数的删减或者直接手工新建接口,添加到队列里;
  2)如果是不知道接口是否有变动,目前采用半自动去分析接口(和初始录制接口一样,测试人员在手机上操作一遍业务,Fiddler录制所有接口,再自动识别接口的变更,来更数据库中的接口);
  
HTTP接口测试还可以这么玩[通俗易懂]
  3)具体实现流程图:
 
HTTP接口测试还可以这么玩[通俗易懂]
 
 3.7、日常监控 和 结果输出
  日常监控可以使用Jenkins来做后台管理,通过前端页面提交任务表单后,自动根据提交数据在Jenkins里建立新的job,可以手动触发执行任务或者自动定时触发任务:
  1)在前端页面填写form表单(包括任务名称、业务分类、运行计划、结果邮件推送列表等),提交后,自动在后台添加任务到Jenkins里,如下图;
  
HTTP接口测试还可以这么玩[通俗易懂]
  2)根据运行计划执行后生成监控邮件结果,通知项目相关人员,此处可以配置为当失败时在进行通知,线上的监控一般都是每半小时执行一次,这样能够尽快的获得线上接口运行情况;
 
HTTP接口测试还可以这么玩[通俗易懂]
  3)发现问题的闭环:打通缺陷管理系统,如果发现监控失败的接口,可以点击详情页查看具体失败详情,确认是缺陷,可以一键提交缺陷到缺陷管理系统,方便后面对该问题的跟踪处理。


推荐阅读
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
author-avatar
kanney姜_958
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有