d03
回顾:
两个环境
工具环境:Jmeter的下载、启动、基本使用
项目环境:学生信息管理系统
两种接口:
天气预报:4个接口----GET方法
学生信息管理系统:
被测软件的学院信息接口:
4类:
查询接口:6个
新增接口
更新接口
删除接口
数据库:三个表:学院信息、班级信息、学生信息
sqlite:执行语句是通用的sql语句。
两个数据格式:常见的web应用的数据格式
XML
标签语言,数据中有前后的标签
只存储和传输数据,不显示数据
标签是自定义的,不是预定义的
JSON(记住)
什么JSON数据:
名称:值 对:名称是包裹在双引号中的。
值可以是:
数字
字符串
布尔值
JSON对象:花括号括起来的 JSON数据,JSON数组,JSON对象
JSON数组:方括号括起来的 JSON数据,JSON数组,JSON对象
空:NULL
JSON数据之间通过逗号分隔
Jmeter的基本使用步骤:
调用1.1方式的查询接口,使用Jmeter查询所有学院信息:
1,新建测试计划
2,新建线程组
3,基于线程组添加取样器--HTTP请求,填写如下信息:
协议、域名、端口号、路径---请求地址
方法--请求方法
参数--请求参数,传参的2种方式:
1,URL后边填写:URL?参数名=参数值&参数名=参数值
2,参数列表中填写参数名和参数值
3,以上只能二选一
编码方式:UTF-8
4,基于测试计划添加监听器---察看结果树
5,启动脚本,运行,观察结果
今天的内容:
1,RETTful风格的特点
2,熟悉学院信息的四类接口:增删改查,并使用Jmeter进行调用
3,Jmeter的几个配置元件
4,线程组的基本属性:Jmeter的初级使用
5,Jmeter的核心知识点之一:参数化(4种)----学完所有的核心知识点,就可以Jmeter的中级使用
一,RESTful风格:
HTTP接口的四大要素具有的特点:
1,请求地址(URL):http:// 服务器地址(域名或者ip地址):[端口号]/[项目名称/版本]/资源集合(路径)/[/单个资源](单个文件名)
2,请求方式:
增:新增--POST--在服务器新建一个没有的资源。----CREATE
删: 删除--delete--在服务器删除一个已有的资源。----DELETE
改:更新--PUT---在服务器更新已有的资源。---UPDATE
查:查询--GET--从服务器获取资源(单个或者多个)
3,返回值
1,返回的状态码:
GET----200
PUT----201或者200
post---201---学生信息管理系统
delete--204
2,返回的数据格式:XML、JSON,HTML
4,参数:传参的方式:
GET:两种方式
POST:两种方式:
1,URL后边跟参数:URL?参数名=参数值&参数名=参数值
2,请求的消息体中携带数据:
xml格式或者json格式
学生信息管理系统的接口,就属于RESTful风格架构的。
二、使用Jmeter熟悉学院信息的四类接口:
查询:
dep_id : 学院id
dep_name: 学院名
master_name : 院长名
slogan: 口号
6个请求:
1.1: http 域名 端口号 路径 方法
1.2: http 域名 端口号 路径 方法
1.3: http 域名 端口号 路径 方法
1.4: http 域名 端口号 路径 方法
1.5: http 域名 端口号 路径 方法
1.6: http 域名 端口号 路径 方法
新增:
1,按照接口文档创建HTTP请求:
1,注意方法是:post
2,数据是json串,并且填写在消息体数据中
2,需要添加配置元件---HTTP信息头管理器
添加的字段名为:Content-Type
添加的字段值为:application/json
三,配置元件:
1,请求默认值
1,为空的地方取默认值
2,不想取默认值,就不能为空
3,不能通过如下方式:
为空?$dep_id_list=ghi,gkl,def2
实现:
api/departments/?$dep_id_list=ghi,gkl,def2
2,HTTP信息头管理器:修改请求的头部字段值。
1,新建线程组01,在本线程组中,创建http请求,使用1.1的方式,查询所有学院信息10次。
解决方案01:低效
创建10个请求
解决方案02:循环
1,1个用户循环10次
2,5个用户,每个用户循环2次。2个用户,每个用户循环5次。
四、线程组的属性:初级使用者
1,线程组的基本属性
线程数:用户数
启动时间:启动所有线程花费的总时间
循环次数:每个线程执行本线程组中所有的元件的,次数。勾选永远,将做死循环,直到手动停止
调度器:
持续时间:用来计算线程组停止运行的时间节点
启动延迟:用来计算线程组开始运行的时间节点
2,线程组的执行顺序:默认是并行执行的,如果要顺序执行,我们需要在测试计划中勾选独立运行每个线程组。
并行:先开始的不一定先结束,后开始的不一定后结束。
顺序:沿着左侧树形结构,从上往下顺序执行。
五、Jmeter的核心知识点之一:参数化
参数化之CSV数据文件设置:
1,新建线程组02,在本线程组中,创建1个http请求,使用1.2的方式,查询数据库中的前30个学院信息
原理:
问题:写一个pytho代码,实现:连续输出如下语句:
这是第1次打印:hello,world
这是第2次打印:hello,world
这是第3次打印:hello,world
。。。。。
这是第10次打印:hello,world
解决方案01:
print("这是第1次打印:hello,world")
print("这是第2次打印:hello,world")
print("这是第3次打印:hello,world")
....
print("这是第10次打印:hello,world")
解决方案02:高效
For i in range(1,11):
print("这是第"+i+"次打印:hello,world")
分为两部分:
1,不变的部分:如何处理
1,只写了一次
2,使得它循环
2,变化的部分:1,2,3,4,5,。。。10
1,使用一个变量来代替它的位置:i
2,它的所有值形成一个数据源:range(1,11)
3,联系不变的部分和变化的部分,使用for循环,将变化的数据源循环赋值给不变的部分。
CSV数据文件设置:Jmeter中实现如上参数化步骤的元件。
新建线程组01,在本线程组中,创建1个http请求,使用1.2的方式,查询数据库中的前3个学院信息
解决方案01:
第1个请求:http://127.0.0.1:8000/api/departments/ghi/
第2个请求:http://127.0.0.1:8000/api/departments/gkl/
第3个请求:http://127.0.0.1:8000/api/departments/abc233/
分为两部分:
1,不变的部分:如何处理
1,只写了一次:http://127.0.0.1:8000/api/departments,http请求只添加1个
2,使得它循环:3次---设置线程组的属性:1个用3次,3个用户1次。
2,变化的部分:ghi,gkl,abc233
1,使用一个变量来代替它的位置:
变量名:dptid
引用变量的形式:${变量名}---${dptid}
2,它的所有值形成一个数据源:
三个id存放到一个文件中:csv文件--逗号分割值文件
注意:
1,csv每列数据要用英文逗号分隔
2,UTF-8编码
3,最好不要有空行
3,联系不变的部分和变化的部分,使用CSV数据文件设置将变化的数据源,通过线程组循环赋值给不变的部分中的变量。
步骤:四大步骤
1,分析参数化的过程:
1,不变的部分
2,变化的部分
2,创建测试计划---线程组---HTTP请求:
1,填写请求的信息:不变的部分
2,设置线程组的循环次数:3
3,变化的地方使用变量替代:${变量名}---引用到任何你想引用的地方。
3,变化的数据形成一个外部的数据源:CSV数据文件
4,添加配置元件:CSV数据文件设置:
1,CSV数据文件的路径和文件名
2,编码
3,变量名:要和请求中的变量名保持一致
2,新建线程组02,在本线程组中,创建1个http请求,新增3个学院信息
1,分析参数化的过程:
1,不变的部分:
{
"data": [
{
"dep_id":"",
"dep_name":"",
"master_name":"",
"slogan":""
}
]
}
2,变化的部分
dptid dptname mastername slogan
1
2
3
2,创建测试计划---线程组---HTTP请求:
1,填写请求的信息:不变的部分
2,设置线程组的循环次数:3
3,变化的地方使用变量替代:${变量名}---引用到任何你想引用的地方。
3,变化的数据形成一个外部的数据源:CSV数据文件
4,添加配置元件:CSV数据文件设置:
1,CSV数据文件的路径和文件名
2,编码
3,变量名:要和请求中的变量名保持一致
一、RESTFul风格架构
(1) 是一种标准的实现,而不是标准本身。体现这种架构设计的风格,叫做RESTful风格
(2) 常见形式:http://服务器地址:端口号/[服务名]/[版本]/资源集合/单个资源
(3) 常用方法:GET(获取资源);POST(新增资源);PUT(更新资源);DELETE(删除资源)
(4) 常见返回码(状态码):GET:200;POST:200/201;PUT:200/201;DELETE:204
(5) 常见数据格式:JSON
1,常见形式:
http://服务器地址:端口号[/项目名称/版本]/**资源**集合[/单个资源]
- http://:为我们HTTP协议的访问头标准
- 服务器地址:为我们项目服务器IP地址
- 端口号:为我们服务器内项目访问的指定编号
- [/项目名称/版本]:可选
- 资源:互联网-图片、音乐、视频、文本、数据
2,方法名:
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
DELETE(DELETE):从服务器删除资源。
3,响应(返回值):
|
序号 |
状态码 |
动词 |
说明 |
|
01 |
200 OK |
[GET] |
服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)幂等:无论执行操作多少次,结果都会执行1次结果相同 |
|
02 |
201 CREATED |
[POST/PUT/PATCH] |
用户新建或修改数据成功 |
|
03 |
202 Accepted |
[*] |
表示一个请求已经进入后台排队(异步任务) |
|
04 |
204 NO CONTENT |
[DELETE] |
用户删除数据成功 |
|
05 |
400 INVALID REQUEST |
[POST/PUT/PATCH] |
用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的 |
|
06 |
401 Unauthorized |
[*] |
表示用户没有权限(令牌、用户名、密码错误) |
|
07 |
403 Forbidden |
[*] |
表示用户得到授权(与401错误相对),但是访问是被禁止的 |
|
08 |
404 NOT FOUND |
[*] |
用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的 |
|
09 |
406 Not Acceptable |
[GET] |
用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式) |
|
10 |
410 Gone |
[GET] |
用户请求的资源被永久删除,且不会再得到的 |
|
11 |
422 Unprocesable entity |
[POST/PUT/PATCH] |
当创建一个对象时,发生一个验证错误 |
|
**12 |
500 INTERNAL SERVER ERROR |
[*] |
服务器发生错误,用户将无法判断发出的请求是否成功** |
总之,RESTful风格的特点:
|
序号 |
名称 |
值 |
|
01 |
定义 |
一种软件架构风格、设计风格,而不是标准 |
|
02 |
RESTful风格 |
|
|
03 |
请求方法 |
GET(获取资源);POST(新增资源);PUT(更新资源);DELETE(删除资源) |
|
04 |
状态码 |
GET:200;POST:200/201;PUT:200/201;DELETE:204 |
|
05 |
[JSON] |
是一种轻量级的数据交换格式;JSON是已键/值对组合方式,键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值: 1 {"name": "张三","age":18} |
问题:查询参数值中有汉字,请求失败,解决方法:
修改Jmeter.proptery文件
1,bin目录下打开:
2,搜索:sampleresult.default.encoding,去掉前面的#号,将等号后边的值改为:utf-8。注意:记得保存
3,修改属性文件,需要重启Jmeter,才能生效。
1,添加请求默认值:
1.1,什么是默认值:
就是缺省的信息,填写以后,新构造请求时可以不用填写,默认取默认值里的数值。
1.2,为什么使用默认值:
将经常使用的一些信息,以缺省默认值的形式使用。好处:维护方便,构造新请求方便。
构造和维护比较高效。
1.3,怎么使用默认值:
2,添加HTTP信息头管理器,作用:添加请求的头部信息:
一、线程组
1,基本属性
(1) 线程数:模拟的用户数
(2) Ramp-up 时间(秒):启动所有的线程数所花费的时间
(3) 循环次数:每个线程循环的次数。勾选永远将不停的循环,直到手动停止
(4) 多个线程可以有两种执行方式:
① 并行:同时进行。特点:先执行不一定先结束,后执行也不一定后结束。
② 顺序:按照树形结构的上下顺序,先后依次执行
③ 如何设置并行还是顺序执行:
在测试计划中设置:
(5)基本属性的作用:可以实现批量的请求
(6)调度器:配置线程组的启动时机和运行持续时间,见名知意。注意:如果启用调度器,则持续时间不能为空,也不能为零。
一、参数化方式之--CSV(重点)
1,参数化的思路:
1,怎么做CSV数据文件设置,进行参数化:
分析过程:
1,分析并找到需要被参数化的过程,并构建这个过程,确定需要被参数化的数据
2,根据第一步确定的数据,准备测试数据,CSV格式的数据。
注意:
逗号必须是英文半角
文件编码必须是UTF-8
3,Jmeter中创建配置元件--CSV数据文件设置。引入存储测试数据的文件,选择编码格式,自定义参数名,其他默认即可
4,在需要被参数化的过程中,引用第三步自定义的参数名。引用格式为:${参数名}
第一步:准备一个数据源:自己在Jmeter外部准备
注意:
1,必须是CSV数据,变量值用逗号隔开,逗号必须是半角逗号(英文逗号,重要)
2,读取数据时,以行为单位读取,每行分割的值对应参数化组件里的变量
3,保存时,选择UTF-8编码格式(重要)
第二步:被参数化的过程:已经构造好的HTTP请求取样器和线程组
注意:应用变量的方式是:${变量名}
第三部:设置参数化的组件
3,CSV文件:
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)
4,为什么:
(1) 高效:可以批量传递不同的数据
(2) 安全:先准备数据,比手动填写请求数据,更准确。尤其是软件生成的数据
(3) 便利:测试数据和测试脚本分离。相互不干扰,维护方便。
d03的更多相关文章
- D03——C语言基础学习PYTHON
C语言基础学习PYTHON——基础学习D03 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 ...
- 区块链学习笔记:D03 区块链在各行业领域的应用(一)
今天主要是学习了区块链在金融和供应链领域的应用,重点体现了区块链多方参与.透明可信.防篡改防抵赖的技术优势 区块链的应用场景最早是在金融行业应用较多,后续逐步扩展到传统行业,如:供应链.政务服务.物联 ...
- 中阶 d03.5 (正篇)完整的Dao 操作数据库
1.目录结构: util---JDBCUtil.java(工具包,整合建立链接和释放资源的方法) dao---UserDao.java(接口,定义方法) impl---UserDaoImpl.java ...
- 中阶d03.4 JDBC_DAO
1.环境准备(单项目下用,在大jdbc项目下只用配置一次) jdbc的驱动(mysqlxxjdbc.jar).util工具(包装释放资源.建立连接.访问properties文件等方法) 2.dao的概 ...
- 中阶d03.3 JDBC_CURD_Util --- 使用 junit执行单元测试(增删改查)
1.单元测试环境准备 https://www.cnblogs.com/longesang/p/11399010.html 2.测试 3.结果返回 4.代码 新建一个test目录统一存放测试案例 查: ...
- 中阶d03.2 JDBC联合properties使用,通过读取本地配置文件为代码传递参数
* 使用properties读取本地配置文件为代码传递参数 * url.用户名.密码.驱动地址等配置可以在配置文件中使用 main package zj_1_JDBC.properties; impo ...
- 中阶d03.1 JDBCDemo
1. jdbc使用查看驱动的doc文档<connector-j.html> 2.代码实现:1. 注册驱动---2. 建立连接---3. 创建statement ,跟数据库打交道--- -- ...
- 中阶d03 JDBC 使用
1.首先在数据库中创建表 2.安装mysql驱动 java开发环境中导入jdbc连接mysql的jar包 mysql-connector-java-5.1.7-bin.jar 下载地址:https:/ ...
- MongoDB学习笔记~对集合属性的操作
回到目录 $unset清除元素 请注意在单个数组元素上使用$unset的结果可能与你设想的不一样.其结果只是将元素的值设置为null,而非删除整个元素.要想彻底删除某个数组元素,可以用$pull 和$ ...
随机推荐
- Hazelcast介绍
Hazelcast介绍 什么时侯需要用例 内存中分布式计算 场景分布式消息 特性 全景 Distributed Maps 一个结点中分区 Hazelcast中的分片也称为分区,Hazelcast默认2 ...
- 【学习笔记】《Java编程思想》 第1~7章
第一章 对象导论 对整书的概要. 略读. 第二章 一切都是对象 创建一个引用,指向一个对象. 安全的做法:创建一个引用的同时便进行初始化. 对象存储的地方:1)寄存器:这是最快的存储区,因为它位于不同 ...
- LeetCode刷题-最长公共前缀(简单)
题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow ...
- 【机器学习基础】交叉熵(cross entropy)损失函数是凸函数吗?
之所以会有这个问题,是因为在学习 logistic regression 时,<统计机器学习>一书说它的负对数似然函数是凸函数,而 logistic regression 的负对数似然函数 ...
- FFT/NTT中档题总结
被DeepinC%怕了,把一些题放到这里来 T1Normal 其实这道题放到中档题也不太合适,个人感觉真的很难,机房里好像都是颓的题解 因为期望的可加性,把每个点的贡献单独处理,即求期望深度 考虑$y ...
- Java之通过接口获取数据并用JDBC存储到数据库中
最近做数据同步功能,从接口获取数据然后存到数据库中以便后续对数据进行相关操作,下面就贴一下相关代码. import com.alibaba.fastjson.JSON; import com.alib ...
- java并发编程-12个原子类
背景 多线程更新变量的值,可能得不到预期的值,当然增加syncronized关键字可以解决线程并发的问题. 这里提供另外一种解决问题的方案,即位于 java.util.concurrent.atomi ...
- mysql workbench 报错:Can't analyze file, please try to change encoding type...
Mysql workbench 导入csv can't analyze file 原因: workbench 识别csv第一行作为column名,column名不能为中文,所以报错.解决方法:csv第 ...
- MySQL数据以全量和增量方式,同步到ES搜索引擎
本文源码:GitHub·点这里 || GitEE·点这里 一.配置详解 场景描述:MySQL数据表以全量和增量的方式向ElasticSearch搜索引擎同步. 1.下载内容 elasticsearch ...
- Linux下Mysql安装教程详解
Linux下软件安装一般有三种方式:RPM包方式(通过Redhat 第三方包管理系统).二进制包和源码包.本篇主要介绍二进制包安装mysql数据库的方式. 如何获取二进制源码包 当然是到mysql官网 ...