JMeter之单接口性能测试

1、简述

在使用JMeter之前各类性能测试之前,我们需要了解简单的使用方法,在此也顺便整合复习一下网络协议。对于接口性能测试而言,我们需要明白在不同角色眼中接口的定义是不同的。

  • 开发人员:模块与模块之间的对接定义方式
  • 测试人员:可以独立部署成服务的协议接口

2、HTTP协议基本介绍了解

既然测试人员眼中的接口为协议接口,那么就需要先了解一下常见的协议:

  • HTTP:超文本传输协议           -应用层
  • HTTPS:安全超文本传输协议  -应用层
  • FTP:文件传输协议                 -应用层
  • TCP:网络控制协议                -传输层
  • IP:互联网协议                        -网络层
  • UDP:用户数据协议                -传输层

除了以上的常用协议之外,还有很多不常用的协议,在此就不多赘述。在此处将详细介绍前两者协议。

HTTP和HTTPS的区别:

由图可知,虽然两者在网络层和数据层使用的协议是一致的,但是HTTP协议的传输层中使用的是TCP协议,HTTPS协议使用的是加密的SSL/TLS协议,所以在测试这两者的时候的方法不一定能够共用,需要根据实际情况考虑。

image.png

HTTP协议的响应码:

没什么好说的,基础知识,记住就完事了

分类分类描述
1**通知,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,客户请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

HTTP请求响应模型/生命周期:

在这里介绍了一次通用的HTTP请求及响应的过程,也可以说成是一次请求的生命周期。一次完整的请求过程一般分为一下几步:

  1. 客户端发起请求到API接口层
    1. 例子:客户在前端填写用户名和密码,点击登录,发送请求
  1. API接收到客户端发起的用户请求
    1. API对业务逻辑进行验证
  1. API将客户的数据返回给Db层
    1. Db层根据请求进行CRUD操作
  1. Db将返回的结果状态码传输给API
  2. API向客户返回结果给客户端

 

image.png

常用的HTTP请求方法:

方法描述
GET请求指定的页面信息,并返回实体主体。
HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT从客户端向服务器传送的数据取代指定的文档的内容。
DELETE请求服务器删除指定的页面。
CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS允许客户端查看服务器的性能。
TRACE回显服务器收到的请求,主要用于测试或诊断。
PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

GET与POST的区别:

  • GET重点从服务器上获取资源
  • POST重点向服务器发送数据

 

  • GET传输数据是通过URL请求,置于URL后,并用”?”连接,多个请求数据间用”&”连接
  • POST传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;

 

  • Get传输的数据量小,因为受URL长度限制,但效率较高
  • POST可以传输大量数据,所以上传文件时只能用Post方式

 

  • GET是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;
  • POST较get安全性较高;

 

  • GET方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。
  • POST支持标准字符集,可以正确传递中文字符。

3、 JMeter的get请求介绍及使用

JMeter的功能非常强大,一般用来实现包括但不限于以下功能的测试:

  • BS架构应用测试
  • HTTP协议接口功能与性能
  • FTP协议接口性能与性能
  • Mysql数据库性能
  • MongoDB数据库性能
  • 支持自定义java组件开发

1、新增测试接口

新建一个spring-boot框架的项目,参考流程

  1. 下载IDEA

  1. 新建maven项目

image.png

  1. 增加pom.xml依赖项,并下载。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.udeam.springboot</groupId>
    <artifactId>udeam</artifactId>
    <version>0.0.1</version>
    <packaging>jar</packaging>

    <name>udeam</name>
    <description></description>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>


    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>
  1. 创建入口application
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class,args);
    }
}
  1. 新建控制器controller
@RestController
@RequestMapping("/demoAPI")
public class newController {

    @RequestMapping(value = "/getDemo/{userName}",method = RequestMethod.GET)
    public String getDemo(@PathVariable String userName){
        return userName;
    }
    @RequestMapping(value = "/postDemo",method = RequestMethod.POST)
    public int postDemo(@RequestParam String userName){
        return 2;
    }
}
  1. 启动web服务

image.png

 

2、JMeter的使用过程

1.安装JMeter

2.打开JMeter,新建测试计划

3.新建线程组

image.png
image.png

4.新建HTTP请求-用于发送请求

image.png

image.png

5. 添加监听器-用于查看结果

image.png
image.png

3、JMeter常见的问题以及解决方法

1、响应数据乱码问题

image.png

在结果树当中,响应数据返回的数据为乱码,此时可以从几个方面入手考虑:

  1. 在HTTP请求的Content encoding的配置项当中填写UTF-8,可以解决部分问题。
  2. 如果第一种方法无效,可以在JMeter安装目录,找到jmeter.properties文件(启动配置项文件),打开之后搜索sampleresult.default.encoding配置,将值改为UTF-8。重新打开JMeter即可。
  3. 在后置处理器当中,选择BeanShell PostProcessor,在其中输入代码,即可改变结果树的字符编码格式:
prev.setDataEncoding("UTF-8")

image.png

4、JMeter使用帮助

1、参数化-函数助手的使用

在使用JMeter当中,我们会遇到很多情况,例如尝试多组数据登陆,我们需要将数据放在一个文件当中,然后使用文件进行提供数据,来对接口进行大量数据的验证。

image.png

在这里可以使用__CSVRead来读取文件当中的数据,将生成的函数路径复制到需要发送的路径。再设置好线程组的相关参数即可实现读取每一行的数据的效果。

image.png

 

4、JMeter的post请求介绍及使用

1、使用JMeter对map格式KEY:VALUE型的POST接口进行测试

重新新建一个测试计划,使用上面新增的POST测试接口进行测试,同时也可以使用上述的参数化格式来进行,如图所示:

image.png

image.png

2、使用JMeter对 JSON型格式的POST接口进行测试

在上述的代码当中,重新定义一个post的接口,整体结构如下:

package com.power.Controller;

public class Student {

    public String name;
    public String clazz;

    @Override
    public String toString() {
        return "Student{"+
                "name='" + name +'\'' +
                ", clazz='" + clazz + '\''+
                '}';
    }
}

image.png

@RequestMapping(value = "/postJsonDemo",method = RequestMethod.POST)
    public @ResponseBody Student postJsonDemo (@RequestBody Student s){
        Student student = new Student();
        student.name = s.name;
        student.clazz = s.clazz;
        return student;
    }

image.png

在对此接口进行测试时,需要注意的是,需要传入json格式的数据。

image.png
image.png

但是此时,我们发现在结果树当中,返回的却是415错误,这时我们需要在头信息里面加入传输的类型,在此为了防止此错误,我们需要使用HTTP头管理器,在其中加入类型Content-Type:application/json即可。

image.png

image.png

image.png

 

 

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值