接口测试:接口测试就是功能测试,向服务端发的请求或者获取数据,html
例如:新浪微博,新浪为客户端(client),新浪的服务器为服务端(server)数据库
a:刷微博,即从客户端向服务端获取数据json
b:发微博,即客户端向服务端插入数据浏览器
c:修改微博,即客户端向服务端发送数据,即修改后的内容安全
d:删微博,即服务端向客户端发送删除数据的请求ruby
以上,都是经过接口来链接客户端与服务端的。服务器
首先要取得接口文档,接口文档通常都是由开发提供的,cookie
接口文档中会提供至少三种信息:接口地址(url)、请求参数(get、post)、请求参数,通常还会提供返回参数,以下:session
接口返回的数据类型都是json格式的,那么什么是json呢?并发
json:json是一种通用的数据类型,全部语言都认识它,即任何语言接口返回的都是json格式的,如:Java PHP .net Python ruby C
json格式以下:键值对的存在 key-value
get与post请求方式
直接用浏览器就能够访问,不须要借助外部工具,在浏览器中输入url便可
如何传参数:在url后面加一个问号?+参数名+值,其中若是要传多个参数的话,中间用&链接
例如:hfhfhh/stu_info?参数1=值1&参数2=值2,以下图所示:
post请求不能够经过浏览器直接访问,须要借助工具来进行接口的访问,如postman、jmeter
post经常使用的传参方式:key-value、json格式、上传文件。若是接口文档里不特别说明是什么传参的方式的话,那么就是key-value形式传参。
一、get请求只有请求头,没有请求体,以下图postman中所示:请求的cookie是在headers里面的,而参数是在url里面的,body是置灰的,即没有请求体
post请求既有请求头,也有请求体
get请求以下图:
post请求以下图:
二、get请求没有post请求安全,由于get请求参数是在url里面传的,参数是可见的,而post请求参数是在body里面传的,不可见。可是post请求参数仍是能够用抓包工具抓到,因此也没有那么安全
三、get请求有参数的大小限制,post请求没有参数大小的限制(在之前浏览器版本低的时候,有参数大小的限制,如今浏览器版本很高了,就没有这个限制了)
四、get请求通常用来获取数据,而post通常则用来发送数据
设计思路:
一、正常的:按照接口文档上面来
二、异常的:不按照接口文档上面来
三、根据业务逻辑设计不一样的场景
测试用例里面须要写什么?
项目 模块 url 请求方式 请求参数 预期结果 实际结果 状态
什么是cookie?
cookie是保存在用户浏览器端的一个键值对。
例如:登录一个网站,就会把cookie保存在浏览器端,即保存登陆名与密码,等你关掉网站,再次进去的时候,不须要再次登录,就能够直接访问了,这就是浏览器保存了cookie的结果
什么是session?
session是保存在服务端的键值对。
例如:登录网站以后,浏览器会保存cookie,而服务端会保存session,当再次访问网站的时候,服务端会把session里的键值对和浏览器端的cookie进行对比,若是一致就不须要从新登录了,直接就能够访问,若是不一致则须要从新登录
注意:cookie与session都有失效时间,至于时间的长短是在代码里面设置的。
postman是用来发送http请求接口的测试工具,能够用来发送get与post请求
例:
请求以下图:
一、入参是key-value型的
postman中以下:
二、入参是json型的。
如何判断入参是json型的:接口文档中会标识出来,若是不特地标识,那么默认就是key-value型的,以下图,接口文档中已特地标出是json型的
postman中请求以下:
json类型参数在postman中如何传?
在body下面的选择raw,就能够传json格式的了
三、在postman中上传文件
四、传cookie
传cookie须要知道:请求方式、url、cookie值、请求参数
例如:获取某个QQ群里的成员信息
step1:获取url,url以下:https://qun.qq.com/member.html#gid=QQ群号
step2:按f12,选择network下的XHR,XHR下面的都是请求的接口,有利于接口测试,因此直接选择XHR就好了,下面以search_group_members这个接口为例
step3:获取请求方式与url
step4:获取cookie
step5:获取请求参数
step6:在postman中能够调接口了,cookie存在Headers里面,以下
参数放在body里
step7:发请求
form-data:能够上传键值对,也能够上传文件
x-www-form-urlencoded:能够上传键值对,不能够上传文件
raw:能够上传json格式的参数
step1:点击小齿轮下的Manage Environments
step2:选择Globals
step三、添加一个ke与value,例如key=ip,value=ip地址,添加完后点击 save,配置完成
step四、如何运用刚才配置的Gloabals
在url中不用写IP地址了,用{{ip}}代替便可,其中ip根据本身在globals中定义的key的名字而变化
定义:Java开发的开源的性能测试工具,即须要安装jdk才可使用jmeter
step一、添加线程组,线程组能够理解为一个容器,以后的测试都在线程组里面执行,
其中,线程数:即为并发数,若是要测试100个用户同时登录,那么现成数设置为100便可
Ramp-Up Period(in seconds):为在XX秒以内执行这个线程
循环次数:想要循环几回就填几
step二、添加http请求,选择线程组,点击右键
step三、配置http请求,以下图
step四、添加监听器,即查看结果树,能够看发送的请求与响应的数据
以下图
解决办法:在jmeter的bin目录下,找到jmeter的配置文件,jmeter.properties最下面一行加上sampleresult.default.encoding=UTF-8后,保存,而后从新打开jmeter,再次执行接口文件,就能够了
以下图
解决办法:
在jemeter的bin目录下,找到jmeter的配置文件,jmeter.properties最下面一行加上jsyntaxtextarea.font.family=Hack
后,保存,而后从新打开jmeter,再次执行接口文件,就能够了
在http请求配置页面中Content encoding=utf-8,便可
1 、__random:函数助手里面的__random取一个范围内的随机数
step1
step2
step3
step4:
二、__time:函数助手里面的__time取当前时间戳
时间戳:从计算机诞生那一天到如今过了多少秒
三、__UUID生成的字符串很长
配置方式:右键--->添加--->配置原件--->csv Data Set Config
注意:若是不写绝对路径,能够只写文件名,那么须要把文件放在jmeter的bin目录下便可,那么就能够直接写文件名就能够了
而后去编辑登录接口以下,此时username不能够写死,须要写名字集,格式 ${名字集},以下图:
从上一个接口里面获取到结果传递给下一个接口
例如:抽奖接口的请求参数就要从登陆接口的返回参数中取
step一、取登录接口返回的userid与sign
配置以下:
从登录接口返回的参数中取userID与sign
返回参数以下:
step二、JSON Extractor 配置以下,其中$.login_info.userId定义以下:
$表明登陆接口返回的参数中最外边的大括号,.表明大括号里面的内容,login_info表明从返回参数中找到login_info,.表明返回参数中的login_info里的信息,userId表明在login_info取到userId的值
step三、配置抽奖接口:
配置:线程组--->添加--->配置原件--->用户定义的变量
配置:,名称与值,例如名称为 ip
应用:
在http请求中配置IP的地方改写成上边配置的变量便可,就不用每次都输入IP地址了
格式:$(定义的变量)
例如:要测试10秒以内1个用户登录100次状况
思路:线程组中线程数设置100(表明一百个用户),10秒
压测,须要关注返回的TPS、响应时间,经过聚合报告就能够看
TPS:服务器每秒钟处理的事物数,即请求数
响应时间:从发出去请求到服务端处理完返回给客户端的时间
以下图:
jmeter在接口测试过程当中,有时须要响应断言来判断接口测试获得的接口返回值是否正确。
响应断言 :对服务器的响应接口进行断言校验。
1. 首先,选中某个线程,而后右键,选择添加—>断言—>响应断言 ,获得如图所示的响应断言界面。
Apply to:默认选择 Main sample only便可
要测试的响应字段:默认选择 响应文本 便可
模式匹配规则:选择“包括”便可,即返回的参数中包括添加的 要测试的模式里的内容便可
要测试的模式:输入 咱们要匹配的响应接口(即接口测试结果的指望值或者其余指望值)
应用以下: