《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(13)-Charles如何进行Mock和接口测试
Posted 北京-宏哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(13)-Charles如何进行Mock和接口测试相关的知识,希望对你有一定的参考价值。
1.简介
Charles最大的优势在于抓包分析,而且我们大部分使用的功能也在抓包的功能上,但是不要忘记了,Charles也可以做接口测试。至于Mock,其实在修改请求和响应数据哪里就已经介绍了,宏哥就是在这里简单的提一下介绍一下它的理论知识,今天主要介绍和分享的是使用Charles进行接口测试实操。
2.什么是Mock?
百度百科是这么说的:Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
Mock 就是在测试过程中,对于一些不容易构造/获取的对象,创建一个 Mock对象 来模拟对象的行为。
Mock 方法 是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开。
3.Mock测试的优点
3.1团队并行工作
开发过程中,只要交互双方定义好接口,团队之间可以并行工作,进程互不影响,不需互相等待对方进度,只需约定好相互之间的数据规范(接口文档),即可使用 mock 构建出可用接口,然后尽快进行开发和自测,提前发现缺陷.
3.2测试驱动开发 TDD (Test-Driven Development)
单元测试是 TDD 实现的基石,而 TDD 经常会碰到协同模块尚未开发完成的情况,但有了 mock,测试人员可提前接入测试,提供测试效率,当接口定义好后,测试人员就可以创建一个 Mock,把接口添加到自动化测试环境,提前创建测试。
3.3测试覆盖率
接口涉及入参,或者业务逻辑复杂的情况,某些场景无法通过正常手段进行操作,而通过mock虚拟模拟,可以有效的增加覆盖率
3.4隔离系统
若一个接口在不同的状态下要返回不同的值,常见做法是复现这种状态然后再去请求接口,但使用某些接口时,可能因操作时机或方式不当导致失败,甚至污染后端存储如数据库等, 为避免系统数据库被污染,可以将接口调整为 Mock 模式,以保证数据库纯净。
4.Mock测试的缺点
Mock也不是万能的,使用Mock也存在着风险,需要根据项目实际情况和具体需要来确定是否选用Mock。
测试过程中如果大量使用Mock,mock测试的场景失去了真实性,可能会导致在后续的系统性测试时才发现bug,使得缺陷发现的较晚,可能会造成后续修复成本更大
5.Mock客户端
接口文档已对接完成,但后端接口还未开发完成,测试人员需要进行单元测试,或提前进行接口自动化测试,需要使用Mock各种请求返回的内容。
6.Mock服务端
遇到前端人员已完成开发任务,而后端人员开发打接口尚未完成这种情况,需要和前端人员联调进行测试,则需要搭建Mock服务。
好了,Mock的理论就介绍到这里,有兴趣的自己可以私下查资料。接下来就要进入今天的重点:使用Charles进行接口测试。
7.Compose
用Charles进行测试,我们使用的主要是Composer功能。这个和Fiddler工具类似。Composer允许自定义请求发送到服务器,可以手动创建一个新的请求。具体操作步骤如下:
7.1方法一
1.打开Charles,点击【Tools】-->【Compose】或者【Compose New...】 。如下图所示:
2.填写你要测试接口的信息,有接口文档,按接口文档填写,没有就自己抓包填写,如下图所示:
7.2方法二
1.选中抓到的接口请求信息,右键-->【Compose】,如下图所示:
2.出现了接口请求的相关信息。如下图所示:
8.界面功能解析
根据下图图标注位置对Composer的界面功能进行说明。
1.请求方式:点开可以勾选请求协议是get、post等
2.url地址栏:输入请求的url地址
3.Execute按钮点击后就可以执行请求了
4.执行完成后会在右侧History区域生成历史记录
5.http版本:可以勾选http版本
6.添加请求参数
9.接口测试实战
9.1POST API实战
现在免费的接口很不好找,找了半天找到python里有一个,之前在Fiddler中也用的这个。就用这个举例吧。
接口信息:
接口信息 | 描述 |
---|---|
https://httpbin.org/post | 接口地址 |
请求方式 | HTTP POST |
请求参数 | 请求参数格式为 JSON |
参数格式:
"form": "comments": "北京宏哥post接口测试", "custemail": "19182XX@qq.com", "custname": "北京宏哥", "custtel": "13045032408", "delivery": "15:45"
那么如何使用Charles调试一个POST请求并带有json格式的数据,具体操作步骤如下:
1.启动Charles,打开Compose面板, 在Compose新建面板中的输入URL(输入请求接口的地址),下拉框中选择POST请求方式,如下图所示:
2.点击【Compose】后,如下图所示:
3.点击【JSON Text】,然后输入请求的JSON数据,最后点击【Execute】如下图所示:
4.点击Execute(执行),若在会话列表中看到结果返回200表示操作成功,如下图所示:
5.在Inspectors里面查看到请求响应的结果了,我们事先知道接口返回的是json格式数据,点击响应部分的json将数据格式化,方便阅读。如下图所示:
9.2GET API实战
接口信息:一个带参数的 get 请求,如在豆瓣网搜索:西游记,url 地址为:https://www.douban.com/search?q=西游记。具体操作如下图所示:
1.启动Charles,打开Compose面板, 在Composer面板中的输入URL,下拉框中选择GET请求方式,如下图所示:
2.输入请求接口的参数,如下图所示:
3.点击Execute(执行),若在会话列表中看到结果返回200表示操作成功,如下图所示:
10.小结
今天主要讲解和分享了如何使用Charles进行接口测试的两种请求方式,其他的请求类似!!!好了,今天时间也不早了,宏哥就讲解和分享到这里,感谢你耐心地阅读!!!
感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
如果您觉得阅读本文对您有帮助,请点一下左下角“推荐”按钮,您的
本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/du-hong 欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
![](https://image.cha138.com/20230404/aa398e321432432fbc2ab75fff2f66a9.jpg)
![](https://image.cha138.com/20230404/c856830488064ff6ac1cfeed212452fa.jpg)
玩转Rabbitmq系列02:Rabbitmq保姆级安装教程与基本消息模型实战
🏠个人主页:啊陈晓
🎉学习方向:java后端开发
🎁我的上一篇文章:【玩转Rabbitmq系列】01:一文带你敲响Rabbitmq的大门
💕如果我的文章对你有帮助,点赞、收藏、留言都是对我最大的动力
【玩转Rabbitmq系列】文章直通车~
【玩转Rabbitmq系列】01:一文带你敲响Rabbitmq的大门
【玩转Rabbitmq系列】02:Rabbitmq保姆级安装教程与基本消息模型实战
未完待续.........
现在让我们正式开启进入今天的正文
文章目录
1.创建一个简单的java工程:rabbitmq-learn并创建module-maven:rabbit-test01
前言
在上一讲中,我们已经初步认识了Rabbitmq,接下来我们将开始进入实战,通过代码的需教程逐步深入Rabbitmq。而今天,我们就来学习如何搭建Rabbitmq的环境,并对六大消息模型之一的基本模型进行代码实现。
一.Linux环境下Rabbitmq的搭建
1.环境准备
JVM环境 |
使用Xshell进行远程连接 |
2.安装包下载
大家可以自行前往官网进行下载~
Rabbitmq官网直通车https://www.rabbitmq.com/download.html
当然,我在这里也给大家下载好啦,大家可以自行使用~
链接:https://pan.baidu.com/s/1-bqmSv4wx92dOhZbEKkzmw
提取码:acxy
3.安装步骤
先准备一台虚拟机并命名为rabbitmq-1
打开终端输入ifconfig,获取ip后通过xshell远程连接
进入到/usr/local/software 目录(如果没有 software则自己创建)
cd /usr/local/software #进入对应目录
mkdir software #如果目录不存在则在对应路径下创建文件夹
将下载好的资源包上传到software中,可以使用文件上传工具,也可以直接进行拖动。
安装文件:
分别按照以下顺序进行安装
rpm -ivh erlang-21.3-1.el7.x86_64.rpm
yum install socat -y #需在联网环境下执行
rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm
Rabbitmq的常用命令
分别按照下面顺序启动服务开启web管理插件
chkconfig rabbitmq-server on #添加开机启动服务
/sbin/service rabbitmq-server start #启动服务
/sbin/service rabbitmq-server status #查看服务状态
/sbin/service rabbitmq-server stop #停止服务
rabbitmq-plugins enable rabbitmq_management #开启web管理插件
服务状态显示如下即成功
然后我们添加一个新的用户
rabbitmqctl add_user root password #创建账号
rabbitmqctl set_user_tags root administrator #设置用户角色
rabbitmqctl set_permissions -p "/" root ".*" ".*" ".*" #设置用户权限
rabbitmqctl list_users #查看当前用户
可以看到我们已经出现了名字为root的用户
访问:http://192.168.154.138:15672/ #将前面的IP地址换成你自己的http://192.168.154.138/
可能你会出现无法访问的状态,这是因为你的防火墙还没有关闭
按如下步骤关闭防火墙 :
systemctl status firewalld #查看防火墙状态
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #永久关闭防火墙
当防火墙的状态如下所示即防火墙已经关闭成功
然后我们再次访问:http://192.168.154.138:15672/ #将前面的IP地址换成你自己的
可以看到已经成功进入Rabbitmq web管理端
输入之前的增加的用户和密码,登录成功!
至此,我们Rabbitmq搭建成功!!!
二、基本消息模型实战
完成了环境搭建,我们趁热打铁,来学习一下上一篇文章中我们所提到的六大模型之一的基本模型
1.创建一个简单的java工程:rabbitmq-learn并创建module:maven工程:rabbit-test01
2.在pom.xml文件中添加相关依赖
<!--指定 jdk 编译版本--> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build> <dependencies>
<!--rabbitmq 依赖客户端-->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.8.0</version>
</dependency>
<!--操作文件流的一个依赖-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
3.创建模型中的生产者
package com.canrioyuan.one;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 基本模型中的生产者:Producer
*/
public class Producer
//先创建一个队列
public static final String QUEUE_NAME = "hello";
//发消息
public static void main(String[] args) throws IOException, TimeoutException
//创建一个连接工厂
ConnectionFactory factory = new ConnectionFactory();
//工厂IP连接RabbitMQ的队列
factory.setHost("192.168.154.138");
//用户名
factory.setUsername("root");
//密码
factory.setPassword("password");
//创建连接
Connection connection = factory.newConnection();
//获取信道
Channel channel = connection.createChannel();
/**
* 生成一个队列
* 1、队列名称
* 2.队列里面的消息是否持久化
* 3.该队列是否只供一个消费者进行消费 是否进行消息共享,true:可以多个消费者进行消费 false:只能一个消费者进行消费
* 4.是否自动删除 最后一个消费者端开连接之后 该队列是否会自动删除 true:自动删除 false:不自动删除
* 5、其他参数
*/
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
//发送一个消息
String message = "Hello world!";
/**
* 发送一个消费
* 1、发送到哪个交换机
* 2.路由的Key值是哪个 本次队列的名称
* 3.其他参数的信息
* 4.发送信息的消息体
*/
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println("消息发送完毕");
4.创建模型中的消费者
package com.canrioyuan.one;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 基本模型中的消费者:Consumer
*/
public class Consumer
//定义队列的名称 即图中的红色部分
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) throws IOException, TimeoutException
//创建一个连接工厂
ConnectionFactory factory = new ConnectionFactory();
//工厂IP连接RabbitMQ的队列 ,此处输入带有Rabbitmq服务的IP
factory.setHost("192.168.154.138");
//用户名
factory.setUsername("root");
//密码
factory.setPassword("password");
//创建一个连接
Connection connection = factory.newConnection();
//创建一个管道
Channel channel = connection.createChannel();
System.out.println("等待接收消息");
//推送的消息如何进行消费的接口回调
DeliverCallback deliverCallback = (consumerTag, delivery) ->
String message = new String(delivery.getBody());
System.out.println(message);
;
//取消消费的一个回调接口 如在消费的时候队列被删除掉了
CancelCallback cancelCallback = (consumerTag) ->
System.out.println("消息消费被中断");
;
/**
* 消费者消费消息
* 1.消费哪个队列
* 2.消费成功之后是否要自动应答 true 代表自动应答 false 手动应答
* 3.消费者未成功消费的回调
*/
channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
5.测试
我们先启动生产者(Producer),启动成功后我们来到Rabbitmq web管理端,可以看到已经生成了一个名为hello的queue
同时Producer将信息为“Hello,world”的信息发送至名为hello的队列中
然后我们再启动Consumer,可以看到Consumer已经成功接收到生产者发送至hello队列的信息“Hello,world”:
至此,我们便成功实现了六大模型之一的基本模型,这也是最简单的消息模型。
总结
基本消息模型是Rabbitmq六大消息模型之一中最简单的模型,后面的模型也是在基本模型的基础上逐渐深入。所以了解基本模型的使用是非常重要的!!除此之外,如何使用与查看Rabbitmq中web 管理端,也是学习Rabbitmq必须掌握的技能。
打好第一步的基础,后面的学习才会更加容易理解!!
至此,我们今天的教程就到此结束啦~
感谢您的阅读,希望我的文章能给你带来帮助!!!
以上是关于《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(13)-Charles如何进行Mock和接口测试的主要内容,如果未能解决你的问题,请参考以下文章
《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(15)-Charles如何配置反向代理
《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(13)-Charles如何进行Mock和接口测试
玩转Rabbitmq系列02:Rabbitmq保姆级安装教程与基本消息模型实战