CSDN话题挑战赛第2期
参赛话题:学习笔记

目录

1. 什么是接口?

(1)HTTP

(2)域名

(3)资源路径

(4)参数

2. 接口测试

(1)接口测试的本质

(2)接口测试的意义

(3)接口文档

(4)怎么做

3. 使用Postman执行接口测试用例

(1)通过GET方式发送HTTP请求

(2)通过POST方式发送HTTP请求

4. python执行接口测试用例

(1)get请求

(2)post请求

5. 作业


今天我们再来介绍接口测试。话不多说,开始整干货,老规矩,首先全图镇楼

1. 什么是接口?

什么是接口,接口测试就是对接口进行测试。我们可以先看一个例子,比如说你通过浏览器查询天气,浏览器有一个搜索引擎,在搜索引擎里面写入某某地的的天气,然后他就会返回该地的天气状况。浏览器请求天气信息,向天气系统发送请求。天气系统知道你的请求之后,会把天气信息返回给你。

这时候你对这个天气系统发送的是一个 URL,而天气系统返回给你的是关于天气的各种各样的信息。

这个响应结果比较原始,还没有经过前端同学的加工。比如说江苏南京,温度,是否阵雨,风向等信息,在前端同学那里,他会把这些数值都取出来,结合html、css和js就可以在页面上进行显示。

像这样你发一个 URL ,天气系统就返回给你一个天气信息,就那么一去一回的过程,就是接口请求的过程。就好像你去电影院买票一样,你给他钱,他给你票。

这个URL就是请求信息,如下图:

(1)HTTP

HTTP 是指协议,这个协议是客户端和服务端都互相遵守的契约,打个比方就是,租客和房东签的租房合同。

(2)域名

www.webxml.com.cn是指服务器地址,其实服务器地址是一个IP 地址和一个端口号组成,IP地址加端口号组成的一串数字,但是很多人记不住这一串数字,你也没办法记。但是你可以通过这种域名的方式www.webxml.com.cn,就不用记一长串的数字了,就相当于ip地址加端口号的别名昵称。

域名与 IP 地址加端口号是绑定的,实际上在网络传输的时候,域名会自动翻译成那个 IP 地址加端口号形式,根据IP 地址加端口号可以找到服务器到底在哪。

(3)资源路径

在这个 URL 里面,域名后面是资源路径,“/WebServices/WeatherWebService.asmx/getWeatherbyCityName”,你知道为什么吗?通过域名找到了这个服务器,服务器里运行这应用,在应用里就是通过资源路径指向具体的应用代码在哪里,应用代码完成响应的功能,比如查找天气信息等。

(4)参数

资源路径后面是参数。你要哪个城市的天气信息,就以这个城市作为一个参数,这还是比较灵活的,只要符合参数的取值范围,都可以查询。

所以说了这么多到底什么是接口?接口就是天气系统提供给外界访问的一个窗口,就叫接口。这个 天气URL就是我的外界可以访问接口。其实这个天气系统它有很多很多的接口,有成百上千个接口就供天气系统内部使用。因为天气系统它不止只有一个功能,比如查询天气信息,查询天气预报,还可以总结以往的天气和去年的对比,甚至预测明年的天气等等,各种各样的功能都有了,每个功能都点都对应的一个接口。查询城市天气是它成百上千的接口中的一个,并且是对外开放的,他有很多不对外开放的。

2. 接口测试

接口测试就是针对于接口的测试,就针对于这个 URL 进行测试,就是你拿到这个 URL 之后,然后返回这个结果,这就是接口测试。

接口测试首先就是先拿到一个接口文档,接口文档里都写明了需要进行哪些测试,基本上都是包含一个接口请求的URL,请求方式POST还是GET,重点的是参数的类型和数值,以及返回值。

我们要做的就是拿这个URL在Postman上运行一下,看看运行后的结果和接口文档里的期待结果是否一致,一致则测试通过,没通过就给开发人员提BUG了。

(1)接口测试的本质

接口测试的本质就是传输数据,获得结果。传输的是啥?传输的是URL,传输的是你的一个参数,是你要查南京的这个天气的参数,获得结果就是把你南京的这种天气,这个温度,风向,还有阵雨什么的,返回给你。

(2)接口测试的意义

