Jmeter 后置处理器

如何获取HTTP请求 响应结果的数据? 此文以获取产品ID为例进行演示。

如下为请求相应数据中的部分数据,我们最终要获取的数据为:
productid=1602171116hezongjiaotong中的1602171116hezongjiaotong。

{productid=1602171116hezongjiaotong
productid=2016002100000000guoqibao
productid=201600210000000guahaobao
productid=201601060931huanqiuwuyou
productid=20160119142600luxingxiaa}

那么如何获取呢?Jmeter提供的后置处理器则为我们提供了获取方法。以下我们以正则表达式提取器为例进行说明,添加的路径为【添加/后置处理器/正则表达式提取器】,添加后目录结果如下:

对应添加的在正则表达式如下所示:

正则提取器说明:

  • Apply to:应用范围
  • 要检查的响应字段:样本数据源。
  • 引用名称:其他地方引用时的变量名称,引用方法:${引用名称}
  • 正则表达式:数据提取器,如上图的productid=(.*)不熟悉正则的,劳烦联系度娘或者谷大爷,谢谢!
  • 模板:对应正则表达式提取器类型,样式为:1。若为:0,则为所有的匹配数据,例如:productid=1602171116hezongjiaotong其中1602171116hezongjiaotong 为 (.*) 匹配的数据,即最终提取的目标部分。若模板为:1,则 1 对应正则表达式中的 (.+?)
  • 匹配数字:正则表达式匹配数据的最终结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。当为 0 时,随机返回匹配的数据,当为 1 时,表示返回匹配结果数组的第一个元素。
  • 缺省值:匹配失败时的默认值。通常用于后续的逻辑判断,一般通常为特定含义的英文大写单词组合,简单可写为 ERROR。

 

Jmeter 代理服务器设置

(一)设置Jmeter之web代理,操作步骤我们以gif图代替。

第一步:在“工作台”添加http代理服务器

第二步:添加一个线程组

第三步:在代理服务器上设置各项参数,并启动代理服务器

第四步:设置浏览器的代理,必须跟代理服务器 保持一样的参数

第五步:在浏览器操作,检查jmeter是否有录制相关操作。

第六步:设置浏览器代理。

第七步:选择就可以愉快的进行操作了。

(二)设置Jmeter之app代理,操作步骤如下所示:

第一步:设置jmeter代理服务器,与设置web代理的第五步一致

第二步:找到本机链接的ip地址:打开CMD命令行工具,输入ipconfig

第三步:

打开手机wifi设置,必须跟代理服务器 保持一样的参数

第四步:可以启动手机上任一app,可以看到所有的请求都被发送到jmeter了。

注意:第一:录制结束后,一定要去掉代理,否则你的浏览器、手机在代理断开后上不了网。

第二:手机必须跟jmeter代理服务器在同一网段内

Jmeter之定时器

简单来说一下,虽然我们常说的“多用户并发测试”,但是真正的并发是不存在的,为了更真实的模拟并发,我们采用集合点。比较常见的就是用户登录。下面我们就模拟多用户同时登录。

1、启动GUI界面,并添加登录接口

2、添加集合点

3、集合点用法

Number of Simulated Users to Group by:集合多少人后再执行请求(也就是执行的线程数)

注意:等同于设置为线程租中的线程数,一定要确保设置的值不大于它所在线程组包含的用户数。

Timeout in milliseconds:指定人数 多少秒没集合到算超时(设置延迟时间以毫秒为单位)

注意:如果设置Timeout in milliseconds为0,表示无超时时间,会一直等下去。
线程数量无法达到”Number of Simultaneous Users to Group by”中设置的值,那么Test将无限等待,除非手动终止。

4、查看结果树

至此,jmeter之定时器使用及配置告一段落。

Jmeter 分布式部署遇到的问题

1、远程启动测试,响应数据为空

远程运行jmeter脚本,主机无性能响应数据。如下图:

从机的jmeter server 显示链接后立即结束,看似执行实则未执行。

解决办法:

