一、录制脚本

操作步骤

①打开浏览器的代理服务器(IP设置为127.0.0.1,端口自己设置,比如6666,强制让浏览器访问本机)------浏览器此时无法正常打开网页

②打开jmeter,添加非测试元件-->HTTP代理服务器(设置端口要与浏览器的代理服务端口一致,6666)   

③jmeter中添加一个线程组

④http代理服务器中-->目标控制器,选择③中添加的线程组

⑤过滤无用的脚本,http代理服务器中,选择Requests Filter---->选择排除模式----->添加,过滤不需要的gif,php,txt,png,比如 .*\.gif.*    , .*\.php.*  ,   .*\.txt.*   

⑥点击启动按钮

⑦浏览器访问网页

⑧成功后,将没用的脚本删除,留下可用的脚本,运行,是否会成功。

 

二.参数化

参数化的方式 .*\.gif.*

 

 

 参数化的步骤

 

 

 1.首先设置测试计划--添加线程组(1个)---添加登录的http请求---查看结果树

下面的例子,登录需要有请求头cookie,cookie是从登录首页中获取的,直接再添加一个首页的http请求(参数设置同登录基本一致,路径直接写个/),再在线程组上添加一个cookie管理器,在登录请求下面,添加响应断言,断言一定要放在登录请求的下面!!!(这个只能在登录局域内,否则会出问题)

※httpcookie管理器会自动从首页中获取cookie,给后面访问的请求使用。

查看结果:看响应数据,是否和文档一致。注意在取样器结果中的status_code:200只是表示发送的数据有响应,并不是代表成功。

 

2.参数化

1).CSV文件

将登录的username,password参数化在CSV文件中,添加配置元件-----CSV DATA set config(Csv数据控件)

 

 

 

 将传入的参数username,password参数化

语法:${}

{}里面填写的事CSV数据控件中设置的参数名

 在运行之前,可以在线程组中---取样器----添加Debug Sample,在运行后,可以在调试取样器中查看参数的值,比如username,password 的值。

 在线程组中设置,循环3次,那么运行查看,依次取文件里面的前3组数据。

 

上面的文件格式是txt格式,也可以使用CSV文件

csv文件可以将txt文件或者excel文件,直接修改后缀名为CSV即可。

csv文件中,用编辑器打开,列分割符是逗号,  如下:用户名,密码

 

 

2)注意事项

① 如果CSV文件中,有空列,在CSV控件中也要用个空(一个空格键即可)去接收。如下:

 

 

 如果txt文件中,列分隔符不是逗号,是一个tab,那么CSV控件中也要修改分隔符为\t

 

 

 

 

 

②CSV控件中的特殊设置

 ②-1:遇到文件结束符再次循环?----True False

True的情况

比如,CSV文件中只要有10条数据,而线程组要循环12次,前面10次循环会依次读取CSV中的10条数据,从第11次循环,又返回到CSV文件的第一条数据开始读取。

False:上面的例子,前10次循环读取CSV文件的数据,从第11次开始,读取的数据是空

 

②-2:遇到文件结束符停止线程?----True False

False的情况:CSV文件中只要有10条数据, 而有12个线程组(循环1次),前面10个线程组会依次读取CSV中的10条数据,从第11个线程组开始,又返回到CSV文件的第一条数据开始读取。

True:前10次线程组读取CSV文件的数据,后面的进程就结束没有了

 

③CSV控件,路径设置

上面的例子中,选择txt或者CSV文件都是使用的绝对路径,在项目中,可能需要跨平台,那么使用相对路径就会很方便。

相对路径的写法:./data.txt (./data/csv) 或者 /data.txt (/data.csv)

使用相对路径的条件:读取的文件要在jmeter脚本的相同目录下----下面的data.txt放在作业这个目录里面

 

 

④ txt 、CSV文件,优先选择txt文件

CSV文件,消耗的内存更大,jmeter消耗的内存更多,会直接影响性能。  

 

 2)类似于注册接口,每次请求都需要一个未注册的手机号,才能注册成功,需要用到参数化;

可以使用  (1)配置元件 -->用户定义变量 或者测试计划中的用户定义变量 ;(2)前置处理器-->用户参数    来设置参数

 (1)-1 配置元件 -->用户自定义变量 

 首先,用函数助手  随机生成手机号后8位

 

 将随机生成手机号的字符串,直接粘贴的用户定义的变量中的value中;手机号前3位号段,可以自行定义:

 

 再将用户定义的变量:user_mobile作为参数,设置到注册请求中:

 

查看结果树,运行。

这样,就可以重复发送注册接口的请求,不需要每次修改一次手机号了。

 

  (1)-2 测试计划--->用户定义变量

 将上面的用户定义变量的值,设置在测试计划中的用户定义变量,也可以实现。

 

 

 

 

总结:

①用户定义变量的设置方式有2种:测试计划中的用户定义变量  和 线程组-->配置元件-->用户定义的变量