接口测试的意义是什么吗?就是你通过这个 URL访问这一个天气系统。首先它这个天气系统的代码肯定是写好的,这样才能对你的请求进行处理,这个代码里具体怎么做的,就要问开发人员了,我们只要能获得结果,就证明接口是可用的。开发人员把这功能开发好之后,然后你才能进行接口测试。这个在先后顺序上是不能反的,就像饭做好了才能吃饭,巧妇难为无米之炊。

当前已经获得了结果,这个结果是比较原始的形式,可能是json类型或者xml类型的,并不是我们期待的直接返回一个页面,因为前端人员还没有来得及处理。

所以接口测试就是在后端人员开发功能,前端人员还没有来得及处理的档口进行的活动,这样做它有什么好处呢?早于前端,晚于后端,就是它能早发现问题,早发现早预防。比如针对一个接口,你测试发现问题了,那你就可以让程序员立马改正。如果等到前端人员写好界面了,再测,出现了问题,后端人员不仅要改,前端人员也要改,真是牵一发而动全身。接口测试的意义就是,前端人员拿到结果直接解开发页面,而不是在不确定的结果下开发一个不确定的页面,既能早预防早发现,又能降低成本,何乐而不为呢。

其实等到前端开发的时候都已经到了这个开发的最后几个阶段了。这时候接口还不通的话,只能靠加班来解决了。如果这时候趁早把这个接口都跑通的话,那前端直接拿过来就用了,这样的话就能保证产品的准时上线了。

所以趁后端刚开发好的一个功能,就通过这个接口测试,测试一下是否能返回结果。之前的一些软件测试都是针对于前端已经开发好的界面,一旦发现bug,可能是前端的锅也可能是后端的锅,然而这种接口测试的方式,更进一层,先于前端,晚于后端,这样将bug的范围分隔开来,接口测试只测后端,等到前端写好界面,剩下的就针对前端进行测试,避免扯皮。

(3)接口文档

其实你可能会有点疑问,就是后端人员刚开发好一个接口,你这边就投入了测试,实时性上是保证了,可是接口数量一多,尤其是传递的参数千奇百怪,返回结果也各有千秋,不一会就全乱了,有没有一个像需求文档那样的东西,可以按图索骥,毕竟测试工作拼的是体力而不是拼记忆力。

其实是有这么一个文档即接口文档,接口文档是接口测试的一个依据,这个文档也就是开发人员写的。当他他写好一个功能之后,紧接着就要把这个功能接口,请求方式,参数,期待结果写进文档里。这样的每条记录就是测试用例。

在接口文档中,请求方式大多数情况下是GET或者POST。 GET就是跟着URL一起传过来的那个参数,但是它有一个坏处,就你把这个 URL 放在浏览器上,别人能看得你传的是什么内容。这样的话数据就不保密了。比如你通过接口使用GET方式传一个用户名,别人就可以直接从这个 URL上面获得你的用户名,用户名是不是就泄露了。所以针对这种不安全的状态就出现了POST请求方式,POST和GET的相同点就是都会传一个URL,不同点是GET的URL里会带参数,POST的URL里不带参数,参数放在消息体里,别人看不见摸不着,别提多安全了。

POST的好处除了安全,还能传递大数据量的参数,表现的形式更丰富,GET就依赖URL传递信息,传的信息少还不安全,当前并不是说GET请求方式就万恶不赦的,只是应用场景不同,没有优劣之分,GET适合读取信息,POST适合修改信息。

在获得服务器的响应结果的时候,通常都会附带一个响应码,这个响应码就是HTTP状态码,可以根据HTTP状态码的取值,可以判断是成功响应还是发生了异常,一般情况下HTTP状态码为200代表成功响应,除200以外的其他状态码都是异常状态,为了更清楚的表明到底发生了何种异常,异常状态码取值也会不同,以下是具体的状态码以及代表的意义:

(1)200:代表你发送的请求成功了,服务端成功响应了你的请求。

(2)202:代表你发送的请求已接受,但服务端还未完成处理。

(3)301:你请求的资源已被永久地移动到新的URL,网页会跳转到新的地址。

(4)302:URL临时移动,与301类似。但资源只是临时被移动,客户端应继续使用原有URL。

(5)400:客户端请求的语法错误,服务器无法理解。

(6)403:资源不可用,服务器理解客户的请求,但拒绝处理它,通常是由于服务器上文件或目录的权限设置导致的Web访问错误。

(7)404:服务器无法根据客户端的请求找到资源(网页),也就是代表着你请求的资源(网页)不存在了。

(8)500:服务器的内部产生了错误,无法完成客户端的请求。

(9)501:服务器不具备完成请求的功能,无法完成此请求。

(4)怎么做

首先从开发人员获得一个接口文档,接口文档的内容就是你的测试用例,你要做的就是通过PostMan或者自动化脚本执行这些接口,获取实际结果与接口文档的预期结果进行对比,符合预期就算测试通过,不符合则通过禅道提BUG。注意一般针对出现的不符合预期的结果,在提BUG的时候,除了写好测试步骤,最好再加一个截图,一图胜千言。

3. 使用Postman执行接口测试用例

(1)通过GET方式发送HTTP请求

发送此HTTPS请求,并采用GET方式进行发送

操作步骤如下。

1:在左侧下拉框选择GET的请求方式。

2:在地址栏输入URL请求:http://autodev.openspeech.cn/csp/api/v2.1/weather?openId=aiuicus&clientType=android&sign=android&city=南京

3:Query Params中的参数是系统自动填充的。

4:当单击“Send”按钮时,就可以将请求发送给服务器。

单击完“Send”按钮后,Postman就会把服务端返回的内容以json的形式呈现在下方区域

(2)通过POST方式发送HTTP请求

当采用POST方式发送HTTP请求时,为了安全起见,其传递的参数不能直接放在URL中,而是放在消息体里

1:在左侧下拉框选择POST的请求方式:

2:在地址栏输入不带参数的请求的URL:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName

3:选定“Body”单选框。-> 选定“x-www-form-urlencoded”单选框,以KEY-VALUE的方式写入参数"theCityName"和参数值"南京"

4:单击“Send”按钮,获取服务端的响应内容。

总结:

post请求方式中参数并不是写在url上,而是写在请求体body中,这和get请求方式的不同之处

这里的请求天气的接口恰好都支持get或post请求,但是这并不能说明get和post就能互换使用,到底使用post还是get,最终还是要看接口文档中的要求。

4. python执行接口测试用例

(1)get请求

【getWeather.py】

01 import requests
02 test_params = 'theCityName=南京'
03 r = requests.get('http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName', params=test_params)
04 print(r.status_code)
05 print(r.headers)
06 print(r.text)

【代码分析】

● 第02行代码,将参数“theCityName=南京”赋值给变量test_params。

● 第03行代码,调用requests模块中的GET方式来发送此请求,即requests.get()方法。在此方法中加入了一个params参数,并将变量test_params的值赋给params这个参数,最后把请求回来的结果赋给变量r。

● 第04行代码,print(r.status_code) 表示打印出系统返回的HTTP协议状态码。

● 第05行代码,print(r.headers) 表示将响应头的信息打印出来。

● 第06行代码,print(r.text)表示以文本格式返回正文信息,并打印出来。

【结果】

(2)post请求

【postWeather.py】

01 import requests
02 test_params = {'theCityName':'南京'}
03 r = requests.post('http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName', data=test_params)
04 print(r.status_code)
05 print(r.headers)
06 print(r.text)

【代码分析】

● 第02行代码,将参数“theCityName=南京”以JSON的格式进行书写“{'theCityName':'南京'}”,并将此字符串赋给变量test_data。

● 第03行代码,调用requests模块中的POST方式发送此请求,即requests.post()方法。在此方法中加入了一个data参数,并将变量test_data的值赋给data这个参数,最后把请求回来的结果赋给变量r。

● 第04行代码,print(r.status_code)表示打印出系统返回的HTTP协议状态码。

● 第05行代码,print(r.headers)表示将响应头的信息打印出来。

● 第06行代码,print(r.text)表示以文本格式返回正文信息,并打印出来。

【结果】

5. 作业

(1)请使用postman工具和python分别执行上文中的查询天气的测试用例

(2)分别说一说在使用postman工具和python的时候,GET请求方式和POST请求方式的区别?

