接口测试

落爺英雄遲暮 提交于 2020-04-01 01:18:46

接口测试就是功能测试,咱们测的都是程序对外的接口,接口其实就是各种操作数据库。

 

前端、后端 = 客户端、服务端

前端是用html和css,js等开发的

后端是用java、python、php等开发的

前后端所用语言不同,前后端通过接口交互,接口返回的数据都是json

前后端两者通用的数据类型:json(所有语言都可以解析)

 

测试接口,必须要有接口文档, (前四个是必备)

1.url

2.请求方式:post、get

3.入参(请求参数)

4.返回参数

5.请求、返回示例(非必须)

6.状态码说明(非必须)

如果是get请求,直接用浏览器就能发,不需要借助工具。

 

例如:

获取学生信息

简要描述:获取学生信息接口

请求URL:http://api.nnzhp.cn/api/user/stu_info

请求方式:get

参数:

参数名

必选

类型

说明

stu_name

string

学生姓名

返回示例

  1. {
  2. "error_code": 0,
  3. "stu_info": {
  4. "id": 1,
  5. "name": "小黑",
  6. "sex": "男",
  7. "age": 18 ,
  8. "addr": "北京市昌平区回龙观",
  9. "phone": "18612532945",

10. "grade":"巨蟹座",

11. "gold":100

12. }

13. }

 

在浏览器调用接口:在浏览器输入(如果有多个参数,多个参数用&来连接):

  • http://api.nnzhp.cn/api/user/stu_info?stu_name=小黑

这种是最简单的一种,问号前面是请求url,后面是请求的参数名和参数值,多个参数用&来连接

 

接口测试可以发现一些在界面操作发现不了的bug。越早发现bug,解决bug的成本越低。

 

还有一种就是入参是json串的,那就不能拼接参数了,需要借助工具来完成比如postman,这样的入参比较多。

 

理论上GET请求和POST请求的区别:

1、GET使用URL或Cookie传参。而POST将数据放在BODY中。

2、GET的URL会有长度上的限制(以前的浏览器有限制,现在的浏览器没有该限制了),则POST的数据则可以非常大。

3、POST比GET安全,因为数据在地址栏上不可见。

4、一般get请求用来获取数据,post请求用来发送数据。

其实上面这几点,只有最后一点说的是比较靠谱的,第一点post请求也可以把数据放到url里面,get请求其实也没长度限制,post请求看起来参数是隐式的,稍微安全那么一些些,但是那只是对于小白用户来说的,就算post请求,你通过抓包也是可以抓到参数的。所以上面这些面试的时候你说出来就行了。

 

实际上get和post的区别为:

http请求

请求头

请求体

get请求没有请求体 ,只有请求头

get请求的参数只能写在url里面或者cookie里面

post

请求头

请求体

请求参数放在请求体里面

 

 

HTTP请求状态码:

每发出一个http请求之后,都会有一个响应,http本身会有一个状态码,来标示这个请求是否成功,常见的状态码有以下几种:

1、200 2开头的都表示这个请求发送成功,最常见的就是200,就代表这个请求是ok的,服务器也返回了。

2、300 3开头的代表重定向,最常见的是302,把这个请求重定向到别的地方了,

3、400 400代表客户端发送的请求有语法错误,401代表访问的页面没有授权,403表示没有权限访问这个页面,404代表没有这个页面

4、500 5开头的代表服务器有异常,500代表服务器内部异常,504代表服务器端超时,没返回结果

 

参数组合:现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功

组合就是指一个参数有两种意义。

 

Postman操作实例:

实例1:添加学生信息

添加学生信息

简要描述:添加学生信息,这个接口是用来讲入参是json类型的

请求URL:http://api.nnzhp.cn/api/user/add_stu

请求方式:post

入参是json类型

参数:

参数名

必选

类型

说明

name

string

学生姓名

grade

string

班级

phone

int

电话

sex

string

性别,如果不传默认为男

age

int

年龄,如果不传默认为18

addr

string

地址,如果不传默认为北京市昌平区

请求示例

  1. {
  2. "name":"小黑",
  3. "grade":"天蝎座",
  4. "phone":18612532946,
  5. "sex":"男",
  6. "age":28,
  7. "addr":"河南省济源市北海大道32号"
  8. }

返回示例

  1. {
  2. "error_code": 0,
  3. "msg":"添加成功!"
  4. }

返回参数说明

参数名

类型

说明

error_code

int

错误编码,0为操作成功

msg

string

提示信息

 Postman:

 

 

 实例2:文件上传

上传文件接口

简要描述:上传文件接口

请求URL:http://api.nnzhp.cn/api/file/file_upload

请求方式:post

参数:

参数名

必选

类型

说明

file

file

文件

返回示例

  1. {
  2. "error_code": 0,
  3. "msg":"上传文件成功!"
  4. }

返回参数说明

参数名

类型

说明

error_code

int

错误编码,0为操作成功

msg

string

提示信息

 

 Postman:

 

 

 

实例3:学生金币充值

学生金币充值

简要描述:学生金币充值接口,这个接口是为了讲添加cookie以及身份验证的

请求URL:http://api.nnzhp.cn/api/user/gold_add

