day4

回顾:
三大部分:
1,RESTful架构风格的特点:
HTTP接口的特点:
请求地址(url):
http://服务器地址(域名或IP地址):端口号/[/项目名称/版本]/资源集合(路径)/单个资源(某个资源文件或者代表某个资源的路径)
请求方式:
增:POST----201 ----- CREATE ---INSERT
删: DELETE---204 ---- DELETE
改: PUT----200/201 ---- UPDATE
查: GET----200 ----- SELECT
状态码:
返回的数据格式:JSON XML HTML等等
2,线程组的属性
名称、解释
出错后的动作
线程数:模拟用户的数目
启动时间:启动所有线程所花费的总时间
循环次数:每个用户执行线程组内的元件的次数
调度器:
1,计算结束时间
2,计算开始时间

为什么:
1,实现批量请求
2,实现时间持续较长的性能测试

3,参数化方式之一:CSV数据文件设置
参数化目的:为了提高效率,减少重复性操作
请求默认值:重复填写项作为默认值,只写了一次。

CSV数据文件设置(很重要的参数化方式,大家一定要掌握):
原理--理解后思路才能清晰
步骤--熟练以后,才能更好的理解原理,提高工作效率。
数据格式:HTML text JSON XML CSV

1,分析过程:
哪里需要参数化,就是对哪里使用变量替代。

显式的分析:
不变
变化

2,处理不变的部分:
创建计划-线程组--请求,
1,只写一次
2,设置循环:线程组属性

3,处理变化的部分:
1,变量替代
2,形成数据源:CSV数据文件---Jmeter外部
4,把数据源和变量联系起来:CSV数据文件设置--配置元件
1,指定路径和文件名
2,指定编码方式----
3,指定变量名:多个变量名使用逗号分隔
1,第几个变量,就从第几列取值
2,第几次循环,就从第几行取值

实现批量请求。

4,几个配置元件:
1,HTTP请求默认值
2,CSV数据文件设置
3,HTTP请求信息头
5,强调:术语一定要能说出来


今天的内容:
1,参数化剩下的3种:
用户参数、用户定义的变量、函数
2,直连数据库
3,关联的方式(3种):1-2种




参数化的第二种方式:用户参数
1,数据源在内部准备:添加前置处理器--用户参数
1 2 3
dptid dfsf sfs
dptname sfs
mastername dsfsf
slogan sdfsf

2,循环取值方式:
注意:用户数要和线程组的线程数保持一致


CSV数据文件:存储参数化的数据(变化的数据)
用户参数:存储参数啊的数据(变化的数据)

使用变量封装变化的数据

前两种方式中,变量封装的是变化的数据
第三种方式中,变量替代的是不变的数据。重复性

场景:api/departments/这个字符串,很可能会写几十次。

api/departments/------- apis/department/

api/departments/ --- path : apis/department/---${path}

Jmeter:用户定义的变量


上午:
CSV数据文件设置:配置元件中 使用变量替代的是变化的数据
用户参数:前置处理器 使用变量替代的是变化的数据
用户定义的变量:配置元件 使用变量替代的是不变的数据

第四种:函数

使用函数替代某种基本功能(过程)

函数:是封装某种功能或者过程的基本形式

计算两个数的和

x + y


def adder(x,y):

几十行代码
return z + m

维护方便,高效,实现重复利用。


函数:计数器

单独一节课讲函数:6种--之一计数器

应用场景:在结果树中区分每一个请求。

1,2,3,。。。。10。
计数器这个函数在Jmeter中被调用
生成函数的调用形式:函数助手
1,打开函数助手:
2,计数器函数:__counter

1,前面是两个下划线
2,第一个参数的值:可以为空,默认是false
false:所有用户共享一个计数器
true:每个用户独享一个计数器

4种参数化总结:
1,相同点:
都是从一个数据源获取数据,对重复的过程进行参数化
2,不同点:
1,CSV数据文件设置:
数据从外部获取,适用于数据量特别多的场景。可以手写,可以使用工具或者代码生成大量测试数据,使用场景较多,频繁。
2,用户参数:
数据在Jmeter内部准备,适用于少量数据的场景。应用频率较低。

3,用户定义的变量:
适用于数据不变但是重复性较高的场景。应用频率较低。
4,函数:
多样、灵活、功能强大。使用较多。

建议:CSV数据文件设置和函数优先考虑使用。用户参数和用户定义的变量作为辅助手段,择机使用。

 

直连数据库:

什么叫直连数据库:
绕过HTTP接口,直接对数据库进行连接、访问、操作。

为什么要直连数据库:
1,我们的接口测试数据存储在数据库中。
2,通过HTTP接口调用的数据,如果有错误,我们无法判断是接口传递引起的,还是数据库本身的数据有问题。
3,人眼去查看会有问题:
1,看走眼
2,看不过来

