719-JMeter之HTTP协议接口性能测试

https://www.imooc.com/learn/791

简介:接口的测试,并不仅仅是掌握某一种工具。工具是死的,并且是多种多样的,本课程通过层层剖析的方式来帮助同学们了解http协议,让学习的同学并不仅仅会做接口的功能和性能测试,并且能够了解什么是真正的接口,消除歧义。 慕课网测试交流群 559506833

第1章 课程大纲介绍及接口理解

了解本次课程的基本内容;掌握测试与开发对接口的不同理解

1-1 课程内容介绍 (04:28)

  1. 不同角色眼中的接口(开发、测试)
  2. 常见的接口协议(如HTTP等)
  3. HTTP协议栈中的位置(HTTP协议的底层原理)
  4. HTTP协议响应码(2XX、4XX、5XX)
  5. HTTP协议响应模型(一次请求的生命周期)
  6. 常见HTTP协议的请求方式(GET、POST等)
  7. JMeter的功能介绍
  8. GET请求与POST请求(实战-如何测试)

1-2 不同角色眼中的接口 (04:50)

  • 开发眼中的接口:模块与模块之间的对接方式定义

    创建一个接口,创建一个接口的实现类,必须实现这个接口里的所有方法。

  • 测试眼中的接口:可以独立部署成服务的协议接口

    协议接口(HTTP、FTP等)。利用中间件实现某个功能需求

第2章 HTTP协议基本介绍了解

掌握常见接口的协议;理解http协议栈的位置;掌握响应码并能够根据响应码去定位错误;掌握一次请求的生命周期并掌握一次请求的数据流;掌握常用请求方式,并能够区别不同的请求的表现形式

2-1 常见的接口协议 (03:30)

协议 中文名称
HTTP 超文本传输协议
HTTPS 安全超文本传输协议
FTP 文件传输协议
TCP 网络控制协议
IP 互联网协议
UDP 用户数据协议

2-2 HTTP协议栈中的位置 (02:03)

HTTP协议栈中的位置:

HTTP协议栈中的位置

注:

  • SSL:安全套接层协议
  • TLS:传输层安全性协议

HTTP与HTTPS网络层区别:

  • HTTPS是构建在SSL(安全套接层协议)之上的,

    也有构建在TLS(传输层安全性协议)之上;

  • HTTP是构建在TCP(网络控制协议)之上的;

2-3 HTTP协议响应码 (08:50)

每一个响应码都代表了服务端反馈的一种响应状态,也标识了本次请求是否成功

HTTP状态码|菜鸟教程

  1. 1XX:信息响应类,表示接受到请求并且继续处理(中间状态)

  2. 2XX:处理成功响应类,表示动作被成功接收、理解和接受

  3. 3XX:重定向响应类,为了完成指定的动作,必须接受进一步处理

  4. 4XX:客户端错误,客户请求包含语法错误或者是不能正确执行

    检查请求URL是否正确

  5. 5XX:服务端错误,服务器不能正确执行一个正确的请求

    必须在测试时解决此类型错误。查看服务器端日志,重启服务

2-4 HTTP协议请求响应模型 (16:23)

HTTP协议请求响应模型:(一次请求的生命周期,最简单的软件分层)

HTTP协议请求响应模型

场景:登录

  1. 客户端发起请求到API接口层

    • 用户在客户端填写用户名和密码,点击登录,发送请求
  2. API接收到客户端发起的用户请求

    • API对业务逻辑进行验证

      验证用户名和密码是否合法(例如:用户名要求必须为真实的手机号码。如果验证失败,即用户名不合法,那么需要给客户端返回(自定义)响应码,比如码值为1.2.3,1代表用户名格式错误,2代表用户名或密码错误,3代表密码格式错误)

  3. API会将用户输入的数据发给DB层(数据库)

    CRUD:Create、Read、Update、Delete

    • 数据库查询成功返回1,失败返回0
  4. DB会将查询数据库的条目数返回给API

  5. API返回成功或失败的状态码给客户端

  6. 客户端将返回信息提示给用户

简单的软件分层:

  1. 客户端

    功能测试、性能测试、自动化测试

  2. 接口层

    接口测试,功能测试、性能测试、自动化测试(更好维护脚本,不涉及页面元素的改变,最多只是接口,数据格式,传输数据内容的改变)

  3. 数据库层

    可以将开发人员使用到的SQL语句单独拿出来进行性能测试

2-5 常用HTTP请求方式 (08:52)

最常用的HTTP请求方式:

  1. GET请求

    URL:

    http://127.0.0.1:8080?username=zhangsan&password=123456
  2. POST请求

    URL:

    http://127.0.0.1:8080

    请求体:

    {
      [
          "username": "zhangsan",
          "password": "123456"
      ]
    }

HTTP请求的方法:

HTTP/1.1协议中共定义了八种请求方法(有时也叫做“动作”),来表明Request-URL指定的资源不同的操作方式

  1. OPTIONS

    返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向Web服务器发送“*”的请求来测试服务器的功能性

  2. HEAD

    向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。

    这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息

  3. :star: GET

    向特定的资源发出请求。

    注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。

  4. :star: POST

    向指定资源提交数据进行处理请求(例如,提交表单或者上传文件)

    数据被包含在请求体中。

    POST请求可能会导致新资源的建立和/或已有资源的修改

  5. PUT

    向指定资源位置上传其最新内容

  6. DELETE

    请求服务器删除Request-URL所标识的资源

  7. TRACE

    回显服务器所收到的请求,主要用于测试或诊断

  8. CONNECT

    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器

注意:

  1. 方法名称是区分大小写的。

    当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。

  2. HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法

第3章 JMeter的get请求介绍及使用

了解jmeter能够做什么;了解get接口运行原理;能够自主开发get请求脚本并且解决乱码问题;能够掌握函数助手的参数化方式;能够掌握线程组中各个选项的意义并能够进行符合业务逻辑的场景设置

3-1 JMeter功能介绍 (06:21)

万能的JMeter

  1. BS(Browser-Server)架构应用性能(分三层:1.浏览器性能;2.API性能;3.数据库性能测试)
  2. HTTP协议接口功能与性能
  3. FTP协议接口功能与性能
  4. MySQL数据库性能(增删改查脚本测试)
  5. MongoDB数据库性能(数据量大,较重要的读写功能性能)
  6. :star: 支持自定义Java组件开发(JMeter工具的组件不满足是可以开发新的组件,Java代码脚本方便管理)

3-2 get接口代码开发及原理讲解 (11:51)

  1. JMeter下载:https://jmeter.apache.org/download_jmeter.cgi

    Windows系统:运行jmeter.bat

    Linux、Mac系统:运行jmeter.sh

  2. SpringBoot接口开发

    DemoApplication.java

    @SpringBootApplication
    public class DemoApplication {
        public static void main(String[] args) {
            ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class,args);
            for (String str : context.getEnvironment().getActiveProfiles()) {
                System.out.println(str);
            }
        }
    }

    DemoAPI.java

    @RestController
    @RequestMapping("/demoAPI")
    public class DemoAPI {
        // http://127.0.0.1:8080/demoAPI/getDemo/zhangsan
        @RequestMapping(value = "/getDemo/{userName}",method = RequestMethod.GET)
        public String getDemo(@PathVariable String userName){
            String s = " is pig";
            userName = userName + s;
            return "您输入的数据是:" + userName;
        }
    }

3-3 get接口测试及常见乱码问题 (24:50)

  1. 添加线程组(Thread Group)

    [Test Plan]-[Add]-[Threads(Users)]-[Thread Group]

  2. 添加取样器(Sampler):[Thread Group]-[Add]-[Sampler]-[HTTP Request]

  3. 添加服务器信息(Web Server)

    • Protocol[http]:http
    • Server Name OR IP:127.0.0.1
    • Port Number:8080
  4. 添加HTTP请求信息(HTTP Request)

    • Method:GET
    • Path:/demoAPI/getDemo/zhangsan
    • Content encoding:UTF-8
    • 跟随重定向(Follow Redirects)、使用Keep Alive(Use Keep Alive)
  5. 添加查看结果树(View Results Tree):[Thread Group]-[Add]-[Listener]-[View Results Tree]

  6. 点击绿色小箭头运行访问

  7. 聚合报告(Aggregate Report):[Thread Group]-[Add]-[Listener]-[Aggregate Report]

    反应整个测试结果快慢、并发量

    关注指标:Average(平均值)、Error%(错误率)、Throughput(吞吐量)、

    Received KB/sec(接收)、Sent KB/sec(发送)、90%Line(90%百分位)

:在真正做测试时应该把[查看结果树(View Result Tree)]去掉,打印日志记录会消耗大量IO、CPU等资源

:star: 测试并解决请求响应数据乱码:

http://www.weather.com.cn/data/sk/101010100.html
http://www.weather.com.cn/data/cityinfo/101010100.html
  1. 在Content encoding中设置UTF-8。无效
  2. 打开/bin/jmeter.properties搜索sampleresult.default.encoding=ISO-8859-1,设置为UTF-8。有效
  3. [Thread Group]-[Add]-[Post Processors]-[BeanShell PostProcessor]-[Script]:prev.setDataEncoding("UTF-8")。有效

3-4 参数化-函数助手 (06:12)

意义:数据的多变。

