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 和$ ...
随机推荐
- js全局属性/函数
全局函数 eval () isFinite () 检查某个值是否为有穷大的数 isNaN () 检查某个值是否是数字 返回true或fa ...
- Office批量打印助手(Excel 批量打印、Word 批量打印)
最新版本:1.0.6664.34636(更新日期:2018年3月31日) 下载地址:点击下载 程序简介: 本程序能批量打印 Word 文件.Excel 工作簿. 使用程序前请先安装 .NET Fra ...
- Docker和ASP.NET Core
Docker和ASP.NET Core Docker 正在逐渐成为容器行业的事实标准,受到 Windows 和 Linux 生态系统领域最重要供应商的支持. (Microsoft 是支持 Docker ...
- Redis令牌桶限流
一 .场景描述 在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源, 通常来说我们会对于服务器上的各种接口进行调用次数的限制.比如对于某个 用户,他在一个时间段(interval ...
- 基于appium的fixture应用之代码重构
一.痛点分析 在appium自动化中,会话启动参数较多,我们使用了yaml配置文件来进行管理,并使用了PyYaml模块进行yaml文件内容的读取,我们知道,在测试场景中,不可能只会用到一种启动类型的参 ...
- Delphi xe 10.3.2-快递接口封装-【快递鸟(即时查询和单号识别)】
编译环境:Windows 7 +Delphi xe 10.3.2 封装了快递鸟接口,注意的坑:MD5要转为小写. function TKDniaoAPI.StrtoMd5(const str: str ...
- R3环申请内存时页面保护与_MMVAD_FLAGS.Protection位的对应关系
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 技术学习来源:火哥(QQ:471194425) R3环申请内存时页 ...
- [Abp vNext 源码分析] - 5. DDD 的领域层支持(仓储、实体、值对象)
一.简要介绍 ABP vNext 框架本身就是围绕着 DDD 理念进行设计的,所以在 DDD 里面我们能够见到的实体.仓储.值对象.领域服务,ABP vNext 框架都为我们进行了实现,这些基础设施都 ...
- 常用类-CSV---OLEDB
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- python-Redis模块常用的方法汇总
Redes模块常用的方法汇总 一.创建建Redis对象 1.直接使用 import redis r = redis.Redis(host='127.0.0.1', port=6379) 2.连接池使用 ...