②用户定义的变量是全局变量----可以跨线程组被引用

 即不管是测试计划中的设置的用户定义的变量 还是线程组中添加的用户定义的变量,在整个测试计划中,都可以使用。

 比如:测试计划中的用户定义的变量glob_user_mobile,在该计划下的所有线程组,都可以使用

            线程组1中添加的用户定义的变量,user_mobile,在线程组2中也可以使用。

 

扩展:用户定义的变量,在一个线程组循环3次  跟 3跟线程组,每个线程组循环1次的区别:

一个线程组,循环3次:

 

 

 

 

 

 得到的结果是,第一次注册成功,后面2次,注册失败----------手机号已注册!!

也就是说,一个线程组,循环多少次,得到的手机号都是相同的。

 

多个线程组,每个线程组循环一次:结果与上面一样

 总结来说:用户定义的变量 ,在jmeter启动时获取一次值,在运行过程中,不会发生改变。-----上面的手机号,随机生成后,在运行过程中,不管怎么循环都不会发生变化。

 

 (2) 前置处理器-->用户参数

 用户参数:是局部变量。-----在哪个线程组中设置的,就只能在当前线程组中被引用(“私人定制”),不能跨线程组使用。

 

 

 

 跨线程组引用user_2变量,无法读取到数据。

在(1)中用户定义的变量,循环多次,手机号是不变的,但是在用户参数中,是可以变化的。----多线程组循环1次或者单线程组循环多次,手机号码都是不一样的。

即:用户参数,在jmeter启动时获取一次值,在运行过程中,还会动态获取值。

 

用户参数的一个注意事项:每次迭代,更新一次

举个栗子:

线程组中,有注册请求和登录请求,引用的是用户参数的变量,注册成功了,到登录的时候,手机号又发生了变化(新的手机号没有注册成功),无法登录

解决上面的问题,就需要在设置用户参数的时候,勾选✔上:每迭代一次,更新一次

 

 即,每迭代一次(注册+登录一次),才会更新一次手机号。-----循环一次,就是一次迭代。

 

总结:用户定义的变量 和 用户参数 在使用上的区别:根据场景不同,进行选择

 

2)函数:双下划线开头,名称区分大小写

下面说几个比较重要的函数

①__digest   加密

 

 除了MD5加密,还支持哪些加密算法呢?

选择digest,点击右侧的【帮助】按钮,查看帮助文档,支持下面几种加密算法:

 

 

②__IterationNum 迭代数

 

 

③__threadNum  线程号 (起始值是1)

 

 ④__property / __P获取属性

 

 

⑤__setProperty  动态的设置属性

上面的用户参数的变量,是不能跨线程组的,注册手机号的变量就不能多线程组使用。可以将手机号设置成动态属性。

⑥__randomString  生成随机字符串

有些用户名是随机用户,可以随机生成,就i可以用这个函数

 

 ⑦ __time 获取时间戳

可以设置的格式有:

 

 

 

 

 

⑧__V 拼接函数

 

3).扩展--http请求默认值

一个系统的测试,需要重复输入http,ip等值,比较麻烦,可以在线程组中添加http默认值,后面再添加http请求时,就不需要填写http,IP,端口之列的数据了

步骤:线程组----添加--配置元件----http请求默认值

 

 

 

 3.集合点---同步定时器

集合点的目的:让各个线程(用户)步调一致,对系统进行加压

步骤:线程组---定时器---Synchronize timer

注意:定时器对那个请求进行集合点设置,就放在那个请求的下面,定时器会默认先进行集合,再一并发请求!

 

首先,对于网页,没有文档,只用用抓包工具,进行抓包,使用fiddler进行抓包

打开fiddler,设置过滤,只抓包一下域名/ip的数据

 

 

 

  进行数据抓包,结合页面信息+fiddler中的数据,把抓到的路径、请求参数等输入到jmeter中。

 

 

 

下面添加同步定时器(集合点),让所有的用户在同一时间点并发!

下面进行登录的并发!!!设置5个并发,在5s内完成,查看结果。

 

集合点参数设置的注意事项:

模拟用户组的数量,不大于线程组包含的用户数

①比如,线程组中的用户数是5个人,这里的参数设置是6,超时时间设置为0,运行时会一致等待集合到6个用户才会并发。

 

 

 

 

②如果设置参数是2,线程中的用户数是5,那就每集合2个用户并发一次,再集合2个,又并发一次。。。。。最后只剩一个,超时时间不设置的话,就会一直等。

设置超时时间,到了时间还没等到,就释放集合的线程,直接发送测试请求。

超时时间从什么时候开始计算?----线程组的5个用户,每集合2个用户为一组,第三组只有一个用户,从第二组结束开始计算,超时时间没有等到第三组的2个用户,就释放,直接发送测试请求。

 

 

③注意事项

 

总结: