本篇博客
1 jmeter特点
2 jmeter安装启动
3 jmeter中的元件
4 jmeter实战
5 使用jmeter实现自动化接口测试
补充:jmeter具体实战操作:
https://www.cnblogs.com/zhangyangcheng/p/12630613.html
1 jmeter特点
jmeter有一下特点:
- 免费、开源的
- 纯java语言开发
- 需要安装jdk:java development kit
2 jmeter安装启动
jmeter安装启动步骤:
解压即可:apache-jmeter-2.13.tgz
目录
- bin:存放的是启动文件
- extras:里面存放的是实现接口自动化时的ant包
启动:在bin目录下双击jmeter.bat文件即可
保存:一定要选择最上面的测试计划进行保存。
3 jmeter中的元件
jmeter元件介绍:
测试计划:所有的请求或其他操作都存在测试计划中
线程组:所有的操作都属于一个线程
测试计划右键--添加--Threads(Users)--线程组(线程数就是并发数)
取样器sampler:存放的是请求
线程组右键--Sampler--HTTP请求
断言:对结果进行判断
右键线程组--添加--断言---响应断言
注意:响应断言和断言结果是配套使用的。
监听器:对结果进行收集
右键线程组--添加--监听器--察看结果树(查看返回值)
右键线程组--添加-----监听器----断言结果
添加cookie:避过登录,直接请求接口
线程组(添加)-----配置元件----HTTP Cookie 管理器
附加小知识:
请求结构
看到这里我们大致就明白了接口测试是怎么一回事了。接下来需要理解一下HTTP的URL是怎么组成为一个接口的。如图:
一个URL就是一个接口:接口大致会分为一下几个部分:
1.请求协议:
- http — 普通的http请求
- https — 加密的http请求,传输数据更加安全
- ftp — 文件传输协议,主要用来传输文件
2.请求IP:就是指提供接口的系统所部署的服务器地址
3.请求端口:如果不填端口,默认80,否则需要填写端口号
4.接口路径:指系统提供的接口在什么位置
5.接口参数:参数在接口路径后,用“?”来表示路径地址完了,剩下的都是参数了,用“&”来区分参数个数,
http请求方式
这时,我们需要一种规则:
当用“GET”方式时,只用来获取数据,成功了返回http状态码200
当用“POST”方式时,只用来创建数据,成功了返回http状态码201
当用“PUT”方式时,只用来修改数据,成功了返回http状态码203
当用“DELETE”方式时,只用来删除数据,成功了返回http状态码204
当请求发送失败,返回http状态码400
http请求头
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度。示例:
Accept:用于告诉服务器,客户机支持的数据类型
Accept-Language:客户机的语言环境
Connection:处理完这次请求后是否断开连接还是继续保持连接
Host:客户机通过这个头高速服务器,想访问的主机名
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境
Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式
http请求体
请求体就是请求等正文了,可以有很多种请求体。
- json格式
- xml格式
- html格式
- 二进制格式( 多数用于图片 )
- 字符串格式
看到上面的请求结构,就能接口测试了,只需要修改接口的参数,就可以像功能测试一样测了。可以用功能测试设计用例的方法来设计接口测试的用例。可以使用各种测试用具辅助测试,下图为“postman”测试工具。
Postman工具进行接口测试
get传参:
1:GET方式 2:参数在?后面,用&连接。 3:点击send 4:结果
post传参:
1. 选择POST传参
2. url http://192.168.44.133:8000/cart/update
3. Header中要填写 Content-Type:application/javascript
4:Body中选form-date :填写参数。
5:点击send。(下面的Body是发送后的结果。)
可以看到右边status状态:200 (接口成功)
6.保存
点击save把这条求情保存一下方便下次调试快速输入调用
我们做接口测试,需要开发提供接口文档。最重要的有一下几点:
1.被测接口的地址
2.接口参数,以及各个参数的说明
3.必要的http头与http体 ( http头是可以自定义的,可以用来校验是否是自己人访问 )
4.接口返回什么值,以及各个返回值的说明
5.接口是干什么的
前面的搞清楚了,接口测试就简单了,其实就是几个步骤。
1.拿到接口的url地址
2.查看接口是用什么方式发送
3.添加请求头,请求体
4.发送查看返回结果,校验返回结果是否正确
这个是正常的一套流程,异常的情况,就不用我多说来吧。比如参数不传值呀,传的值不正确呀,明明要求用"GET"请求发送,偏要用"POST"请求发送呀。等等有很多异常情况,一般懂功能测试都能想到很多的异常
情况,这里不再举例来。
接口测试用例
接口测试用例的设计就没什么好讲的了,与功能测试一样设计就好了。我是用Excel来编写的,主要是为了方便管理,只要写的干净,让人看的很舒服就好了。我自己设计的用例是这样的:
- 一个模块对应一个Excel表
- 一条接口对应一张sheet表
- 表中一行对应一条测试用例
- 在开始要注明测试时需要的sql,如下图开始我会创建用户,用完了我会删除
这样的用例比较好管理,如图:
4 jmeter实战
jmeter(GET,POST,三种参数化):
https://www.cnblogs.com/zhangyangcheng/p/12630613.html
4.1 get请求模拟
4.2 post请求模拟
4.3 接口间参数传递
场景:访问两个url。访问第一个url,返回usersession。访问第二个url,带着usersession参数访问。
(没有找到好的案例,所以知道原理就行,不用实现出来。)
正则表达式提取器:添加----后置处理器---正则表达式提取器
1)引用名称:变量名
2)正则表达式内容:通过左右边界的内容提取
3)模板:如果提取的参数有多个那么写相应的模板,如果为1个参数:$1$,如果为两个参数:$2$,参数为多个:$n$
4)匹配数字
0代表随机取,1取第一个,2取第二个..., -1取全部
5)缺省值
如果取出数据为空,则给默认值
使用变量:${变量名}
4.4 参数化
方式一、通过读取csv、txt文件获取数据
选中线程组--->配置元件--->CSV Data set config
1)填写内容
Filename:包括路径
变量名variable names
变量名之间用英文逗号隔开
2)然后使用${变量名}来读取文件每一列内容
注意:通过文件的行数来决定读取内容
方式二、通过函数助手读取csv、txt文件(顺序会乱)
选项菜单-->函数助手对话框--->__CSVRead函数
填写文件路径和列号(列号从0开始)
点击生成变量即可
注意:函数助手是按照不同用户读取文件内容
方式三、通过用户参数设置数据(顺序会乱)
选中线程组--->添加前置处理器中的用户参数选项
通过添加变量和用户来构造多条数据
注意:是由不同的用户决定读取的内容
5 使用jmeter实现自动化接口测试
5.1 配置Jmeter环境变量
JMETER_HOME:D:测试软件jmeterjme压缩apache-jmeter-2.13
Path:%JMETER_HOME%in
ClassPath:%JMETER_HOME%libextApacheJMeter_core.jar;%JMETER_HOME%libjorphan.jar;%JMETER_HOME%lib/logkit-2.0.jar;
验证是否配置成功:在dos窗口输入jmeter
注意:(JMETER_HOME这个是新建的,其余两个是编辑的。前面要加英文分号,如果有,就不加了)
环境变量相关配置
1.电脑桌面----》“计算机”图标----》鼠标右键选择“属性”----》点击高级系统设置----》高级---》环境变量页面
2.开始配置环境变量了。在系统变量框,点击“新建”,建立一个变量:JMETER_HOME,值为你解压的jmeter安装路径。我的安装路径:D:测试软件jmeterjme压缩apache-jmeter-2.13 。然后点击3次确定进行保存即可。注意:一定要选择系统变量进行修改。
3.在系统变量中找到Path,ClassPath变量,因为有其他值,在其后面进行添加下面的值即可。注意:要在前面分号。
Path:%JMETER_HOME%in
ClassPath:%JMETER_HOME%libextApacheJMeter_core.jar;%JMETER_HOME%libjorphan.jar;%JMETER_HOME%lib/logkit-2.0.jar;
4.验证环境变量配置的是否正确
第一种启动jmeter方式:cmd jmeter
会出现jmeter界面,说明就配置成功。因为都把jmeter启动起来了。
还第二种启动jmeter方式:首先进到你的jmeter安装路径,找到bin文件夹,点击进去,找到jmeter.bat双击
如果觉得麻烦,可以鼠标右键jmeter.bat,快捷方式发送电脑桌面,就会方便很多。
5.2 搭建自动化接口测试框架
创建如下目录结构:test
test下:ant data JmeterAutoTest
1)ant:放解压好的ant软件
2)data:放数据
3)JmeterAutoTest 下:
- app pc
pc下:
- resultlog script
resultlog下:
- html jtl (报告生成区)
script:脚本区
自动化接口测试框架---思维导图
5.3 安装以及配置ant环境变量
ANT_HOME: G:2020软件测试代码3_接口及性能测试接口测试day2项目框架 estantapacheAnt
Path: ;%ANT_HOME%in
CLASSPATH: ;%ANT_HOME%lib
验证是否配置成功:在dos 创建输入:ant -version
5.4 发送邮件&修改build.xml文件
1)3个jar文件拷到项目测试框架test---ant---lib文件下(发送邮件)
三个jar文件位置:F:2020软件测试第二版就业班6-20部分16_就业班之接口及性能测试(共82集)接口测试第二天5-拷贝文件
拷贝到这里。如果重复就替换
2)build.xml文件拷到pc目录下
build.xml文件位置:F:2020软件测试第二版就业班6-20部分16_就业班之接口及性能测试(共82集)接口测试第二天5-拷贝文件
通过build.xml文件,执行脚本,生成测试报告。
修改build.xml文件
可以通过notepad打开,有颜色比较好看。也可以pycharm直接打开。
1.改成自己本地的jmeter
<!-- 需要改成自己本地的 Jmeter 目录--> <property name="jmeter.home" value="D:测试软件jmeterjme压缩apache-jmeter-2.13" />
2.改成自己的jtl路径
<!-- jmeter生成jtl格式的结果报告的路径--> <property name="jmeter.result.jtl.dir" value="G:2020软件测试代码3_接口及性能测试接口测试day2项目框架 estJmeterAutoTestpc esultlogjtl" />
3.改成自己的html路径
<!-- jmeter生成html格式的结果报告的路径--> <property name="jmeter.result.html.dir" value="G:2020软件测试代码3_接口及性能测试接口测试day2项目框架 estJmeterAutoTestpc esultloghtml" />
4.project pc pc前目录。如果是移动端,可改成app
<project name="pc" default="all" basedir="G:2020软件测试代码3_接口及性能测试接口测试day2项目框架 estJmeterAutoTest">
发送邮件:还是改build.xml文件的东西。
5.发送邮件邮箱(我用的是qq邮箱),接受邮件邮箱(163邮箱)
<!-- 接收测试报告的邮箱 -->
<property name="mail_from" value="107****@qq.com" />
<property name="mail_to" value="yangcheng_2020@163.com" />
6.发送邮件的邮箱用户名,密码,端口
<mail mailhost="smtp.qq.com" mailport="587" subject="Test Report!" messagemimetype="text/html" user="1071****@qq.com" password="anrlvjalsdjklsbeae" >
qq邮箱的密码,就不是登陆的密码。而需要登陆qq邮箱,发送短信,去获取密码(授权码)。qq的端口:587。mailhost="smtp.qq.com"
注意:如果是163邮箱,密码直接是163邮箱登陆时的密码。端口是:25。可以百度查这些端口。
7.声明要运行的脚本路径
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本 --> <testplans dir="G:2020软件测试代码3_接口及性能测试接口测试day2项目框架 estJmeterAutoTestpcscript" />
build.xml完整代码
<?xml version="1.0" encoding="utf-8"?> <project name="pc" default="all" basedir="G:2020软件测试代码3_接口及性能测试接口测试day2项目框架 estJmeterAutoTest"> <tstamp> <format property="time" pattern="yyyyMMddhhmm" /> </tstamp> <!-- 需要改成自己本地的 Jmeter 目录--> <property name="jmeter.home" value="D:测试软件jmeterjme压缩apache-jmeter-2.13" /> <!-- jmeter生成jtl格式的结果报告的路径--> <property name="jmeter.result.jtl.dir" value="G:2020软件测试代码3_接口及性能测试接口测试day2项目框架 estJmeterAutoTestpc esultlogjtl" /> <!-- jmeter生成html格式的结果报告的路径--> <property name="jmeter.result.html.dir" value="G:2020软件测试代码3_接口及性能测试接口测试day2项目框架 estJmeterAutoTestpc esultloghtml" /> <!-- 生成的报告的前缀 --> <property name="ReportName" value="TestReport" /> <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /> <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" /> <!-- 接收测试报告的邮箱 --> <property name="mail_from" value="1071183139@qq.com" /> <property name="mail_to" value="yangcheng_2020@163.com" /> <!-- 电脑地址 --> <!-- <property name="ComputerName" value="jkqsh-l0285" />--> <target name="all"> <antcall target="test" /> <antcall target="report" /> <antcall target="send" /> </target> <target name="test"> <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本 --> <testplans dir="G:2020软件测试代码3_接口及性能测试接口测试day2项目框架 estJmeterAutoTestpcscript" /> </jmeter> </target> <path id="xslt.classpath"> <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/> <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> </path> <target name="report"> <xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"> <param name="dateReport" expression="${time}"/> </xslt> <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> <copy todir="${jmeter.result.html.dir}"> <fileset dir="${jmeter.home}/extras"> <include name="collapse.png" /> <include name="expand.png" /> </fileset> </copy> </target> <!-- 发送邮件 --> <target name="send" > <mail mailhost="smtp.qq.com" mailport="587" subject="Test Report!" messagemimetype="text/html" user="1071183139@qq.com" password="anrlvvqiusgibeae" > <from address="${mail_from}"/> <to address="${mail_to}"/> <message>This email was sent automatically by ANT. Please check the automation test report. Thank you!</message> <attachments> <fileset dir="${jmeter.result.html.dir}"> <include name="${ReportName}${time}.html"/> </fileset> </attachments> </mail> </target> </project>
8.启动ant 执行脚本:cmd 先进入盘符:G: 然后cd进入pc目录下 输入ant 执行脚本,会生成测试报告(下面发送邮件配置好后,也是这样执行。会生成测试报告,并发送邮件。)
接受邮箱就会有一封新的邮件
qq设置获取密码:
1)登录电脑版QQ邮箱,选择最上方的“设置”
2)如图选择“账户”,切换到账户详情页面。
3)在账户页面往下拉,可以看到smtp设置,选择“开启”。
4) 按照弹出的窗口提示操作进行密保验证。有多种方式可以验证,比如手机令牌等。推荐使用短信验证。
5)按照短信验证的提示发送短信。发送成功后直接点击“我已发送”。
6)弹出的提示中直接显示16位的授权码,可以复制下来,或者是记下来,千万不要记错了。然后点击“确定”。
以上就完成了qq密码(授权码)的获取。
注意:jmeter写好的脚本,保存为自动化测试框架的script目录下。
升级:ant只能执行一个,不能批量的进行。如果想再执行,需要还得再运行一下ant。使用下面的jenkins可以每隔多长时间执行一次。
5.5 使用jenkins实现持续集成
使用jenkins是为了定时执行脚本。
将jenkins(是一个网站)搭建在tomcat(服务器)下
1)需要安装tomcat:解压tomcat7.rar,解压完就安装好了。
2)jenkins.war复制到:D:测试软件jmeter omcat压缩tomcat7webapps
注意:如果有选择替换就可以。本篇博客其余处要拷贝的也是这样。
3)启动tomcat----bin-----startup.bat(双击)
出现running,说明运行成功。
tomcat闪退、启动失败原因
1)端口被占用
修改tomcat端口
tomcat7-->conf-->server.xml文件--->在该文件下将默认的8080端口修改即可
例如:port:8090
2)异常退出
正确退出方法:1.ctrl+c命令 2.在tomcat7的bin目录下点击shutdown.bat
使用jenkins的步奏:
1.先启动tomcat----bin-----startup.bat(双击)
2.输入网址:http://ip:端口/jenkins
http://localhost:8080/jenkins/
jenkin构建任务
1)新建-->输入item名称,选择“构建一个自由风格的软件项目”
2)构建触发器
有三种形式:
- Build after other projects are built:另一个项目结束之后再执行
- Build periodically:指定多长时间执行
- Poll SCM:多久去svn拉一次代码
这里选择Build periodically
定义脚本执行的频率
日程表:H/2 * * * *(表示每2分钟执行),下面也有表示时间示例提示。
3)构建--->选择invoke ant--->高级----在build file位置输入build.xml文件的路径,保存
4)点击返回面板,选中该任务-->选择立即构建即可。就可以调用ant,执行打包过程。在这里,也就是执行生成测试报告的步骤
pc-html中生成的测试报告:
补充:
测试软件的安装:F:2020软件测试第二版就业班6-20部分16_就业班之接口及性能测试(共82集)接口测试第一天自动化接口软件
jmeter+ant+jenkins安装位置:D:测试软件jmeter