jmeter+ant+jenkins自动化接口测试搭建

自动化接口测试搭建

文章目录

  • **自动化接口测试搭建**
    • 1. 环境介绍 jmeter+ant+jenkins
      • 1.1 jmeter介绍
      • 1.2 ant介绍
      • 1.3 jenkins介绍
    • 2. 总体设计思路
    • 3. jmeter 的实现
      • 3.1 准备工作
      • 3.2 具体实现
    • 4.jmeter集成ant的实现

1. 环境介绍 jmeter+ant+jenkins

1.1 jmeter介绍

​ Apache JMeter™应用程序是开放源码软件,它是一个100%纯Java应用程序,用于加载测试功能行为和度量性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。

下载地址: http://jmeter.apache.org/download_jmeter.cgi

版本:5.1.1

1.2 ant介绍

​ Apache Ant是一个Java库和命令行工具,其任务是将构建文件中描述的进程作为相互依赖的目标和扩展点来驱动。Ant的主要用途是构建Java应用程序。Ant提供了许多内置任务,允许编译、组装、测试和运行Java应用程序。Ant还可以有效地用于构建非Java应用程序,例如C或c++应用程序。更一般地说,Ant可以用于试验任何类型的流程,这些流程可以根据目标和任务进行描述。

下载地址: https://ant.apache.org/bindownload.cgi

版本: 1.9.14

1.3 jenkins介绍

​ Jenkins是一个屡获殊荣的跨平台、持续集成和持续交付的应用程序,它可以提高您的工作效率。使用Jenkins来构建和测试您的软件项目,使开发人员更容易地将更改集成到项目中,并使用户更容易地获得新的构建。它还允许您通过提供定义构建管道的强大方法以及与大量测试和部署技术的集成来持续交付软件(本文不暂时不叙述更多有关于jenkins内容)。

2. 总体设计思路

​ 需求: 自动化测试可行的方法以及实现(每次发布,每天早上6点都会进行服务自动化脚本测试)

​ 可行方案:首先后端接口自动测试需要将测试的接口和参数以及规则事先定义存入Excel中,后面根据定义好的数据请求响应接口,根据请求返回值判断请求是否成功。

总体设计思路图:
jmeter+ant+jenkins自动化接口测试搭建_第1张图片

3. jmeter 的实现

3.1 准备工作

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

dependences依赖如下:
jmeter+ant+jenkins自动化接口测试搭建_第2张图片

同级目录下的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

3.2 具体实现

​ 首先在测试计划中新建一个线程组 —>线程组下新建一个全局变量、新建两个个http请求、新建一个前置处理、新建一个前置处理器bean shell、新建一个循环控制器、新建一个结果树。

  1. 新建全局变量,获取自定义配置文件中的的变量信息。

在这里插入图片描述

  1. 获取token。分两个请求,第一个首先获取并提取code和state,再根据code和state获取token并提取,响应断言,根据返回参数status判断请求是否成功。

    http信息头管理器配置Content-Type 为application/json
    在这里插入图片描述
    获取code和state:

jmeter+ant+jenkins自动化接口测试搭建_第3张图片

提取code和state:
jmeter+ant+jenkins自动化接口测试搭建_第4张图片

响应断言判断请求是否成功,后面的请求断言大部分相似。
jmeter+ant+jenkins自动化接口测试搭建_第5张图片

拿到code和state去请求获取access-token。

在这里插入图片描述
jmeter+ant+jenkins自动化接口测试搭建_第6张图片

  1. 编写一个前置处理器的Bean Shell 预处理脚本 ----》读取***.xlsx的Excel文件,获取excel中总条数,并存到变量row中,-1是为了减去Excel首行定义数据。
    jmeter+ant+jenkins自动化接口测试搭建_第7张图片
    代码:

    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);
    }


}

  1. 循环控制器,根据Excel总行数定义循环次数,根据每一行数据发送请求。

jmeter+ant+jenkins自动化接口测试搭建_第8张图片

根据计数器获取Excel哪一行数据,并发送该数据的请求
jmeter+ant+jenkins自动化接口测试搭建_第9张图片

​ 获取Excel哪一行数据
jmeter+ant+jenkins自动化接口测试搭建_第10张图片

代码:

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, 判断是否发送请求。

jmeter+ant+jenkins自动化接口测试搭建_第11张图片

判断请求是否为post,发送post请求。
jmeter+ant+jenkins自动化接口测试搭建_第12张图片

请求头信息。
jmeter+ant+jenkins自动化接口测试搭建_第13张图片

发送Post请求。
jmeter+ant+jenkins自动化接口测试搭建_第14张图片

查看结果树可以查看每一次请求的详细信息。
jmeter+ant+jenkins自动化接口测试搭建_第15张图片

4.jmeter集成ant的实现

编写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的可持续集成可持续部署进行分享。

你可能感兴趣的:(自动化测试,jmeter,java,linux)