[Tools]-[Function Helper Dialog]-[Choose a function(__CSVRead)]-[Generate & Copy to Clipboard]

  • 输入参数:

    CSV file to get values from | *alias:文件路径

    Column number of CSV file | next | *alias:文件列号,0

  • 点击生成:代表某个数值

    ${__CSVRead(文件路径, 0)}
  • 复制到链接🔗:

    /demoAPI/getDemo/${__CSVRead(文件路径, 0)}

3-5 场景设置(get请求) (06:56)

场景设置即配置线程组

Thread Properties:

  • Number of Threads:线程数
  • Ramp-Up Period(in seconds):每秒当中有多少用户进行访问(加压策略)
  • Loop Count:循环次数

复杂场景需要使用多个线程组

第4章 JMeter的post请求介绍及使用

学习能够了解post接口开发的原理;能够掌握post接口中map格式的数据传递的访问方式;能够了解json格式传递数据传递的原理;能够掌握post接口中json格式的数据传递的访问方式

4-1 post接口代码开发及原理 (07:52)

// http://127.0.0.1:8080/demoAPI/postDemo
/*
{
  "userName": "zhangsan"
}
*/
public static int count = 0;
@RequestMapping(value = "/postDemo", method = RequestMethod.POST)
public String postDemo(@RequestParam String userName){
  count++;
  String result = "接口是第" + count + "次被调用,您的用户名是" + userName;
  return result;
}

使用POSTMAN工具🔧调用测试接口。

4-2 接口测试实战-map参数格式 (04:55)

  1. 添加线程组(Thread Group)

    [Test Plan]-[Add]-[Threads(Users)]-[Thread Group]

  2. 添加取样器(Sampler):[Thread Group]-[Add]-[Sampler]-[HTTP Request]

  3. 添加服务器信息(Web Server)

    • Protocol[http]:http
    • Server Name OR IP:127.0.0.1
    • Port Number:8080
  4. 添加HTTP请求信息(HTTP Request)

    • Method:POST
    • Path:/demoAPI/postDemo
    • Content encoding:UTF-8
    • 跟随重定向(Follow Redirects)、使用Keep Alive(Use Keep Alive)
  5. 添加参数:[Parameters]-[Add]

    • userName:zhangsan

    使用函数助手__CSVRead ${CSVRead(文件路径, 0)} 动态获取CSV的数据

  6. 点击绿色小箭头运行访问

4-3 json格式数据传递接口原理及开发 (06:31)

// http://127.0.0.1:8080/demoAPI/postJson
/*
{
  "name": "zhangsan",
  "clazz": "一年一班"
}
*/
public static int count = 0;
@ResponseBody
@RequestMapping(value = "/postJson", method = RequestMethod.POST)
public String postDemo(@RequestBody Student student){
  Student stu = new Student();
  stu.setName(student.getName());
  stu.setClazz(student.getClazz());
  return stu;
}
@Data
public class Student {
  private String name;
  private String clazz;
}
Content-Type: application/json

4-4 json格式post请求实战 (05:03)

  1. 添加线程组(Thread Group)

    [Test Plan]-[Add]-[Threads(Users)]-[Thread Group]

  2. 添加取样器(Sampler):[Thread Group]-[Add]-[Sampler]-[HTTP Request]

  3. 添加服务器信息(Web Server)

    • Protocol[http]:http
    • Server Name OR IP:127.0.0.1
    • Port Number:8080
  4. 添加HTTP请求信息(HTTP Request)

    • Method:POST
    • Path:/demoAPI/postJson
    • Content encoding:UTF-8
    • 跟随重定向(Follow Redirects)、使用Keep Alive(Use Keep Alive)
  5. 添加参数:[Body Data]

    {
      "name": "zhangsan",
      "clazz": "一年一班"
    }

    使用函数助手__CSVRead ${CSVRead(文件路径, 0)} 动态获取CSV的数据

  6. 添加HTTP信息头管理器:[Thread Group]-[Add]-[Config Element]-[HTTP Header Manager]-[Add]

    • Content-Type:application/json
  7. 点击绿色小箭头运行访问

第5章 JMeter之接口性能测试-课程总结

掌握本次课程的所有重点内容,能够独立进行接口测试

5-1 课程总结 (03:31)

  1. 常见的接口协议(HTTP协议、FTP协议)
  2. HTTP协议响应码
  3. HTTP协议响应模型(HTTP生命周期)
  4. GET请求的开发与测试
  5. POST请求的开发与测试
  6. 场景设置(配置线程组信息)
  7. 参数化(函数助手参数化、外部文件参数化)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tuyrk@qq.com

文章标题:719-JMeter之HTTP协议接口性能测试

文章字数:3.5k

本文作者:神秘的小岛岛

发布时间:2019-09-27, 23:57:49

最后更新:2019-11-05, 16:34:30

原始链接:https://www.tuyrk.cn/imooc/791-JMeterHTTP/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