接口测试就是功能测试,咱们测的都是程序对外的接口,接口其实就是各种操作数据库。
前端、后端 = 客户端、服务端
前端是用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 |
学生姓名 |
返回示例
- {
- "error_code": 0,
- "stu_info": {
- "id": 1,
- "name": "小黑",
- "sex": "男",
- "age": 18 ,
- "addr": "北京市昌平区回龙观",
- "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 |
地址,如果不传默认为北京市昌平区 |
请求示例
- {
- "name":"小黑",
- "grade":"天蝎座",
- "phone":18612532946,
- "sex":"男",
- "age":28,
- "addr":"河南省济源市北海大道32号"
- }
返回示例
- {
- "error_code": 0,
- "msg":"添加成功!"
- }
返回参数说明
参数名 |
类型 |
说明 |
error_code |
int |
错误编码,0为操作成功 |
msg |
string |
提示信息 |
Postman:
实例2:文件上传
上传文件接口
简要描述:上传文件接口
请求URL:http://api.nnzhp.cn/api/file/file_upload
请求方式:post
参数:
参数名 |
必选 |
类型 |
说明 |
file |
是 |
file |
文件 |
返回示例
- {
- "error_code": 0,
- "msg":"上传文件成功!"
- }
返回参数说明
参数名 |
类型 |
说明 |
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:填写对应的语句(这里用了一个简单的查询语句作为示例)
来源:https://www.cnblogs.com/jessica-test/p/8568955.html