接口测试常见问题
接口其实就是web、APP、小程序等前端与后端做交互用的,所以好多人都会问,
我功能测试都测好了,为什么还要测接口呢?OK,在回答这个问题之前,先举个例子:
比如测试用户注册功能,规定用户名为6~18个字符,包含字母(区分大小写)、数字、下划线。
首先功能测试时肯定会对用户名规则进行测试时,比如输入20个字符、输入特殊字符等,
但这些可能只是在前端做了校验,后端可能没做校验,如果有人通过抓包绕过前端校验直接
发送到后端怎么办呢?试想一下,如果用户名和密码未在后端做校验,而有人又绕过前端校验的
话,那用户名和密码不就可以随便输了吗?如果是登录可能会通过“SQL注入”等手段来随意登录,
甚至可以获取管理员权限,那这样不是很恐怖?
所以,接口测试的必要性就体现出来了:
1、可以发现很多在页面上操作发现不了的bug
2、检查系统的异常处理能力
3、检查系统的安全性、稳定性
4、前端随便变,接口测好了,后端不用变,所以接口测试的性价比很高。
1、WebService接口:Soap协议通过http传输,请求报文和返回报文都是xml格式的,
我们在测试的时候都用通过工具才能进行接口调用,测试的。
可以使用的工具有SoapUI、Jmeter、LoadRunner等;
2、HTTP API(Application Interface)接口:使用http协议,通过URL路径来定位资源,
主要是通过GET、POST请求方法,这也是最常用的两种请求方式,
请求报文都是key-value形式的,返回报文一般都是JSON文本,
可以使用的工具有Postman、RESTClient、Jmeter、LoadRunner等;
前端:跟用户打交道。
后台:跟服务器打交道,主要处理数据。
对于web端来说,我们使用的网页,打开的网站,这都是前端,这些都是html、css写的;
对于app端来说呢,它就是我们用的App、小程序,Android或者Swift/Object-C
(开发iOS上的app)开发的,
前端的作用就是展示页面,让我们看到漂亮的页面,以及做一些简单的校验,比如说非空校验,
用户在页面上操作的时候,这些业务逻辑、功能,比如说购物,发微博这些功能是由后端来实现
的,后端去控制你购物的时候扣你的余额,发微博发到哪个账号下面,那前端和后端是怎么交互
的呢,就是通过接口。
前面说的你可能不好理解,你只需记住:前端负责貌美如花,后端负责挣钱养家。
HTTP协议是一种超文本传输协议,处在OSI七层协议的应用层。是一种最常用的无状态协议。
主要涉及两种动作Get、Post
URL(网址)的地址格式是什么?协议名称、域名/ip、端口号、资源路径、多个参数,用&符合连接
- 列举HTTP协议的请求报文格式(请说出几个请求报文的字段)
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/
webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: BAIDUID=2104300EC605A9E08EA32612A01F262F:FG=1;
BIDUPSID=2104300EC605A9E08EA32612A01F262F; PSTM=1509085581;
FP_UID=fa3fdfd3b09abd048258f11bda75d52b; BD_UPN=12314353; ispeed_lsm=20
自己用Fiddler抓包看一下
- 请列举一些HTTP code(状态码),分别代表什么意义?
1XX:服务器已接受,正在处理
2XX:服务器返回正常
3XX:重定向,把这个请求重定向到其他地址
4XX:客户端错误
5XX:服务器错误
1、接口说明/目的
2、接口地址,调用url
3、请求方法(get\post)
4、请求参数、参数类型、请求参数说明
5、返回参数说明
6、接口调用的例子,方便你比葫芦画瓢。
7、错误代码
- HTTP的header和请求参数(入参)有什么区别
它们都是发送到服务器里的参数,但它们是有区别的,header里存放的参数一般存放的是一些
校验信息,比如cookie,
它是为了校验这个请求是否有权限请求服务器,如果有,它才能请求服务器,
然后把请求地址连同入参一起发送到服务器,然后服务器会根据地址和入参来返回出参。
也就是说,服务器是先接受header信息进行判断该请求是否有权限请求,判断有权限后,
才会接受请求地址和入参的。
HTTPS(默认443端口) = HTTP(80端口) + SSL
对外的接口,一般都会支持这两种:Json和Xml格式。
JSON更加轻量,目前越来越流行,基本上HTTP的Restful接口都默认使用Json。
XML用的比较久,WebService接口比较偏向于用这个。
Chrome的插件
Postman
Jmeter
SoupUI
- 你们为什么选用Postman(或Jmeter)来做接口测试?
从以下几点考虑:
1. 用自己熟悉的工具
2. 已经有项目用过的工具
3. 公司里有人对某个工具比较熟悉,出了问题容易解决。
- Postman工具做接口测试,主要用于做接口的功能测试。
接口测试的一般流程。确定接口文档:地址、输入参数、输出参数、错误参照码、接口用途、示例。
在没有接口文档的时候怎么做接口测试?
首先你要知道为什么必须需要接口文档。
如果没有的话,就需要协助开发人员把文档整理出来。
对接口进行优先级处理,并且使用适当的工具进行测试。