1、jmeter 脚本若有csv data configure测试数据,主机和从机两边都要存放。且从机中测试数据的存放路径和主机中的路径一定要保持一致。
 2、在原因1的基础上,主机的测试数据地址要用绝对路径,从机的测试数据绝对路径或相对路径均可。
2、从机若的Vm影响远程链接。如下图:

解决办法:

关闭虚拟机,并撤销共享盘。

原因是:从机安装有vm或将某个盘设置了共享权限的时候,主机在配置该从机时除IP地址外,虚拟机ip或者共享盘ip也会出现在远程连接待选列表中,连接时报错。

3、运行报:outofmemery错误

修改jmeter.bat设置的内存大小

解决办法:

修改D:\apache-jmeter-2.13\bin\jmeter.bat文件。

set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
改为:
set HEAP=-Xms256m -Xmx1024m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m
根据经验,heap最多设置为物理内存的一半,默认设置为512M.如果heap超过物理内存的一半,可能运行jmeter会慢,甚至出现内存溢出,原因java比较吃内存,占CPU。
4、主从机不在同一网段报:远程链接错误。如图:
解决办法:
1、主从机选择同一个网段内;
2、关闭从机的防火墙。
以上为我在jmeter分布式部署当中遇到的一些问题,在此做以说明。

Jmeter利用JDBC Connection Configuration从数据库读取数据并关联变量

1、下载mysql jar包

下载地址:http://pan.baidu.com/s/1c2bo8Q

密码:gh62

查看jar包支持的mysql版本:

http://dev.mysql.com/doc/connector-j/en/connector-j-versions.html

查看mysql数据库版本:SELECT VERSION();

注:如果下载的jar包版本不支持mysql数据库,运行Jmter时可能会报错:no suitable driver found for jdbc:mysql//……..

为Jmeter添加jar文件

下载后解压.zip文件,把mysql-connector-java-x.x.x-bin.jar(例中:mysql-connector-java-commercial-5.1.25-bin.jar)放到Jmeter安装目录下的lib目录下(例中:D:\Program Files\apache-jmeter-2.13\lib)
下面我将从数据库查询所有的产品id,并将产品id作为参数传入下一个请求。

步骤如下:

2、启动jmeter客户端,添加 JDBC Connection Configuration元件

右键线程组–>添加–>配置元件–>JDBC Connection Configuration。

配置如下图所示:

 

配置信息说明:

Database URL:jdbc:mysql://mysql_host_ip:mysql_port/mysql_db_name

JDBC Driver class:com.mysql.jdbc.Driver

username:数据库用户名

password:数据库密码

3、添加JDDBC REQUEST 元件

右键线程组–>添加–>sampler–>JDBC  REQUEST

配置如下图所示:

 

配置信息说明:

Variable name:此处填写添加jdbc connection configure时填写的变量名,以便建立关联

4、添加 后置处理器 元件

右键线程组–>添加后置处理器–>正则表达式

配置如下图所示:

 

本例中,我只提取前一个请求返回的产品id

5、添加sampler 元件。

目的:将前一个请求返回值作为参数传递给该请求

右键线程组–>添加–>sampler–>HTTP  REQUEST

配置如下图所示:

配置信息说明:

用${}来调用后置处理器的。此处的变量名填写后置处理器的引用名称,以便建立后置处理器与下一个请求之间的关联

6、添加结果树

目的:方便查看运行结果

右键线程组–>添加–>监听器–>查看结果树

7、运行测试计划。

运行测试计划。运行结果如下图:

至此,jmeter链接数据库以及关联变量到此结束。

 

jmeter windows下分布式部署

前提条件:

  1. 主从机在同一网段内
  2. 主从机关闭防火墙
  3. 主从机使用同一版本的jmeter、jmeter插件、jdk

主从机配置:

  1. 开始—->运行。输入cmd进入dos窗口,ipconfig获取从机ip地址
  2. 在主机找到Jmeter  bin目录下jmeter.properties文件,修改如下:
    •  remote_hosts=从机1ip地址:1099,从机2ip地址:1099
    • 注释掉如下行:server_port=1099;server.rmi.localport=1099
    • 其中:1099为jmeter默认端口,用户可自定义。

启动主从机:

  1. 从机启动jmeter-server.bat 脚本
  2. 主机启动jmeter.bat,并配置测试计划;若测试计划中含有csv data set config元件,则必须在从机的相同目录下拷贝一份csv的参数文件。
  3. 在jmeter  GUI界面,点击“运行—->远程启动  ”选择某一个从机来进启动,也可启动全都的从机

docker 实例

注:本章节所有的实例操作在window系统下!!!

nginx

在C:/Users目录下新建nginx_root目录,新建一个index.html文件,里面写个helloworld

docker run -it --name nginx -v /c/Users/nginx_root:/usr/share/nginx/html -p 80:80 nginx
docker-machine.exe ls

浏览器输入上面命令中的IP地址访问,显示helloworld

下面来解释一下
先进入这个镜像看看,另起一个终端

@FOR /f "tokens=*" %i IN ('docker-machine.exe env default') DO @%i
docker exec -it nginx bash
cat /etc/nginx/conf.d/default.conf

这里就是nginx的配置信息,上面/usr/share/nginx/html和端口号就是根据整理来的。

再来说说/c/Users/nginx_root这个地址

我们先打开virtualbox的客户端,default->设置->共享文件夹,可以看到 c/Users\ \?\c:\Users,然后我们进default系统

docker-machine.exe ssh default
ls /c/Users/

是不是发现本地c:\Users目录和default的c/Users做了一个映射,然后我们的镜像其实是在default的映射目录再挂载过来的目录,所以上面为什么写的是/c/Users/nginx_root,其实是c:\Users\nginx_root目录

流程是这样:
virtualbox的default系统挂载了本地系统的C:/users目录,目录为/c/Users
我们的nginx镜像挂载了default的/c/Users/nginx_root目录,目录为/usr/share/nginx/html
最终/usr/share/nginx/html挂载的是本地系统的C:/users/nginx_root目录

docker安装

一、centos6.x下安装docker

先更新系统

yum update

查看

uname -r

2.6.32-xx..x86_64

如果没有更新过内核应该是2.6.x-x的版本

升级内核。

我们用的是带aufs模块的3.10内核,自己编译太复杂,加一个源,找个现成的,操作如下:

vi /etc/yum.repos.d/hop5.repo

复制下面内容

[hop5]
name=www.hop5.in Centos Repository
baseurl=http://www.hop5.in/yum/el6/
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-HOP5

保存退出 :wq

安装 kernel-ml-aufs kernel-ml-aufs-devel

yum install kernel-ml-aufs kernel-ml-aufs-devel

装好重启,在启动页面选择3.10.x的内核

查看

uname -r

3.10.5-3.el6.x86_64

内核就升级好了。

接下来安装docker

6.x的版本源上没有docker.io,所以我们再增加一个源

yum install epel-release-6-8.noarch.rpm

然后

yun install docker-io

安装好后

service docker start

没有什么问题的话就算好了。有问题的话看红色字,是否有和你同样的问题

测试一下看看

docker run hello-world

出现

Hello from Docker!
This message shows that your installation appears to be working correctly.

就说明成功了!

如果出现 Error starting daemon: Couldn’t create Tag store: EOF 什么错误

rm -rf /var/lib/docker/repositories-devicemapper

如果出现 key.json 什么错误

rm -f /etc/docker/key.json

二、官方centos安装

参照https://docs.docker.com/engine/installation/linux/centos/

我没有按照这个流程,你们可以试试

三、window7安装

