1.1 接口基础知识
1.1.1 Get&post请求
GET和POST请求:
GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.
POST请求是把提交的数据放在HTTP包的Body中.
get请求可以用浏览器来发送,直接输入URL,post请求需借助工具来发送。
GET请求和POST请求的区别:
GET使用URL或Cookie传参。而POST将数据放在BODY中。也就是说get请求没有请求体,只有请求头。
get请求没有post安全,因为get把参数都写到url里面
get请求有参数的大小限制,post请求没有大小限制。
get请求一般用来获取数据,像服务端发送数据的时候用post
个人理解来说,第二点和第三点区别比较勉强,get请求虽然将参数暴露在url中,看起来很不安全,但post请求也并没有好到哪里去,只要抓包,它的参数照样无所遁形,而第三点呢,在 HTTP 协议定义中,没有对GET请求的数据大小限制,所谓的get请求有参数大小限制,不过是浏览器的限制而已。
1.1.2 关于请求体和请求头
HTTP请求报文由3部分组成(请求行+请求头+请求体):
请求头
header
你发出去这个请求的额外信息,例如你用什么浏览器发的,你想让服务端给你返回什么样的数据等
cookie
请求体
body
发送给服务端的参数
1.1.3 http状态码
HTTP状态码是用以表示HTTP响应状态的3位数字代码。
每发出一个http请求之后,都会有一个响应,http本身会有一个状态码,来标示这个请求是否成功,常见的状态码有以下几种:
1、200 2开头的都表示这个请求发送成功,200请求已成功,请求所希望的响应头或数据体将随此响应返回。
2、300 3开头的代表重定向,302请求的资源现在临时从不同的 URI 响应请求。301 - 资源(网页等)被永久转移到其它URL
3、400 400代表客户端发送的请求有语法错误,401代表访问的页面没有授权,403表示没有权限访问这个页面,404 - 请求的资源(网页等)不存在
4、500 5开头的代表服务器有异常,500代表服务器内部异常,504代表服务器端超时,没返回结果
-部分摘自网站:www.besttest.cn
1.1.4 cookie、session
cookie和session被用来跟踪用户的会话 。
cookie是在本地存的键值对,session是在服务端存的键值对
在使用postman和jmeter时,cookie 可以在header发送出去,为键对{'Cookie':’xx=xx,xx=xx,xx=xx'}的格式
1.2接口用例设计
1.2.1 测试内容
通过性验证、接口安全、异常验证(必传非必传、参数类型、入参长度)、业务逻辑
例如:接口安全,关键字段如密码有没有加密 (F12开发者工具-network)
1.2.2 用例参考
1.3 postman请求接口
1.3.1postman-get示例
1.3.2postman-post示例
1.3.3postmant添加cookie
1.3.4postman使用json格式发送数据
1.4jmeter请求接口
1.4.1简单的get请求
1.4.2get请求的两种参数方式
1.4.3post请求
1.4.4添加cookie
选中请求-右键-添加-配置元件-HTTP信息头管理器
1.4.5 jmeter参数化
1.4.5.1 函数助手对话框
选项-函数助手对话框-选择__Random,随机生成一个指定范围的整数,将生成的字符串复制粘贴来使用
1.4.5.2CSV Data Set Config
选中请求-右键-添加-配置元件-CSV Data Set Config
1.4.6jmeter关联
1.4.6.1json提取
从一个请求的响应结果中提取参数,用于下一个请求
选中请求-右键-添加-后置处理器-jp@gc - JSON Path Extractor(只要有json字样就可以)
引用json提取的值:${sign}
1.4.6.2正则表达式提取
选中请求-右键-添加-后置处理器-jp@gc - 正则表达式提取器
响应报文: { "error_code": 0, "login_info": { "login_time": "20180520170814", "sign": "337ca4cc825302b3a8791ac7f9dc4bc6", "userId": 1 } } 正则表达式提取: "sign": "(.*)"
引用正则表达式提取的值:${sign}
1.4.7响应断言
响应结果:{ "error_code": 0, "login_info": { "login_time": "20181108131056", "sign": "e9cff923a69dbcc96e1b6cd0d26aed58", "userId": 9786 } }
添加断言:选中请求-右键-添加-断言-响应断言
响应结果中若包含sign字符串,则请求通过,不包含sign字符串,则请求失败
1.5 Jmeter压测
1.5.1线程组
线程组相当于有多个用户,同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。
1 默认情况下,测试开始的时候,所有线程就被创建完了。如果勾选了此选项,那么线程只会在合适的需要用到的时候创建。
Ramp-Up Period: 线程启动的时间,如:5个线程,5秒启动时间。那么每秒会启动一个线程。
调度器 如果不想立即执行,可以通过调度器控制测试执行的开始时间和结束时间。
启动时间:控制测试在某个时间点启动。这个配置会被“启动延迟(秒)”配置覆盖。
结束时间:控制测试执行的结束时间。这个配置会被“持续时间(秒)”配置覆盖。
持续时间(秒):控制测试执行的时间。比如如果你要让用户持续不断登录1个小时,你可以在文本框中填写3600。如果在1小时以内,结束时间已经到达,它将会覆盖结束时间,继续执行。
启动延迟(秒):控制测试多久后启动执行。
1.5.2聚合报告
选中请求-右键-添加-监听器-聚合报告
1