接口测试基础知识

气象大数据交易平台
微信开放平台

接口简介

接口概念

  • API(Application Program Interface) 接口属于操作系统或程序接口
  • GUI(Graphic User Interface)接口属于一种图形操作系统
  • 两者都属于直接用户接口。有时公司会将API作为其公共开发系统
  • 也就是说,公司制定自己的系统接口标准,当需要执行系统整合、自定义和程序应用等操作时,公司所有成员都可以通过该接口标准调用源代码,该接口标准被称之为开放式API

接口测试类型

  • http
  • webservice(soap)
  • webSocket
  • dubbo
    如何判断那种属于webservice接口
    询问开发
    通过地址查看可知(以wsdl结尾的地址就是webservice接口类型)
    通过浏览器展示的信息可知(浏览器展示信息类似xml文件例如:webservice接口地址

webservice接口地址:http://www.webxml.com.cn/webservices/weatherwebservice.asmx?wsdl

接口测试:

接口测试是对系统或组件之间的接口进行测试,主要应用于检测外部系统与系统之间以及内部各子系统之间的交互点
主要是校验数据的交换、传递、和控制管理过程,以及相互逻辑以来关系。其中接口协议分为HTTP,WebServeice,Dubbo,Thrift,Socket等类型

接口测试意义

传统的测试方法测试成本急剧增加,测试效率大幅下降
接口测试是站在用户的角度对系统进行全面高效持续的检测
接口测试是自动化并且持续集成的
接口测试是一个完整的体系,也包括功能测试,性能测试。

接口文档应该包含的内容

  • 接口说明——功能
  • 调用URL
  • 请求方法(get/post)
  • 请求参数、参数类型、请求参数说明
  • 返回参数说明

公共API接口文档实例

接口文档示例

在这里插入图片描述
在这里插入图片描述

B/S架构(原理)

  • 编写程序部署的web服务器
  • web服务器运行在服务器上,便规定IP地址并监听某端口,接收和处理HTTP请求
  • 可客户端通过http协议获取服务器上的网页、文档等资源,接口也可以看作一种特殊的资源;

在这里插入图片描述

URL解析

http://test.lemonban.com/ningmengban/app/login/login.html
例如:
https://news.ifeng.com/c/7ueksxeGkoC
https:// 协议
news.ifeng.com 域名–>主机(可以在windows控制台ping 域名查看IP)
c/7ueksxeGkoC 代表资源在主机上的路径
Tomcat服务器——

HTTP简介

Http协议报文格式
在这里插入图片描述
在这里插入图片描述

  • HTTP: Hyper Text Transfer Protocol超文本传输协议
  • 是万维网(www:world wide web)服务器传输超文本(资源)到本地浏览器的传输协议
  • HTTP协议是基于TCP/IP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务器端的数据传输格式,最初是来向客户端传输HTML页面的内容,默认端口是80
  • HTTP是基于请求与响应模式的、无状态的、应用层协议

网络应用层协议除了HTTP外,还有FTP(文本传输协议),SMTP(邮件传输协议)、DNS(域名协议)、RIP(路由协议)、Telnet(远程登陆协议)等

HTTP协议工作原理

  • HTTP协议工作于客户端——服务端架构上(C/S、B/S)
  • 浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求
  • web服务器由:Apache服务器,IIS服务器(Internet Infromation Services)等
  • web服务器根据接收到的请求,向客户端发送响应信息
  • HTTP默认端口号为80,但是你也可以改为8080或其他端口

HTTP特点

**无连接:**无连接的含义是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接
媒体独立:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端及服务器指定使用适合的MIME类型来传输。详见MIME参考手册
无状态: HTTP协议是无状态协议。无状态是指协议对于事物处理没有记忆能力。如果服务器不需要先前信息,南无他的应答就比较快。但是缺少状态意味着如果后续处理需要前面的信息,则他必须重传,这样可以能导致每次链接传递的数据量增大,此时可以设置缓存。

HTTP与TCP/IP区别

TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。(web使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将他发送到网络上)
Http是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)

Request

HTTP的请求报文结构

Request,即请求,由客户端向服务端发出
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(Request line),请求头(header),空行和请求数据(请求正文)四部分组成,下图给出请求报文的一般格式。回车和换行的区别:
在这里插入图片描述
请求行由三部分组成

  • 请求方法
  • 统一资源定位符
  • HTTP协议即版本号——即将出2.0版本
  • 三部分之间由空格隔开,并在结尾加回车和换行符

Request Method