五千字聊一聊接口测试相关推荐

  1. 计算机论文一千五,1.论文字数不够,正文要五千字,至少增加1000,但不要抄袭.DOC...

    PAGE 1.论文字数不够,正文要五千字,至少增加1000,但不要抄袭 2.格式不对.格式要求及例子我给你附在后面,照葫芦画瓢,每一部分都要有,格式都要对. 请3日内改好,已经来不及了.4月末系统关闭 ...

  2. 三万五千字长文!让你懂透编译原理(六)——第六章 属性文法和语法制导翻译

    三万五千字长文!让你懂透编译原理(六)--第六章 属性文法和语法制导翻译 长文预警 系列文章传送门: 万字长文+独家思维导图!让你懂透编译原理(一)--第一章 引论 万字长文!让你懂透编译原理(二)- ...

  3. 2W五千字的C++基础知识整理汇总

    最近发现一篇两万五千字的C++基础知识大汇总,可把我高兴坏了.白嫖,必须白嫖! 来源:高效程序员 一 .从"hello world" 入门C++! C++总览简介 C++ 是一种静 ...

  4. 转发——————《黄金问题3---一万五千字教你如何全面爱护你的膝盖》(正文+1楼回复必看)...

    <黄金问题3---一万五千字教你如何全面爱护你的膝盖>(正文+1楼回复必看)  由 mathiasych 发表在 虎扑篮球· 健身和运动健康 http://bbs.hupu.com/fit ...

  5. 基于Android的漫画阅读器App设计与实现,安卓、MySQL、Java、Andriod Studio,前台用户+后台管理,完美运行,有一万五千字论文。

    基于Android的漫画阅读器App设计与实现,安卓.MySQL.Java.Andriod Studio,前台用户+后台管理,完美运行,有一万五千字论文. 用户模块功能: 引导页:首先进入APP之后会 ...

  6. 干货 | 五千字长文带你快速入门FlinkSQL

    本文已收录github:https://github.com/BigDataScholar/TheKingOfBigData,里面有大数据高频考点,Java一线大厂面试题资源,上百本免费电子书籍,作者 ...

  7. 论文超详细精读|五千字:STGR

    文章目录 前言 总览 一.Introduction 背景 主要贡献 二.Related Works Skeleton-based Action Recognition.(骨架动作识别) Recurre ...

  8. arraylist转int数组_五千字的数组拓展,面试官对我竖起大拇指喊停

    目录 为什么数组下标从0开始? 数组定义 为什么这么下定义? 定义数组的三种方式 从 ArrayList 源码看数组增删改查 初始化 增加 删除 修改 查找 数组和容器 数组时间复杂度 数组插入,删除 ...

  9. 从事测试的第6年 , 开工第二天五千字总结..我不平凡的2021

    大家好,今天开工第二天!我打算给自己做个总结. 我:一个混过大厂,待过创业公司,爱给开发提Bug的测试一枚.2021年,是工作的第六年,也是具有突破性成长的一年,一直挺喜欢 6 这个数字,果然不负期望 ...

最新文章

  1. 为什么不应该使用“volatile”类型
  2. 大自然创作的分形艺术
  3. 常用的 cocos2d-x 游戏开发工具
  4. jQuery的后代遍历
  5. 自动监控主从MySQL同步的SHELL脚本
  6. seaborn画图设置横纵坐标标签
  7. Redis总结集群方式之主从复制
  8. jq执行2次同样的方法怎么让第一次执行的不触发_你不知道的CMS GC
  9. s905各种型号的区别_2020榨汁机推荐,榨汁机、原汁机和破壁机有什么区别?高性价比榨汁机、原汁机怎么选?...
  10. 他们为啥说我没有数据分析思维?
  11. 数据库系统概论-绪论
  12. linux的netperf测试,linux下Netperf使用详解
  13. c语言编写cad建筑画图程序,CAD建筑平面图绘图步骤试题.doc
  14. Si5341时钟芯片使用说明
  15. 实验五|Python 企业获利能力分析
  16. 《前端》阿里字体库iconfont使用方法
  17. 使用Python进行数据关联分析
  18. 下载微信视频号里的视频一种方法
  19. 千古兴亡多少事,一江春水向东流--转任总文章
  20. Linux 运维是做什么的?有钱途吗?发展前景怎么样?

热门文章

  1. 拥有一本CISP证书,我的工资会翻倍吗?
  2. swiper.js横向轮播插件
  3. IMAX6ULL正点原子学习笔记(led汇编驱动)
  4. 企业微信自动打卡插件开发
  5. java翻译程序_有没有java代码翻译软件?
  6. Xshell和Xftp官方家庭免费版
  7. SEO优化:什么是SEO链轮?站群与博客群的优劣比较!
  8. linux内存过高怎样清理,如何处理Linux服务器内存过高?
  9. 十分钟看懂数据库——数据库入门级语言总结
  10. Python学习笔记(一)