1、简述
在使用JMeter之前各类性能测试之前,我们需要了解简单的使用方法,在此也顺便整合复习一下网络协议。对于接口性能测试而言,我们需要明白在不同角色眼中接口的定义是不同的。
- 开发人员:模块与模块之间的对接定义方式
- 测试人员:可以独立部署成服务的协议接口
2、HTTP协议基本介绍了解
既然测试人员眼中的接口为协议接口,那么就需要先了解一下常见的协议:
- HTTP:超文本传输协议 -应用层
- HTTPS:安全超文本传输协议 -应用层
- FTP:文件传输协议 -应用层
- TCP:网络控制协议 -传输层
- IP:互联网协议 -网络层
- UDP:用户数据协议 -传输层
除了以上的常用协议之外,还有很多不常用的协议,在此就不多赘述。在此处将详细介绍前两者协议。
HTTP和HTTPS的区别:
由图可知,虽然两者在网络层和数据层使用的协议是一致的,但是HTTP协议的传输层中使用的是TCP协议,HTTPS协议使用的是加密的SSL/TLS协议,所以在测试这两者的时候的方法不一定能够共用,需要根据实际情况考虑。
HTTP协议的响应码:
没什么好说的,基础知识,记住就完事了
分类 | 分类描述 |
1** | 通知,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,客户请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
HTTP请求响应模型/生命周期:
在这里介绍了一次通用的HTTP请求及响应的过程,也可以说成是一次请求的生命周期。一次完整的请求过程一般分为一下几步:
- 客户端发起请求到API接口层
-
- 例子:客户在前端填写用户名和密码,点击登录,发送请求
- API接收到客户端发起的用户请求
-
- API对业务逻辑进行验证
- API将客户的数据返回给Db层
-
- Db层根据请求进行CRUD操作
- Db将返回的结果状态码传输给API
- API向客户返回结果给客户端
常用的HTTP请求方法:
方法 | 描述 |
GET | 请求指定的页面信息,并返回实体主体。 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的页面。 |
CONNECT | HTTP/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框架的项目,参考流程
- 下载IDEA
略
- 新建maven项目
- 增加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>
- 创建入口application
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
- 新建控制器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;
}
}
- 启动web服务
2、JMeter的使用过程
1.安装JMeter
2.打开JMeter,新建测试计划
3.新建线程组
4.新建HTTP请求-用于发送请求
5. 添加监听器-用于查看结果
3、JMeter常见的问题以及解决方法
1、响应数据乱码问题
在结果树当中,响应数据返回的数据为乱码,此时可以从几个方面入手考虑:
- 在HTTP请求的Content encoding的配置项当中填写UTF-8,可以解决部分问题。
- 如果第一种方法无效,可以在JMeter安装目录,找到jmeter.properties文件(启动配置项文件),打开之后搜索sampleresult.default.encoding配置,将值改为UTF-8。重新打开JMeter即可。
- 在后置处理器当中,选择BeanShell PostProcessor,在其中输入代码,即可改变结果树的字符编码格式:
prev.setDataEncoding("UTF-8")
4、JMeter使用帮助
1、参数化-函数助手的使用
在使用JMeter当中,我们会遇到很多情况,例如尝试多组数据登陆,我们需要将数据放在一个文件当中,然后使用文件进行提供数据,来对接口进行大量数据的验证。
在这里可以使用__CSVRead来读取文件当中的数据,将生成的函数路径复制到需要发送的路径。再设置好线程组的相关参数即可实现读取每一行的数据的效果。
4、JMeter的post请求介绍及使用
1、使用JMeter对map格式KEY:VALUE型的POST接口进行测试
重新新建一个测试计划,使用上面新增的POST测试接口进行测试,同时也可以使用上述的参数化格式来进行,如图所示:
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 + '\''+
'}';
}
}
@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;
}
在对此接口进行测试时,需要注意的是,需要传入json格式的数据。
但是此时,我们发现在结果树当中,返回的却是415错误,这时我们需要在头信息里面加入传输的类型,在此为了防止此错误,我们需要使用HTTP头管理器,在其中加入类型Content-Type:application/json即可。