一,【什么是接口测试?为什么要作接口测试】
接口口测试和接口自动化测试一直都是很多人混乱的概念。所以搞清楚2个的概念是很重要的一件事情。接口:一段具备逻辑处理功能的程序代码组成的,可被其他方法、服务或应用所使用。对于调用接口的那一方,可以把接口看做一只黑匣子,只需要负责按约定传入参数,再接收返回的数据,而不需要知道黑匣子里的逻辑。
1.接口的作用
1.系统与系统之间的调用。比如银联会提供支付接口给负责三方支付的应用程序调用,应用程序在用户发起支付请求时,将相关的必要参数值通过支付接口传给银联服务器,银联服务器处理完成之后会调用应用程序方的回调接口,返回支付处理结果。2.前端应用对后端服务的调用。比如应用程序调用服务器端的接口,服务器端调用DAO[data access object 数据访问对象]的接口。以某系统来看,应用程序本身主要包括2部分:一是交互,二是数据展示。应用程序通过数据访问对象的接口从数据库中获取到相应的数据,服务器端接口在将数据做相应的处理并最终返回给应用程序,应用程序将其展示出来。3.服务与服务之间的调用。比如,注册用户,会先调用查询用户信息的服务,目的是检查是否已注册。如果返回已注册,则负责注册用户的接口就会将该结果返回到前段页面。接口测试是测试系统组件间接口的一种测试,主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是检查数据的交互、传递和控制管理过程,以及系统间的相互逻辑依赖关系等。2.为什么要做接口测试
1.只靠前端测试很难确保很高的覆盖率。接口测试,可以模拟出各种类型的入参,包括一些在前端模拟不出来的入参,还能根据接口文档的定义,设计出相对完善的入参值,在接口层保证质量,剩余的绝大多数问题就是应用程序自身的交互和数据展示问题。2.接口测试相对于交互界面测试和功能测试来说,更容易实现自动化,执行起来比较稳定,维护成本也比较低。3.接口自动化适用于回归测试等,可以减少人工回归测试的人力成本。4.前、后端系统分离,从安全层面来说,只依赖前端进行不能满足安全要求,绕过前端相对容易,所以需要后端同样进行输入校验,只能依赖接口测试去验证了。3.接口都有哪些类型?
接口一般分为两种:1.程序内部的接口 2.系统对外的接口
系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。
程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。
二,【接口测试的分类】
接口的分类:
1.webservice接口
2.http api接口
webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用测试。
webService走如soup、rmi、rpc协议
http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。
json是一种通用的数据类型,所有的语言都认识它。(json的本质是字符串,他与其他语言无关,只是可以经过稍稍加工可以转换成其他语言的数据类型,比如可以转换成Python中的字典,key-value的形式,可以转换成JavaScript中的原生对象,可以转换成java中的类对象等。)
http和webservice接口区别:
httpservice通过post和get得到你想要的东西webservice就是使用soap协议得到你想要的东西,相比httpservice能处理些更加复杂的数据类型
http协议传输的都是字符串了,webservice则是包装成了更复杂的对象。
三,【理解http,webservice,Dubbo接口协议】
一、接口
API: Application Programming Interface, 应用程序可编程接口
1)接口分类
硬件接口:具有连接功能、适配。两个硬件设备之间的连接方式(比如鼠标和电脑通过USB接口连接)
软件接口:软件程序之间数据交互的通道(用户界面是软件接口)
2)软件接口分类
程序内部接口:是客户端与服务器的接口,用来实现客户端和服务器的数据传递
外部接口:比如通过第三方登录,第三方支付,通过调用外部接口并返回当前的系统
3)常见的接口协议
webService接口:使用soup协议通过http传输,请求报文和返回报文都是xml格式的,常用测试工具有soupUI
http协议接口:目前使用最广泛的,使用HTTP协议来传输数据,常见的请求方法有get、post等,常用测试工具有postman、jmeter
dubbo、 websocket、 ws://...、 ftp://等协议。
4)接口测试
本质是基于某种协议,发送一个请求给服务器,然后服务器返回一个响应,然后对响应数据进行分析,判断是否与我们预期的返回一致,从而验证功能是否正确。
二、HTTP协议解读
1)http协议:超文本传输协议
2)https:简单的来说,就是http的安全版,在http下加入了SSL层(SSL主要用户web的安全传输协议)
3)http的默认端口号是:80 ,默认的端口在url可以不加
https的默认端口号是:443 ,默认的端口在url可以不加
4)HTTP请求过程
客户端:PC端的应用程序 浏览器 APP 小程序
HTTP通信:客户端发送给服务器的请求信息
服务器返回给客户端的响应信息客户端:前端----->主动请求。能够发起对应的请求的客户端。
服务端:后端----->被动接受。
扩展URL:
5)HTTP请求信息
请求行: 请求方法/请求网址/协议版本 请求头部:header host connection upgrade-insecure-requests user-agent:用户代理,通过客户端代理 referer accept-encoding cookie 备注:域名和IP地址之间是映射关系,域名是为了好记 请求数据:6)HTTP响应信息
状态行:状态码 消息报头: content-type:返回的数据格式test/html application/json application/xml 响应正文:7)HTTP响应状态码
状态码含义 客户端client 服务器端server1xx| Informational 信息 啥都不用做,知道就好 信息收到了,后续会处理2xx| Successful 成功 啥都不用做,知道就好 请求已正确处理3xx| Redirection 重定向 重新请求返回的新地址 client需要的内容,由于一些原因,比如地址已发生变化了,然后返回该内容的新地址4xx| 客户端的错误 确保用正确的参数和信息正确,重新请求 请求已正确处理5xx| 服务器端的错误 都无需操作,服务器端改了bug后,重新发送请求 服务器端的代码的bug导致了出错8)HTTP请求方法
get和post的区别:
a)应用场景不同
get获取资源
post提交数据,创建新的数据/对已有数据的修改
b)参数存放
get请求的参数都可以显示在浏览器网址上,通过?param=value【即query string方式】查询字符串
post可以使用query string,但是通常不这么做,通常放到body请求体当中
c)安全性
get和post并没有谁更安全,抓包都是可以看到里面的数据,网上说的post更安全是因为数据放到了body当中,肉眼看不到而已, 但其实也是不安全的,而get请求是直接在URL中肉眼可以看到
备注:加密与请求方法没关系,什么东西都是可以加密的
【WebService协议】
http 和 webservice 都是基于TCP/IP协议的应用层协议
webservice是基于http的soap协议传输数据 webservice=soap=http+xml,webservice协议就是有http+xml组成的,其中xml中会用到wsdl,wsdl是描述语言xml中的一种格式。
socket是基于TCP/IP的传输协议,是对TCP/IP协议的封装
socket和TCP都是基于TCP/IP传输层协议
注:Restful是一种接口规范,而不是接口协议,restful接口规范中也会用到http协议。
因现在大部分会用http协议不用webservice协议,故没有实际操作,只是转载来了解理论。
一. WSDL WebService的创建:1.创建【Web Service Project】:
image.png
WebServices Framework要选JAX-WS:
image.png
2.写一个简单的测试用例:
package com.webservice;
public class WebService{
publicStringprintData(StringprinterName){StringstrRet ="Welcome to use WebService, "+ printerName; System.out.println("Print from WebService:"+ strRet);returnstrRet; }}
3.发布Web Service:点击工具栏的New Web Service:
image.png
Strategy选择第二个(Create web service from Java class):
image.png
勾选【Generate WSDL in project】:
image.png
点击【Finish】后,系统会在WEB-INF/wsdl下生成两个文件:
image.png WebServiceService.wsdl:这个文件是用来描述Web Service内容的<definitionsxmlns="http://schemas.xmlsoap.org/wsdl/"xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:tns="http://webservice.com/"xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"xmlns:xsd="http://www.w3.org/2001/XMLSchema"name="WebServiceService"targetNamespace="http://webservice.com/"><types><xsd:schema><xsd:importnamespace="http://webservice.com/"schemaLocation="WebServiceService_schema1.xsd"/>