怎么直连数据库:

原理:访问数据库:

进入数据库,

1,知道数据库在哪里:定位:类似URL的形式:
2,知道数据库的类型:指定一个数据库驱动的类型
3,用户名、密码:填写相关的信息

以上3个信息,Jmeter中添加配置元件:
JDBC connection configuration
存储到一个变量中。

直连数据库,Jmeter通过一个组件来实现:
JDBC request --取样器,填写直连数据库的信息--${MyData}

4,操作:增删改查---编写sql语句




步骤:
1,添加数据库直连驱动
测试计划中,选择路径:
2,配置数据库直连信息
1,URL
2,类型
3,用户名密码
4,变量名
3,创建数据库直连请求
1,变量名填写
2,选择声明类型:
查询:select statement
更新:update statement
增、删、改
4,编写数据库sql语句:

 

一、直连数据库

1,为什么直连数据库?

接口调用的数据库数据,是通过接口传递过来的,无法验证数据库的数据信心是否正确的传递。直连数据库,可以验证接口调用传递的数据,是否和数据库中相符。

人工检查:会容易出错,肉眼凡胎容易走眼。数据量巨大时,肉眼凡胎,看不过来,低效。

直连数据库:程序检查,批量查询,高效、安全。

2,什么是直连数据库?

通过jmeter内置的组件,绕过http请求接口,直接对数据库库进行连接、操作和交互。

3,怎么直连数据库?

(1) 添加数据库驱动

① Jmeter是不能直接连接数据库,需要利用第三方的插件安装驱动进行连接

 

(2) 配置数据库连接信息

连接数据需要获取哪些信息?数据库在哪里,登录用户名、密码

怎么让就Jmeter获取这些信息?使用配置元件:JDBC connection configuration进行配置

怎么进行配置呢?

 

 

注意:

1,DataBase URL中前面的jdbc:sqlite:是固定格式,后边跟数据库所在路径。

2,JDBC Driver Class选择org.sqlite.jdbc。因为我们连接的是sqlite的数据库

3,这些连接信息通过我们填写变量名:mySqlite来引用

(3) 创建数据库连接请求

 

 

(4) 启动请求

(5) 观察效果:

 

 

一、参数化方式之--用户参数

1,参数化的思路:

 

2,怎么做用户参数的设置,进行参数化:

第一步:准备参数化的数据,填入到用户参数的组件中:

 

 

 

 

第二步:被参数化的过程:已经构造好的HTTP请求取样器

注意:应用变量的方式是:${变量名}

 

第三部:设置线程组

注意:线程组里设置为了

 

3,与CSV数据文件设置区别:

1,CSV的数据是从外部获取,用户参数的数据在Jmeter内部组件内创建

2,用户参数设置线程属性的时候,循环次数要等于线程数。因为线程模拟的是用户,用户参数中获取数据的顺序是以用户数为准。

3,循环不同

4,与CSV数据文件设置相同:

原理和过程是相同的。

 

三、参数化之用户定义的变量

怎么设置:

第一步,基于测试计划,添加:

 

 

第二步,引用变量,在需要引用变量的地方填写变量:

 

四、参数化方式之--函数

1,什么是函数?

函数:程序中封装代码功能的一种最基本的形式。

封装的是什么:某种基本功能的实现

比如,计数器:计算某个重复过程的次数

2,为什么要用函数?

某种功能的复用频率很高,如果每次使用都写代码,效率很低。封装到一个函数中,只需要每次使用时调用函数,即可实现功能的复用,高效,维护方便。

只要涉及到封装,都会有高效、维护方便的优点

3,怎么用函数进行参数化:
1,创建测试活动

测试计划--线程组--请求--查看结果树

2,在需要参数化地方插入函数调用

1,打开函数助手

菜单栏:

 

工具栏:

 

快捷键:Ctrl+Shift+F1

2,选择函数

3,输入选择函数的参数值,第一个参数默认值:FALSE

4,生成调用格式

5,选择复制调用格式

6,2-5步如下图所示

 

7,粘贴到需要函数的任何地方

 

3,启动线程组,观察效果:

 

4,注意:

(1)计数器__counter,前面是两个下划线

(2)地址?后面的内容,http请求不做任何解析。如果服务器收到的是无效参数,会自动视为无效内容而加以处理。

5,第一个参数不同值的区别:

True:每个线程单独拥有一个计时器。False:所有线程共有一个计时器。

如果不填写,默认值为:FALSE

 


上一篇:【Day4】python获取100以内的质数


下一篇:东软大三上学期实训笔记-mysql篇Day4