常见的请求方式有两种类型,GET和POST
GET——请求资源
用于信息获取,而且应该是安全的和幂等的(幂等的意思就是一个操作不会修改状态信息,并且每次操作的时候都返回同样的结果)从发送请求的角度,GET请求相当于在数据库中查询的操作。这样的操作不影响数据本身的数据。(Query String Parameters选项就是请求的参数,发起一次GET请求时,参数会以url string的形式传递。即?后面的字符串则为请求参数,并以&作为分割符)
POST——提交资源
表示可能会修改服务器上资源的请求,也相当于数据库中做了修改的操作。会影响数据库本身的数据(比如:注册账号,发帖子,做评论,得到积分等。)文件上传时,由于文件内容比较大,也会选用POST方式
除了常规的GET,POST请求外,还有一些请求方式,如下:

方法描述
GET请求指定的页面信息,并返回实体主体
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求中。POST请求可能会导致新的资源的建立和/或已有资源的修改
PUT从客户端向服务器传送的数据取代指定的文档内容(相当于更新数据,更新数据时所有参数必须传递)
PATCH对PUT方法的补充,用来对已知资源进行局部更新(传递部分参数既可以,相当于对部分参数的更新)
DELETE请求服务器删除指定的页面
HEAD类似GET请求,只不过返回的响应中没有具体的内容,用于获取报头
CONNECTHTTP/1.1协议中预留给能够连接改为管道方式的代理服务器
OPTIONS允许客户端查看服务器性能
TRACE回显服务器接收到的请求,主要用于测试或诊断

接口测试中前5个方式应用较多,后面四个四个相对较少