下载
virtualbox(https://www.virtualbox.org)
安装

下载
docker-machine
(https://github.com/docker/machine/releases/) 根据自己的系统下载32或64位
下载好后改个文件名,后面好操作
docker-machine-Windows-x86_64.exe -> docker-machine.exe

下载docker
(https://github.com/docker/docker/releases) 根据自己的系统下载32或64位

打开命令行:

docker-machine.exe create -d "virtualbox" default

慢慢等待,因为用的是virtualbox所以要下一个docker系统,通常比较慢,当前你也可以直接先下载,然后复制到docker的缓存目录,但是版本变了又要重新下,为了不产生新的麻烦,暂时就忍忍等待下完。

完了以后大概字样

To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine.exe env default

接下来运行

docker-machine.exe env default

这个命令只要是告诉你要怎么样来更新当前的环境变量,只要执行最后一句就可以了

SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\Administrator\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default1
SET COMPOSE_CONVERT_WINDOWS_PATHS=true
REM Run this command to configure your shell:
REM @FOR /f “tokens=*” %i IN (‘docker-machine.exe env default’) DO @%i

@FOR /f "tokens=*" %i IN ('docker-machine.exe env default') DO @%i

接下来就可以开始了,是不是很简单!

四、官方window7安装

参照https://docs.docker.com/docker-for-windows/

 

最后感谢网上各位朋友的教程文章。

特殊字符

♫♬♪♩♭♥♡☜☞◎♦◊◈☆❤ⓛⓞⓥⓔ╬『』☀。◕‿◕。の★▶☺☻►◄↔↕♦◊◦♠♣☆♂♀☎☏➸✱✿❆ღ゚ღ❆ﻬஐﻬ❆ღ゚ღ❆✿ﻬஐﻬ✿╰☆╮≈➽ⓛⓞⓥⓔஐ卐※ξ●•ღ&≈♣ஐ∞↘↙ωண✗↔∑∮々~εїз➽∩@の☼❤♡☊☋£☀☂→←Ψ¤╰☆╮)♂♀﹌оО❥♈♠♣☜☞➸∴。◕‿◕。✘✚★☆∷░▒☎⊹⊱⋛⋌⋚⊰⊹◕。oO.♥.:✿*゚¨゚゚・☀╮✔✕╬〓『』►◄【】〖〗☁凸◆◇▲△▼▽●〇◎◕‿-┱┲✣✤✥✦✧✩✫✬✭✮✯✰✱✲✳❃❂❁❀✿✾✽✼✻✺✹✸✷✶✵✴❄❅❆❇❈❉❊❋❖✱✲✳❃❂❁❀✿✾✽✼✻✺✹✸✷✶✵✴❄❅❆❇❈❉❊❋❖ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓆⓠⓡⓢⓣⓤⓥⓦⓧ№DêMЁ™㊚㊛㊣㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉㊊♠♣▣▤▥▦▩▨

跟着我来一起编译lfs(五) LFS系统配置

这章主要是对lfs的系统进行配置,这样大家就会更了解Linux配置文件的位置和配置内容,下面我们开始。


配置系统主机名称

echo "MYOS" > /etc/hostname

输出到/etc/hostname就可以了

自定义 /etc/hosts 文件

cat > /etc/hosts << "EOF"
# Begin /etc/hosts

127.0.0.1 <HOSTNAME.example.org> <HOSTNAME> localhost [alias1] [alias2] ...
::1       <HOSTNAME.example.org> <HOSTNAME> localhost [alias1] [alias2] ...

# End /etc/hosts
EOF

设备和模块管理
配置系统时间
设置本地时间

cat > /etc/adjtime << "EOF"
0.0 0 0.0
0
LOCAL
EOF

配置 Linux 控制台
/etc/vconsole.conf为配置文件
里面每一行内容格式为:VARIABLE=”value”
KEYMAP
此变量指定了键盘的按键映射表。如未设置,默认为 us。
KEYMAP_TOGGLE
此变量指定配置第二个切换键盘映射,默认不设置。
FONT
此变量指定虚拟控制台的字体。
FONT_MAP
此变量指定要使用的控制台映射。
FONT_UNIMAP
此变量指定 unicode 字体映射。
你也可以使用localectl命令来更改这些值
展示及个性化的设置这边就不多讨论了。

系统区域设置,字符集设置
/etc/locale.conf为配置文件

locale -a

查看系统支持的字符集
中国,我们就用中文

cat > /etc/locale.conf << "EOF"
LANG=zh_CN.utf8
EOF

你也可以使用localectl命令来更改这些值

键盘布局
一般我们用的都是普通的设置,如果有个性化,可以自行修改

cat > /etc/inputrc << "EOF"
# Begin /etc/inputrc
# Modified by Chris Lynn <roryo@roryo.dynup.net>

# Allow the command prompt to wrap to the next line
set horizontal-scroll-mode Off

# Enable 8bit input
set meta-flag On
set input-meta On

# Turns off 8th bit stripping
set convert-meta Off

# Keep the 8th bit for display
set output-meta On

# none, visible or audible
set bell-style none

# All of the following map the escape sequence of the value
# contained in the 1st argument to the readline specific functions
"\eOd": backward-word
"\eOc": forward-word

# for linux console
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert

# for xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line

# End /etc/inputrc
EOF

当前系统所有可用 shell 的列表文件设置

cat > /etc/shells << "EOF"
# Begin /etc/shells

/bin/sh
/bin/bash

# End /etc/shells
EOF

这里主要是一些特殊的命令需要这个列表来进行判断权限,否则不允许执行

Systemd 的用法与配置
/etc/systemd/system.conf为配置文件

创建 /etc/fstab 文件
这个文件的作用是让其它程序确定存储设备的默认挂载点、挂载参数和检查信息

cat > /etc/fstab << "EOF"
# Begin /etc/fstab

# file system  mount-point  type     options             dump  fsck
#                                                              order

/dev/sda1     /            ext4    defaults            1     1

# End /etc/fstab
EOF

Linux内核安装

cd sources/
tar xf linux-4.7.2.tar
cd linux-4.7.2
make mrproper
make menuconfig

打开页面后直接esc选择save

make
make modules_install
cp -v arch/x86/boot/bzImage /boot/vmlinuz-4.7.2-lfs-7.10-systemd
cp -v System.map /boot/System.map-4.7.2
cp -v .config /boot/config-4.7.2
install -d /usr/share/doc/linux-4.7.2
cp -r Documentation/* /usr/share/doc/linux-4.7.2

配置 Linux 模块加载顺序

install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf << "EOF"
# Begin /etc/modprobe.d/usb.conf

install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true

# End /etc/modprobe.d/usb.conf
EOF

使用 GRUB 设置启动过程
GRUB 命名约定,GRUB 对于硬盘和分区自有一套命名规则(hdN,M),其中 N 是硬盘数,M 是分区号。硬盘数 N 从 0 开始计数,分区数需要区别对待——主分区从 1 开始计数而扩展分区从 5 开始计数
执行下面的命令请看清楚,找到你创建lfs的硬盘,我是用的是sdb1,所以下面命令的参数是/dev/sda

grub-install /dev/sda
cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd0,1)

menuentry "GNU/Linux, Linux 4.7.2-lfs-7.10-systemd" {
        linux   /boot/vmlinuz-4.7.2-lfs-7.10-systemd root=/dev/sda1 ro
}
EOF

添加一些系统版本信息

cat > /etc/os-release << "EOF"
NAME="Linux From Scratch"
VERSION="7.10-systemd"
ID=lfs
PRETTY_NAME="Linux From Scratch 7.10-systemd"
VERSION_CODENAME="<your name here>"
EOF
echo 7.10-systemd > /etc/lfs-release
cat > /etc/lsb-release << "EOF"
DISTRIB_ID="Linux From Scratch"
DISTRIB_RELEASE="7.10-systemd"
DISTRIB_CODENAME="<your name here>"
DISTRIB_DESCRIPTION="Linux From Scratch"
EOF

好了,到这里恭喜你~~~~~系统做好了,一个自制的系统诞生了。想想就激动了,下面开始,最激动人心的时候

关闭虚拟机,开始启动,上图

启动,用户名root 密码没有直接回车~~~

好了~~终于进了~~

下一章,我们再继续配置一下这个新鲜的系统。