Apache JMeter™应用程序是开放源码软件,它是一个100%纯Java应用程序,用于加载测试功能行为和度量性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。
下载地址: http://jmeter.apache.org/download_jmeter.cgi
版本:5.1.1
Apache Ant是一个Java库和命令行工具,其任务是将构建文件中描述的进程作为相互依赖的目标和扩展点来驱动。Ant的主要用途是构建Java应用程序。Ant提供了许多内置任务,允许编译、组装、测试和运行Java应用程序。Ant还可以有效地用于构建非Java应用程序,例如C或c++应用程序。更一般地说,Ant可以用于试验任何类型的流程,这些流程可以根据目标和任务进行描述。
下载地址: https://ant.apache.org/bindownload.cgi
版本: 1.9.14
Jenkins是一个屡获殊荣的跨平台、持续集成和持续交付的应用程序,它可以提高您的工作效率。使用Jenkins来构建和测试您的软件项目,使开发人员更容易地将更改集成到项目中,并使用户更容易地获得新的构建。它还允许您通过提供定义构建管道的强大方法以及与大量测试和部署技术的集成来持续交付软件(本文不暂时不叙述更多有关于jenkins内容)。
需求: 自动化测试可行的方法以及实现(每次发布,每天早上6点都会进行服务自动化脚本测试)
可行方案:首先后端接口自动测试需要将测试的接口和参数以及规则事先定义存入Excel中,后面根据定义好的数据请求响应接口,根据请求返回值判断请求是否成功。
1.在 jmeter 5.1.1解压路径下的目录下\apache-jmeter-5.1.1\bin找到jmeter.properties文件。
2.编辑jmeter.properties文件,增加以下配置。
#增加自定义的属性信息的配置文件
user.properties=user.properties
#增加依赖的jar包文件路径
plugin_dependency_paths=../lib/dependences
#保存输出xml格式文档
jmeter.save.saveservice.output_format=xml
同级目录下的user.properties文件定义如下变量:
#发送请求的登陆url地址
TEST_USER_LOGIN_URL = 192.168.2.101
#登陆账号
TEST_USER_USERNAME = huzx
#登陆密码
TEST_USER_PASSWORD = 1
#jmeter相关文件的根目录
home_dir = D:\\API
#发送请求的url
test_host = 192.168.2.101
首先在测试计划中新建一个线程组 —>线程组下新建一个全局变量、新建两个个http请求、新建一个前置处理、新建一个前置处理器bean shell、新建一个循环控制器、新建一个结果树。
获取token。分两个请求,第一个首先获取并提取code和state,再根据code和state获取token并提取,响应断言,根据返回参数status判断请求是否成功。
拿到code和state去请求获取access-token。
编写一个前置处理器的Bean Shell 预处理脚本 ----》读取***.xlsx的Excel文件,获取excel中总条数,并存到变量row中,-1是为了减去Excel首行定义数据。
代码:
import upanda.*;
String path=vars.get("test_data");
log.info(path);
String data = Test2.getRowNum(path);
String row = String.valueOf(Integer.parseInt(data)-1);
vars.put("row",row);
log.info(row);
自己打的第三方工具包zzz-1.0-SNAPSHOT.jar。
Test2.getRow(path)方法代码
package upanda;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Test2 {
public static String getRowNum(String path){
InputStream is = null;
try {
is = new FileInputStream(path);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
XSSFWorkbook wb = null;
try {
wb = new XSSFWorkbook(is);
} catch (IOException e) {
e.printStackTrace();
}
Sheet sheet = wb.getSheet("测试");
int rowsnum = sheet.getPhysicalNumberOfRows();
System.out.println(rowsnum);
try {
is.close();
wb.close();
} catch (IOException e) {
e.printStackTrace();
}
return String.valueOf(rowsnum);
}
}
代码:
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.InputStream;
String path=vars.get("test_data");
log.info(path);
String rownum=vars.get("rownum");
log.info("rownum"+rownum);
int i;
int k=0;
String [] datalist=new String[20];
String content;
int row = Integer.parseInt(rownum);
log.info("row"+row);
InputStream is = new FileInputStream(path);
log.info("is"+is);
Workbook wb = new XSSFWorkbook(is);
log.info("wb"+wb);
Sheet sheet = wb.getSheetAt(0);
log.info("sheet"+sheet);
Row row1 = sheet.getRow(row);
//9是因为我表格就是8列的
for(i=0;i<8;i++){
//表格中5-6的两行不取
if (i!=4&&i!=5){
Cell oCell= row1.getCell(i);
content=oCell.getStringCellValue();
datalist[k]=content;
k++;
}
}
//标识
vars.put("load",datalist[0]);
//用例名称
vars.put("testcase",datalist[1]);
//接口
vars.put("inter",datalist[2]);
//请求方法
vars.put("method",datalist[3]);
//请求数据
vars.put("request",datalist[4]);
///断言校验
vars.put("response",datalist[5]);
log.info(datalist[0]);
log.info(datalist[1]);
log.info(datalist[2]);
log.info(datalist[3]);
log.info(datalist[4]);
log.info(datalist[5]);
根据Execl中的执行标识判断是否为yes, 判断是否发送请求。
编写build.xml文件
<project name="JmeterTest" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
tstamp>
<property name="jmeter.home" value="D:\apache-jmeter-5.1.1" />
<property name="jmeter.result.jtl.dir" value="D:\API\report\jtl" />
<property name="jmeter.result.html.dir" value="D:\API\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" />
<property name="ComputerName" value="upanda" />
<target name="all">
<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}">
<testplans dir="D:\API\jmx" includes="*.jmx" />
jmeter>
target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan-2.7.2.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="${ReportName}${time}"/>
xslt>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
fileset>
copy>
target>
project>
执行ant命令,就可以自动生成html测试报告。
ant -f build.xml
至于集成jenkins执行shell脚本,然后将生成的测试报告可以通过邮件或者钉钉等进行推送。这个可在后面分享jenkins的可持续集成可持续部署进行分享。