github使用的restful架构,会使用到put和 delete(后续研究

Request URL(Uniform Resource Locator统一资源定位符)

用于描述网上的资源
格式: schema://host[:potr]/path/…/[?query-string]

  • scheme: 协议,如http,https,ftp等
  • host: 域名或者IP地址
  • port: 端口
  • path: 资源路径
  • query=string: 发送参数
  • 例如:https://www.baidu.com/s?wd=“fiddler”

Request Headers

请求头,用来说明服务器要使用的附加信息,常用的头信息如下:
Accept: 用于指定客户端可接受那些类型的信息
Accept-Language 指定客户端可接受的语言类型
Accept-Encoding 指定客户端可接受的内容编码
Host 用于指定请求资源的主机ip和端口号,其内容为请求URL的原始服务器或网关的位置。
Cookie 也常用复数形式Cookies,是网址为了便于用户进行Session跟踪而储存在用户本地的数据。Cookies的主要功能就是维持当前访问会话框。
Referer 此内容用来识别这个请求是从哪个页面(连接)发起的,服务器可以拿到这一信息并做相应的处理,如来源统计,做防盗链处理等。
User-Agent 客户端的一些信息,使得服务器能够识别客户使用的操作系统及版本 浏览器及版本等信息。
Content-Type, 请求提的内容格式/类型。即Internet Media Type, 互联网媒体类型,也叫做MIME类型,在HTTP协议消息头中,使用它来表示具体请求中的媒体类型信息。客户端向服务器端发送的内容格式及编码方式
Cache-Control: 缓存机制,如Cache—Control:no-cache
Connection: 连接,Keep_alive持续连接
Origin: 起源地址
Accept-charset: 客户端接受的字符集,如gb2312,iso-8859-1
Authorization: 客户端提供给服务端,进行权限认证的信息
Content—Length: 数据长度
Pragma: 防止页面被缓存,和Cache—Control:no-cache作用一样

Request Body

即请求体,一般用于POST请求中,主要定义向服务器提交的数据类型,而对于GET请求Request Body则为空。注意:只有Request Headers设定Content-type为application/x-www-form-urlencoded才会以Form Data形式提交(而登录信息(账号和密码)是以Form Data的形式提交给服务器)常用的Content-Type 和POST提交数据方式的关系:

Content-Type提交数据方式
application/x-www-form-urlencodedForm表单提交
multipart/form-data表单文件上传提交
application/json序列化Json数据提交
text/xmlXML数据提交

application/x-www-form-urlencoded与multipart/form-data区别
在没有type=file时候,用默认的application/x-www-form-urlencoded就行
在有type=file时候,要用multipart/form-data编码方式。浏览器会把表单以空间为单位分割,并且为每一个部分加上Content-Disposition(form-data或file)、Content-Type(默认text/plain)、name(控件 name)等信息,并加上分割符(boundary)

Response

HTTP响应也由四个部分组成,分别是状态行、消息包头、空行和响应正文
在这里插入图片描述
Response, 即响应,由服务器端返回客户端。Response可以划分为三部分:
Response Status Code : 响应状态码
Response Headers :响应头
Response Body 响应体,响应的正文数据都是在响应体中,一般接口的响应内容大多都是Json数据内容

Response Status Code

在这里插入图片描述
HTTP响应码

Response Headers

响应头,其中包含了服务器对请求的应答信息:
Date: 标识Response产生时间——国际标准时间
Last-Modified: 指定在原最后修改时间,客户可以通过If-Modified-Since请求头提供一个日期,该请求将被是为一个条件GET,只有改动时间迟于制定时间的文档才会返回,否则返回一个304(Not Modified)状态。
Content-Encoding 指定Response内容的编码——只有解码之后才可以得到Content-Type头制定的内容类型
**Server:**包含了服务器的信息,名称,版本号等
Content-Type 文档类型,指定了返回的数据类型是什么,如text/html则代表返回HTML文档,application/x-javascript则代表返回JavaScript文件,image/jpeg则代表返回图片。
Set-Cookie设置Cookie,Response Header中的Set-Cookie即高所浏览器需要将此内容放在Cookies中,下次请求携带Cookies内容。
Expires: 指定Response的过期时间,使用它可以控制代理服务器或浏览器将内容更新到缓存中,如果再次访问是,直接从缓存中加载,降低服务器负载,缩短加载时间。
Allow: 服务器支持哪些请求方法;
**Content-Length:**表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据
www-Authenticate: 客户应该在Authorization头中提供什么类型的r授权信息。在包括401(Unauthorized)状态行的应答中这个头时必须的。注意Server一般不进行这方面的处理,而是让web服务器的专门机制来控制受密码保护页面的访问
Location:表示客户到哪里取提取文档。Location通常不是直接设置的,二十通过HttpServlet的SendRedirect方法,该方法同时设置状态代码为302;
Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。注意:Refresh意义是“N”秒之后刷新本页面或访问制定页面。而不是每个N 秒刷新本页面或访问制定页面

接口测试常用工具:

  1. 浏览器:谷歌、火狐
  2. Postman:仅支持HTTP协议,实现部分断言功能,实现参数化,循环执行,可以支持导出代码:
  3. Jmeter:基于Java开发,最初用于web性能测试,支持多通讯协议(数据库接口测试)
  4. Fiddler: fiddler是一个http协议调试代理工具;它能够记录并检查所有你的电脑和互联网之间的http通讯;设置断点;查看所有的进出Fiddler的数据(指,cookie,html,js,css等文件);Fiddler要比其它的网络调试器更加简单,还提供了一个用户友好格式

接口测试流程

需求分析——用例设计——脚本开发——测试执行——结果分析

JSON

语法规则

  • 数据在键/值对中
  • 数据由逗号分隔
  • {花括号}保存对象
  • [方括号]保存数组

JSON键/值对

JSON数据书写格式是:key:Value 键值对。 JSON值可以是:

  • 数字(正说或浮点数)
  • 字符串(在双引号中)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

JSON数据解析

JSON库官方文档

python3中可以使用json模块来对JSON数据进行编解码,它包含了两个方法:

参考文献

json.dumps()

将python数据转化为Json数据

import json

####################################################
#将python的字典型数据转换为json类型数据,注意要使用的json.dumps(),而不是json.dump()
####################################################
data={'id':1,'name':'51zxw','password':'6666'}
print(type(data))

json_str=json.dumps(data)   #注意要使用的json.dumps(),而不是json.dump()
# j=json.dumps(data)
print(type(json_str))

print(data)
print(json_str)

json.loads():

将json数据类型转为Python数据类型

import json

#########################################################
#将json类型的数据转换为python的字典类型数据,注意要使用的json.loads(),而不是json.load()
#########################################################
json_str='{"id":1,"name":"51zxw","password":"6666"}'  #定义json型字符串必须由单引号。
print(type(json_str))

data=json.loads(json_str)    #注意要使用的json.loads(),而不是json.load()
print(type(data))
print(data['id'])
print(data['name'])

#####################################################
#向json文件写入数据,注意使用的的json.load(),而不是json.loads()
#####################################################

with open('data.json','w')  as f:  #以写的形式打开json类型的文件data.jos
    json.dump(data,f) #向文件f即data.json文件写入data数据


#####################################################
#读取json文件数据,注意使用的的json.load(),而不是json.loads()
#####################################################

with open('data.json','r')  as f:  #以只读的形式打开json类型的文件data.jos
    Myinformation=json.load(f) #读取data.json文件的内容赋值给Myinformation
    print(Myinformation)

参考文献

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值