请求方式:

  • post

参数:

该接口有权限验证,需要admin用户才可以做操作,需要添加cookie

cookie中key为登录的用户名,value从登录接口中获取,登陆成功之后会返回sign

参数名

必选

类型

说明

stu_id

int

学生id

gold

int

金币数量

 

先登录admin用户登录,获取sign,然后再充值金币

 

 

http://www.nnzhp.cn/archives/426  cookie和session的比对

登录时,cookie会和session去比对,匹配上才能继续保持登录状态。

cookie

存在你本地的一个键值对。

例如:账户密码为 admin sdfjsdkf34234

session/token

存在服务端的一个键值对。

例如:账户密码为 admin sdfjsdkf34234

签名sign

 

实例4:获取所有学生信息

获取所有学生信息

简要描述:这个接口是为了说明怎么添加header信息的

请求URL:http://api.nnzhp.cn/api/user/all_stu

请求方式:get

需要添加header信息,key为Referer value 为http://api.nnzhp.cn/

参数:

 

 

 

refer:判断请求是从哪个网址跳转过来的

 

Jmeter

使用jmeter进行测试时,如果返回结果为乱码,则修改jmeter.properties文件中的该字段的值默认为ISO-8859-1,改为utf-8

sampleresult.default.encoding=utf-8

 

 

修改后重启jmeter

 

https://www.cnblogs.com/fengpingfan/p/5851518.html

解决Jmeter 3.0 POST Body Data 中文乱码问题

 

解决方案:修改配置文件{JMETER_HOME}\bin\jmeter.properties 中的默认显示字体,改为系统支持的中文字体(可进入系统目录【控制面板\所有控制面板项\字体】查看)即可。

# 默认字体设置的配置项如下黑体标示所示

#JSyntaxTextArea configuration

#jsyntaxtextarea.wrapstyleword=true

#jsyntaxtextarea.linewrap=true

#jsyntaxtextarea.codefolding=true

# Set 0 to disable undo feature in JSyntaxTextArea

#jsyntaxtextarea.maxundos=50

# Change the font on the (JSyntax) Text Areas. (Useful for HiDPI screens)

#jsyntaxtextarea.font.family=Hack

#jsyntaxtextarea.font.size=14

 可直接取消注释,或将配置项改为如下所示,重启JMeter 即可

jsyntaxtextarea.font.family=宋体

 

上传文件,不写绝对路径的话,可以把上传的文件复制到bin目录下,jmeter默认读取bin目录下的文件。

 

 

 

学生金币充值:需要添加cookie

  

 

 

 

获取所有学生信息:需要添加header

 

 

 url编码:

百度输入besttest自动化测试,出现的url为:

https://www.baidu.com/s?wd=besttest%20%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95&rsv_spt=1&rsv_iqid=0x991feb770000a222&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&inputT=6885&rsv_t=b90fZeXhb1BvOVNxOz0pOFzBUAsbsdvhB%2FgWHCMedJyDMoLrFAmuq2nNwpWe2OnPnoLa&rsv_sug3=34&rsv_sug1=11&rsv_sug7=100&oq=besttest&rsv_pq=eb15be680000b773&rsv_sug2=0&rsv_sug4=7040 

其中 %20%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95这部分为输入内容“自动化测试”经过url编码后的内容

  

 

接口签名:sign

为了防止别人恶意刷请求。

它是一个加密之后的字符串。

http://api.nnzhp.cn/reg?username=xxx&passwd=xxx&

sign=8eea855efc702130d9c9cafcd9f4d91a

例如加密逻辑可以是username+current time stamp+x

 

 Jmeter参数化

1.文件参数化 CSV Date Config

 

2.用户定义的变量

 

 

3.函数助手

1._random

2._time

yyyyMMddHHmmss 格式 年月日时分秒

 

 

 Jmeter的关联

使用插件:Json Path Extrator

http://www.nnzhp.cn/archives/322

格式:$.login_info.sign

 

 

Jmeter连接数据库:

测试计划添加jar包:

 

 

下面为测试那点事儿公众号中的解说,写的很详细:

 

 

 

Ps 下面介绍比较重要的几个参数其他地方可照截图配置即可。

Variable Name:连接名称,自定义填写。

Validation Query:验证查询,不同版本的填写格式可能不同(比如3.1是Select 1,2.6是Select1),格式错误会报错。最新的Jmeter3.3已经做成下拉框,比较人性化。

Database URL:数据库url,格式固定。

jdbc:mysql://{ip}:{port}/{dbname}?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

jdbc:mysql:// 表明连接的数据库是mysql

ip    数据库服务器地址

port mysql端口号

dbname 数据库名称

useUnicode=true  使用Unicode编码格式(字符集编码格式)

characterEncoding=utf8     使用UTF-8解码(字符集编码格式)

allowMultiQueries=true      允许多个query一起使用(1个请求中添加多个sql语句)


配置完毕,接下来填写JDBC请求

Variable Name:与JDBC Connection Configuration中的Variable Name保持一致

Query Type:语句类型,查询用select,增删改用update,一起用可以选择callable

Query:填写对应的语句(这里用了一个简单的查询语句作为示例)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!