一个声明
北京百测技术咨询有限公司
我们这个轻量级接口测试框架,会用到一些其他知识点,在这里我们不
做重点说明,不知道的同学下去自己学习或者以后我们在加以说明。
这些知识点包括:
1、jmeter的使用
2、接口测试
3、ant
4、tomcat部署
环境和工具的准备
北京百测技术咨询有限公司
1、Jenkins
2、JDK
3、Ant
载地址:http://ant.apache.org/bindownload.cgi
ANT_HOME是ant的安装目录
path的值:%ANT_HOME%\bin;%ANT_HOME%\lib
验证:ant -version
Ant调用jmeter接口
1、安装好Ant和Jmeter。
2、完成一个Jmeter接口脚本,并保证是正确的。
3、将Jmeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到Ant所在目录lib子目录下
4、将jmeter.results.shanhe.me.xsl放到jmeter的extras目录下。
5、修改jmeter目录下的bin/jmeter.properties,找到jmeter.save.saveservice.output_format,去掉注释并设置为xml。
6、创建脚本目录
![](https://img2018.cnblogs.com/blog/1445954/201905/1445954-20190518151947130-258158565.png)
脚本目录作用
1、jmeter_test文件夹下有result_log和script连个子目录和build.xml文件。
2、script目录用来存放jmeter脚本的。
3、build.xml文件是ant的核心配置文件。
4、result_log文件夹下有html和jtl两个子目录。
5、jtl目录用来存放jmeter生成的结果文件。
6、html用来存放最后生成的测试报告(html类型)。
Jenkins的安装
1、将jenkins.war复制到tomcat下的webapps目录下
2、启动tomcat。
3、访问地址:http://ip:port/jenkins
Jenkins配置
1、配置JDK
2、配置Ant
3、下载插件 Ant Plugin
4、下载插件 HTML Publisher Plugin
5、下载插件 Email Extension Plugin
Jmeter集成ant+jmeter
1、创建一个自由风格的job。
2、配置构建步骤-ant。
3、配置build.xml的路径。
4、增加构建后步骤-html和email。HTML显示问题解决方案
北京百测技术咨询有限公司
1、点击系统管理。
2、点击脚本命令行。
3、输入如下命令。
System.setProperty("hudson.model.DirectoryBrowserSupport.
CSP", "")
4、点击运行。BeanShell是什么
BeanShell是一个小型嵌入式Java源代码解释器。
具有对象脚本语言特性,能够动态地执行标准JAVA语法,
并利用在JavaScript和Perl中常见的的松散类型、命令、
闭包等通用脚本来对其进行拓展。
BeanShell不仅仅可以通过运行其内部的脚本来处理Java
应用程序,还可以在运行过程中动态执行你java应用程序
执行java代码。
因为BeanShell是用java写的,运行在同一个虚拟机的应
用程序,因此可以自由地引用对象脚本并返回结果。BeanShell特点
北京百测技术咨询有限公司
完整的java语法的动态执行,java代码片段,以及松散
类型的java和其他脚本。
透明地访问所有java对象和API
可以在安全约束的环境中工作Beanshell-下载
下载地址:http://www.beanshell.org
BeanShell-运行方式
Java –jar XXX.jar 直接运行
界面UI方式:java bsh.Console
命令行方式:java bsh.Interpreter
运行脚本文件:java bsh.Interpreter filename [args]BeanShell-常用命令
print() 输出内容到命令行中。
show(),自动显示你打入的每一行。
source()读一个bsh脚本到当前解释器(interpreter)中,
或者在新的解释器中运行这个脚本
标注:BeanShell命令并不是真正的内建的(built-in),
而是从classpath自动加载的简单的BeanShell脚本,
你可以向classpath中添加自己的脚本来扩展基本的
命令集。Jmeter-添加变量
import java.util.*;
import java.text.*;
String str = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss").format(new Date());
vars.put("str1",str);Jmeter-自定义函数
import java.util.*;
import java.text.*;
getDateStr(String format){
DateFormat df = new SimpleDateFormat(format);
return df.format(new Date());
}
dateStr = getDateStr("yyyy-MM-dd");
print(dateStr);
var.put("current_date",dateStr);Jmeter-引入Java文件
public class TestBeanShell {
public int add(int a,int b){
return a+b;
}
}
source("/Users/zhaowei/Desktop/TestBeanShell.java");
test=new TestBeanShell();
t = test.add(5,6);
print(t);Jmeter-导入外部jar包
步骤为:
·在eclipse写好代码,然后把该类打成jar包(在类上点击右键-
>Export->jar file)
·把jar包放到jmeter目录\apache-jmeter-2.13\lib\ext下
·打开jmeter,添加一个http sampler,在sampler下添加一个
BeanShell Sampler。
·在BeanShell中的头文件中导入该jar包,例
import testmail.src.hyq.utils.*Jmeter-常用内置变量
1、log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
2、ctx(JMeterContext):该变量引用了当前线程的上下文。
3、vars(JMeterVariables) :操作jmeter变量,常用方法:
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
4、props - (JMeterProperties):操作jmeter属性,该变量引用了JMeter的配置信
息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去
String类型的值,而不能是一个对象。
5、prev - (SampleResult):获取前面的sample返回的信息,常用方法:
a) getResponseDataAsString():获取响应信息
b) getResponseCode() :获取响应code
c) setDataEncoding(String dataEncoding) :设置响应结果的编码Jmeter-BeanShell组件
BeanShell PreProcessor
提前处理请求参数,如:图片处理,加密解密等
BeanShell PostProcessor
在请求后对返回结果进行处理
BeanShell断言
验证返回结果的正确性
BeanShell SamplerJmeter-BeanShell Sampler
//source("C:\\Users\\zhaowei\\Desktop\\TestJar.jar"); 不能导入jar包
source("C:\\Users\\zhaowei\\IdeaProjects\\TestJar\\src\\com\\besttest\\
util\\HelloWorld.java");
import java.util.*;
import java.text.*;
String str = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss").format(new Date());
vars.put("str",str);
String hello = new HelloWorld().getToken();
vars.put("hello",hello);Jmeter-BeanShell PreProcessor
import util.*;
import org.apache.axis.encoding.Base64;
import org.apache.commons.io.IOUtils;
InputStream input = new
FileInputStream("C:\\Users\\zhaowei\\Desktop\\zw\\bt\\jenkins_ant_jmeter\\
软件\\image-0082.jpg");
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(input, output);
byte[] array = output.toByteArray();
String post_image = Base64.encode(array);
vars.put("image",post_image);Jmeter-BeanShell PostProcessor
import java.io.*;
import java.util.zip.*;
byte[] bytes = prev.getResponseData();
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
try {
GZIPInputStream ungzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = ungzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
gzip_str = out.toString("utf-8");
log.info("result-ungzip:"+gzip_str);
} catch (Exception e) {
e.printStackTrace();
log.info(e.getMessage());
}Jmeter-BeanShell断言
int time = Integer.parseInt(vars.get("time"));
log.info("time:>>>"+time);
if(time>1000) {
Failure = true;
FailureMessage = "验证失败,time:"+time;
}else{
FailureMessage = "验证成功";
}