[jmeter]Jmeter+ant实现接口自动化
1.安装jmeter 和ant
&环境变量配置百度去~
2.jmeter和ant关联
&将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到ant的lib目录下
&修改Jmeter的bin目录下jmeter.properties文件的配置:
jmeter.save.saveservice.output_format=xml
3.编写build文件
<?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-test" default="run" basedir="."> <tstamp> <format property="time" pattern="yyyyMMddhhmm" /> </tstamp> <!-- 需要改成自己本地的 Jmeter 目录--> <property name="jmeter.home" value="E:\apache-jmeter-3.3" /> <!-- jmeter生成jtl格式的结果报告的路径--> <property name="jmeter.result.jtl.dir" value="E:\apache-jmeter-3.3\report\jtl" /> <!-- jmeter生成html格式的结果报告的路径--> <property name="jmeter.result.html.dir" value="E:\apache-jmeter-3.3\report\html" /> <!-- 生成的报告的前缀--> <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" /> <target name="run"> <antcall target="test" /> <antcall target="report" /> </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="E:\apache-jmeter-3.3\bin\testCase" includes="*.jmx" /> <property name="jmeter.save.saveservice.output_format" value="xml"/> </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"> <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp> <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="${report.datestamp}"/> </xslt> <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> <copy todir="${jmeter.result.html.dir}"> <fileset dir="${jmeter.home}/extras"> <include name="collapse.png" /> <include name="expand.png" /> </fileset> </copy> </target> </project>
&配置相关的路径,然后dos下cd到有build的目录,执行ant即可
4.jmeter连接数据库包配置
&准备相关的包操作数据库JDBC
如果数据库是oracle,在客户端app/client/Administrator\product\12.1.0\client_1\jdbc\lib下的ojdbc6.jar放在jmeter下的jmeter-2.12\lib目录下(注:我当前jmeter版本是2.12,不同版本和数据库用的包不一致,具体百度)
加载ojdbc6.Jar后才能使用
5.打开jmeter添加组件—发请求
&准备相关的包操作数据库JDBC
如果数据库是oracle,在客户端app/client/Administrator\product\12.1.0\client_1\jdbc\lib下的ojdbc6.jar放在jmeter下的jmeter-2.12\lib目录下(注:我当前jmeter版本是2.12,不同版本和数据库用的包不一致,具体百度)
加载ojdbc6.Jar后才能使用
6.创建查看结果树、线程组、头文件、HTTP请求
添加察看结果树:项【目名】--右击添加--【监听器】--【察看结果树】(如图)
& 添加HTTP信息头管理器: 【项目名】--右击添加--【配置元件】--【HTTP信息头管理器】注:HTTP信息管理器添加头文件 (如图)
& 添加线程组:【项目名】--右击添加--【Threads(Users)】--【线程组】 (如图)
&添加http请求,【线程组】--右击添加--【Sampler】--【HTTP请求】
7.根据接口文档--登录请求(如图--登录接口)
8.接口返回响应数据(如图)
9.断言判断(接着登录接口)
&添加响应断言
填写预期的返回结果 例如判断返回数据是否为Code":2,再运行察看结果树
&查看断言结果
因为登录的结果是正确的返回code 1,设置的断言是code 2所以报错显示红色
10.正则提取器
登录后系统其他接口请求时都需要token或accessk等的一个签名认证,需要用正则取出登录接口返回数据里token和accesskey传递到其他接口
&正则简单运用取值
组件:【http请求】--右击添加--【后置处理器】--【正则提取器】
正则简单运用和测试是否取到token、accesskey方法一致(这个图务必放大看下)
写好的正则表达式放到正则提取器上填写相关信息(如图)
下一个接口引用变量的方式
& 查看正则取值结果
点击运行查看这个接口的token是否用正则写成功,引用的变量自动取值了(注:这个接口失败因为需要accesskey,这里只做示范所以没加accesskey,取值传递方法一致)
11.JDBC数据库取值传递参数
应用场景例如:注册、重置密码等接口需要从数据库把验证码取出来放到接口上发送请求
组件:jdbc配置原件 【项目名】--【右击添加】--【配置元件】--【JDBC Connection Configuration】
配置数据库(如图,针对oracle)
&数据库取值传递
重置密码接口例子@
&加载ojdbc6.jar包
& 添加一个jdbc requset组件 【线程组】--添加--【Sampler】--【jdbc request】
& 再做重置密码接口把上一步取的值赋值给重置密码接口数据库取值引用方式为 ${abc_1}
12.post上传json格式和list写法
&正常的上传json格式
接口文档:
根据参数说明编写如下格式:
{
"GOODS_TEL_TEXT":"13774469114",
"DEPARTMENT_TYPE":"5",
"GOODS_PASSWORD_TEXT":"dj123456",
"CLIENTID":"1",
"APP_VERSION_TEXT":"1",
"PHOME_MODEL_TEXT":"huawei",
"IP_ADDRESS":"1",
"clienttype":"2"
}
&list形式的json
字段写在list中,接口文档如下:
根据上传json字段,编写Json格式如下
{
“dataValue”:”[{ord_id_seq:123,acct_id:854}]”
}