前端php
后台前端
接口把client端和server端联系起来,两端之者使用的数据类型是json。
json是一种通用的数据类型,返回的格式为key-value,键值对,{"name":"张三","age":23"}
java
也有使用xml的,格式为:python
<name>zhangsan</name> <sex>male</sex>
测试接口以前,得有一个接口文档,文档中有请求方式,请求参数,响应信息等。
功能测试测的是业务逻辑。接口测试属于业务测试中一种。mysql
若是是get请求,不须要借助任何工具,只须要用流星器就能够发送请求linux
http://api.xxxx.cn/api/user/stu_info?stu_name=小黑
返回结果以下:sql
{ "error_code": 0, "stu_info": [ { "id": 5671, "name": "小黑", "sex": "男", "age": 28, "addr": "河南省济源市北海大道32号", "grade": "天蝎座", "phone": "18799932946", "gold": 120054446 } ] }
请求中格式为http://ip:port/路径/接口名?key1=value1&key2=values2
。若是有多个参数中间用&链接多个参数数据库
postman的body中form-data和x-www-form-urlencoded区别:json
POST请求windows
入参为json类型,body中选择raw,JSON类型,如未标明,使用key-vaule格式
cookie,放在本地的一个键值对,请求时发送cookie中的sessionId与服务端sessionId进行匹配,匹配成功则经过验证。
session,放在服务端的一个键值对,有一个过时时间。
查看Cookie信息,经过浏览器F12能够看到存储的cookie信息
添加Cookie信息,在Headers中添加Cookie信息
添加header信息
文件上传
POSTMAN全局变量
使用方式
DNS, HTTP协议,三次握手,4次挥手
HTTP请求分为两个部分,请求头和请求体,请求头中是一个额外的信息,好比浏览器类型,cookie等。请求体中传的是具体的数据。
请求头(header):
请求体(body):
接口用例
项目 | 模块 | 用例id | 用例描述 | 请求URL | 请求方式 | 请求数据 | 预期结果 | 请求报文 | 返回报文 | 测试结果 | 测试人员 |
---|
HTTP状态码
Jmeter乱码处理
JMeter查看结果树中返回信息乱码
在Jemter的bin目录下,jmeter.properties文件中添加sampleresult.default.encoding=utf-8,后重启jmeter。
JMeter中body data中乱码
Jmeter的bin目录下,jmeter.properties文件中添加jsyntaxtextarea.font.family=Hack,后重启jmeter。
GET请求
POST请求
POST入参为JSON类型,若是避免插入到数据库中的中文为乱码,须要在Content encoding中填写utf-8。
添加cookie信息,cookie信息写在HTTP信息头管理器中,HTTP信息头若是放在线程组下与HTTP请求同级,则线程组中的全部请求均可以使用该HTTP信息头中的信息,若是放在某个HTTP请求下,则只对该请求单独生效。
添加Referer信息
文件上传,Jmeter 3.0以上版本须要填写MIME TYPE信息,随便填写就行,好比填写为text。
函数助手中
线程组->配置单元->用户自定义的变量,填写变量名和变量值
使用方式为${变量名}
使用函数助手中__Random函数成生随机数,在此例中因为压测用户注册功能,用户名是不可重重的,此处的随机数用于生成用户名后的数字
选项->函数助手对话框->__Random,输入最小值和最大值后,生成。
使用方式以下:
在线程组中循环5次,在查看结果树中能够看到5次请求中的用户名都不同
使用计数器__counter函数进行自增
使用__time函数取时间,须要传入一个格式,yyyyMMddhhmmss,HH为24小时制,hh为12小时制
时间表示
从文件中读取数据
有场景须要大批量数据,数据是从数据库中导入到文件中。
线程组->配置元件->CSV Data Set Config
若是Filename中只写了文件名,则须要把文件放到Jmeter的bin目录下。
若是文件中有多列,用符号分隔,须要在Delimiter中添写相关的符号。在Variable Names中也须要填写多个变量名,中间用","分隔,会每次取一行数据
Ignore First Line,是否忽略第一行
Allow quoted data,是否容许带引号
Recycle on EOF,遇到文件结束后是否循环
Stop thread on EOF,遇到文件结束符中止线程
Sharing Mode,是否全部线程组生效,仍是只在当前线程组生效
关联:调用第一个接口,从第一个接口中返回的数据中取到某个值,放到第二个接口中使用
HTTP请求->后置处理器->JSON PATH EXTRACTOR
登陆接口返回为以下:
{ "error_code": 0, "login_info": { "login_time": "20190416115043", "sign": "96b4de24614f0796402c54f889e50147", "userId": 9786 } }
咱们须要取到login_info中的sign,将sign的值放到充值接口中用做cookie值。写法为$.login_info.sign,其中$表明最外层的{},一层一层往内取。
将取到的sign放到充值接口的cookie中
若是须要查看各种变量中取到的值,可使用线程组->Sampler->Debug Sampler查看各变量所对应的值。
Jmeter压测
在线程组中设置线程数及压测的持续时长,若是要进行长时间压测,须要勾选"永远",以及勾选调度器,并填写持续时间
填写了持续时间后,结束时间会失效
填写了启动延持后,启动时间会失效
Ramp-Up Period,线程在多少秒内会启动完,0为全部线程所有同时启动。通常为1便可。
TPS,服务器每秒钟能处理的请求数
响应时间,请求从发出后与接收到服务器返回给数据所花时间
聚合报告
Samples,发出的请求数
Average,平均响应时间,单位为毫秒
Throughput,TPS
Error%,错误率,不一样业务要求不同,像银行业务要求100%的正确率。
断言,用于校验结果
测试计划->Add directory or jar to classpath
线程组->配置单元->JDBC Connection Configuration
填写Variable Name
填写Databse URL,jdbc:mysql://192.168.1.116:3307/bugfree?characterEncoding=UTF-8&allowMultiQueries=true
添加JDBC Request,在Variable Name中须要填写JDBC链接配置中填写的变量名
JDBC请求中,Query Type为Callable Statement时,能够同时执行查询和更新语句。
控制机修改本地Jmeter中jmeter.properties中remote_hosts项,添加负载机ip和端口,
在负载机上修改jmeter.properties文件,(若是负载机为Windows,不须要修改rmi的两项)
负载机上运行jmeter-server.bat
负载机压测时,控制机的查看结果树中响应结果内容会为空,须要添加断言,用以判断返回结果是否正确。