首页 > 其他 > 详细

接口测试01

时间:2020-03-28 20:51:38      阅读:42      评论:0      收藏:0      [点我收藏+]

本篇博客

1 RESTful
2 HTTP协议
3  如何开展接口测试
4  正式开展测试

 

什么是接口测试?

         接口测试是测试系统组件间接口的一种测试,接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点,测试的重点是要检查数据的交换、传递、和控制管理过程,以及系统间的相互逻辑依赖关系等

        

接口分类:系统内部接口和系统外部接口

         系统内部接口:模块间的相互调用

         系统外部接口又包括软件接口和硬件接口

         软件接口包括服务器接口和外部接口

         服务器接口:是浏览器与服务器的接口,通过http协议来实现浏览器和服务器间的数据传递

         外部接口:外部接口常见的典型例子就是通过第三方登录、第三方支付等,通过调用第三方接口并返回当前的系统

 技术分享图片

 

目前比较流行的接口测试就是软件接口的测试,那么该接口测试的原理是通过测试程序模拟客户端向服务器发送请求,服务器接收请求后做出相应的处理并将响应信息发送给客户端,客户端接收响应数据的过程

接口测试:本质是基于某种协议,发送一个Request请求给服务器,然后服务器返回一个Response响应数据,然后对响应数据进行分析,判断是否与我们预期的返回一致,从而验证功能是否正确,这就是接口测试。

 

那么客户端是如何向服务器发送请求的呢?

在这里我们先来介绍一下网站架构的设计风格

随着互联网的不断发展,网站设计风格逐渐统一于RESTful架构风格

RESTful架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出。HTTP就是该架构风格的一个典型应用。从其诞生之日开始,它就因其可扩展性和简单性受到越来越多的架构师和开发者们的青睐。一方面,随着云计算和移动计算的兴起,许多企业愿意在互联网上共享自己的数据、功能;另一方面,在企业中,RESTful API(也称RESTful Web服务)也逐渐超越SOAP成为实现SOA的重要手段之一。时至今日,RESTful架构风格已成为企业级服务的标配。

REST即Representational State Transfer的缩写,可译为"表现层状态转化”。REST最大的几个特点为:资源、统一接口、URI和无状态。

 

1 RESTful

RESTful 特点:

  • 资源
  • 统一接口
  • URI:统一资源定位符
  • 无状态

 

资源

所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。资源总要通过某种载体反应其内容,文本可以用txt格式表现,也可以用HTML格式、XML格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现;JSON是现在最常用的资源表示格式。

 

统一接口

RESTful架构风格规定,数据的元操作,即CRUD(create, read, update和delete,即数据的增删查改)操作,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。也就是说处理资源通过http方法GET/POST/PUT/DELETE实现

即:

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
  • DELETE(DELETE):从服务器删除资源。

 

URI

可以用一个URI(统一资源定位符)指向资源,即每个URI都对应一个特定的资源。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或识别符。

 

无状态

所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。

 

综上所述总结如下:

1. 在RESTful中一切都认为是资源,且每个资源都有对应的URI标识

2. 客户端通过GET/POST/PUT/DELETE等http方法对资源进行操作,即客户端通过http协议与服务器进行通信,并获取资源信息

 

2 HTTP协议

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

 

HTTP协议的主要特点可概括如下:

1.支持客户/服务器模式。

2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

 

2.1 URL篇

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

 

格式

http://host[":"port][[abs_path]]

  • http表示要通过HTTP协议来定位网络资源;
  • host表示合法的Internet主机域名或者IP地址;
  • port指定一个端口号,为空则使用缺省端口80;
  • abs_path指定请求资源的URI;

如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

 

1、输入:www.guet.edu.cn

浏览器自动转换成:http://www.guet.edu.cn/

2、http:192.168.0.116:8080/index.jsp

 

2.2 请求篇

请求篇分为:请求行,消息报头,请求正文

 

2.2.1 请求行

请求行格式:

Method Request-URI HTTP-Version CRLF

  • 其中 Method表示请求方法;
  • Request-URI是一个统一资源标识符;
  • HTTP-Version表示请求的HTTP协议版本;
  • CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。 

请求方法 请求地址 协议版本CRLF

 

请求方法(所有方法全为大写)有多种,各个方法的解释如下:

GET     请求获取Request-URI所标识的资源

POST    在Request-URI所标识的资源后附加新的数据

PUT     请求服务器存储一个资源,并用Request-URI作为其标识

DELETE  请求服务器删除Request-URI所标识的资源

HEAD    请求获取由Request-URI所标识的资源的响应消息报头

TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT 保留将来使用

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

 

应用举例:

GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,

eg:GET /form.html HTTP/1.1 (CRLF)

 

POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。

eg:POST /reg.jsp HTTP/ (CRLF)

Accept:image/gif,image/x-xbit,… (CRLF)

 

HEAD方法与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信息与通过GET请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到

Request-URI所标识的资源的信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。


2.2.2 消息报头

2.2.3 请求正文

2.3 响应篇

在接收和解释请求消息后,服务器返回一个HTTP响应消息。

HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

 

2.3.1状态行

状态行格式:协议版本 状态码 状态原因

 

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息–表示请求已接收,继续处理

2xx:成功–表示请求已被成功接收、理解、接受

3xx:重定向–要完成请求必须进行更进一步的操作

4xx:客户端错误–请求有语法错误或请求无法实现

5xx:服务器端错误–服务器未能实现合法的请求

 

常见状态代码、状态描述、说明:

200 OK      //客户端请求成功

400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden  //服务器收到请求,但是拒绝提供服务

404 Not Found  //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

eg:HTTP/1.1 200 OK (CRLF)

 

2.3.2 消息报头
2.3.3 响应实体

2.4 消息报头

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。

每一个报头域都是由名字+“:”+空格+值组成,消息报头域的名字是大小写无关的。

  • 普通报头
  • 请求报头
  • 响应报头
  • 实体报头
  • 组成:名字+":" +值

1、普通报头

在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。

eg:

Cache-Control   用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。

请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;

响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.

eg:为了指示IE浏览器(客户端)不要缓存页面,服务器端的JSP程序可以编写如下:response.sehHeader(“Cache-Control”,”no-cache”);

//response.setHeader(“Pragma”,”no-cache”);作用相当于上述代码,通常两者//合用

这句代码将在发送的响应消息中设置普通报头域:Cache-Control:no-cache

Date普通报头域表示消息产生的日期和时间

 

Connection普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接

 

2、请求报头

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

常用的请求报头

Accept 请求报头域:用于指定客户端接受哪些类型的信息。

Accept:image/gif,表明客户端希望接受GIF图象格式的资源;

Accept:text/html,表明客户端希望接受html文本。

 

Accept-Charset 请求报头域:用于指定客户端接受的字符集。

Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。

 

Accept-Encoding 请求报头域:类似于Accept,但是它是用于指定可接受的内容编码。

Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。

 

Accept-Language 请求报头域:类似于Accept,但是它是用于指定一种自然语言。

Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。

 

Authorization 请求报头域:主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

 

Host 请求报头域:主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。Host(发送请求时,该报头域是必需的)

我们在浏览器中输入:http://www.guet.edu.cn/index.html

浏览器发送的请求消息中,就会包含Host请求报头域,如下:

Host:www.guet.edu.cn

此处使用缺省端口号80,若指定了端口号,则变成:Host:www.guet.edu.cn:指定端口号

 

User-Agent

我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息了。

 

3、响应报头

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

常用的响应报头

Location 响应报头域:用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。

 

Server 响应报头域:包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。下面是

Server:Apache-Coyote/1.1

 

WWW-Authenticate 响应报头域:必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。

WWW-Authenticate:Basic realm=”Basic Auth Test!”  //可以看出服务器对请求资源采用的是基本验证机制。

 

4、实体报头

请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。

常用的实体报头

Content-Encoding 实体报头域:被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding这样用于记录文档的压缩方法

Content-Encoding:gzip

 

Content-Language 实体报头域:描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读

Content-Language:da

 

Content-Length 实体报头域:用于指明实体正文的长度,以字节方式存储的十进制数字来表示。

 

Content-Type 实体报头域:用语指明发送给接收者的实体正文的媒体类型。

Content-Type:text/html;charset=ISO-8859-1

Content-Type:text/html;charset=GB2312

 

Last-Modified 实体报头域:用于指示资源的最后修改日期和时间。

 

Expires实体报头域:给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间。

Expires:Thu,15 Sep 2006 16:23:12 GMT

 

HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。eg:为了让浏览器不要缓存页面,我们也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader(“Expires”,”0″);

2.5 请求正文

请求正文:

get:没有请求正文信息

post:请求正文与请求报头中间由空行隔开


2.6 响应实体

响应实体:

与消息报头之间由空行隔开

 

3 如何开展接口测试

1.跟开发要接口文档
2.构造测试数据,编写测试用例

4 正式开展测试

4.1 需要安装第三方库requests
命令:打开cmd窗口--->输入pip install requests

 

4.2 get请求接口
1.导包
2.构造接口地址
3.构造请求参数
4.发送get请求
5.获取响应数据


4.3 post请求接口
1.导包
2.构造接口地址
3.构造请求参数
4.发送post请求
5.获取响应数据

 

4.4 参数关联接口

1.导包
2.构造接口地址
3.构造请求参数
4.发送接口请求
s = requests.session()
s.请求方法(url,参数数据)
5.使用正则匹配接口响应数据的内容
6.构造接口请求参数
7.发送接口请求
s.请求方法(url,参数数据)
8.打印结果


4.5 数据和代码分离

把数据放在excel里,使用第三方库:xlrd ,进行读取。

第一种方法安装xlrd:

pip install xlrd

第二种方法安装xlrd:

easy_install xlrd

 










 

接口测试01

原文:https://www.cnblogs.com/zhangyangcheng/p/12589096.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!