数据基础结构--数组(Array)
数据基础结构数据结构研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据或者修改数据。
在内存世界的增删改查
数据结构的分类线性结构
数组、栈、队列、链表、哈希表
树结构
二叉树、二分搜索树、AVL、红黑树、Treap、Splay、堆、Trie、线段树、K-D树、并查集、哈夫曼树
图结构
邻接矩阵、邻接表
动态数组Java中的数组1234567891011121314151617181920212223242526272829package demo.structure.array;import demo.helper.model.Student;/** * @author jingLv * @date 2020/11/26 */public class ArrayMain { public static void main(String[] args) { // 声明数组,数组中只能存放同一种数据类型的数据 int[] arr = new int[10]; // for循环数组赋值 for (int ...
Mock介绍
初识mockMock解释:
作为一个动词,是模拟、模仿的意思
作为一个名词,是能够模仿真实对象行为的模拟对象。
在软件测试中,Mock所模拟的对象是什么呢?
它一定不是我们所测试的对象,而是 SUT 的依赖(dependency)。换句话说,mock 的作用是模拟 SUT 依赖对象的行为。
测试的对象一般称之为SUT(Software Under Test)
文字不好理解,我们画个图,如下图所示,被测试对象是 A,A 依赖的是B,B 依赖的是 C。而我们要 mock 的是 B 的行为。图中 A 就是 SUT。
为什么需要模拟 B 的行为呢?
提高 A 的测试覆盖率。A 依赖 B,本质上依赖的是 B 的返回结果,也就是说 B 的返回结果会影响 A 的行为。通过 mock B 我们可以构造各种正常和异常的来自 B 的返回结果,从而更充分测试 A 的行为。
避免 B 的因素从而对 A 产生影响。依赖真实的 B 去测试 A 可能有很多问题:B 的开发没有完成时无法测试 A;B 有阻塞性bug 时无法测试 A;B 的依赖 C 有阻塞性 bug 时无法测试 A;
提高 A 的测试效率。B ...
WireMock模拟接口响应规则实战
模拟接口响应规则实战模拟一个接口,总的来说就是配置 mapping 文件,mapping 文件中又分为 Request 的配置和 Response 的配置。
Request配置
method:配置接口的请求方法
通常接口的请求方式,如GET、POST、PUT、DETELE等
urlpath:配置接口的路径参数
urlPattern 路径中无查询参数的接口
urlPathPattern 路径中有查询参数的接口
QueryParameters :配置接口的查询参数只能是固定的名称
BodyPatterns:配置请求主体配置设置格式,例如:JSON格式、XML格式等
basicAuth:配置基础认证规则
Response配置
body:配置接口响应规则返回体
body:返回体为字符串
jsonBody:返回体为json串
bodyFileName:返回体为json文件,该文件存储于__files目录下
模拟响应规则接口定义需求:对于书籍信息通过接口进行操作,提前需要进行认证
按照RESTful的思想设计一组对书籍信息操作的RESTful API:
请求方式
地 ...
WireMock通过接口添加响应规则
通过接口添加响应规则接口:http://localhost:9090/__admin/mappings/new
请求方式:Post
请求添加的接口:
注意:这个new的响应规则,只是一个临时的,并未存储为响应规则文件,此时需要调用save接口,将新增的响应规则保存在/mappings目录下响应规则文件
WireMock动态生效响应规则
动态生效响应规则WireMock在启动的时候加载mapping下的响应规则,每次改动都需要重新启动WireMock,那如何动态生效响应规则呢?WireMock自身就提供的接口,就可以实现该功能。
通过接口查看响应规则接口:http://localhost:9090/__admin/mappings
请求方式:Get
请求该接口就会返回已经定义的响应规则(mappings文件夹下)
重新加载Mapping定义接口:http://localhost:9090/__admin/mappings/reset
请求方式:Post
实战
启动WireMock服务
1jingdeMacBook-Pro:WireMock apple$ java -jar wiremock-jre8-standalone-2.27.0.jar --port 9090
请求接口:http://localhost:9090/api/book/abc
请求接口:http://localhost:9090/__admin/mappings,查看已定义的响应规则
在mappings目录下,修改该规则的响应返回体 ...
WireMock消息录制
WireMock消息录制Standalone的消息录制
启动WireMock服务
1jingdeMacBook-Pro:WireMock apple$ java -jar wiremock-jre8-standalone-2.27.0.jar --port 9090 --https-port 9099
访问http://localhost:9090/__admin/recorder/ 进入录制界面
输入录制的目标地址
点击[Record]
Recording…进入消息录制的监听,成为发送消息的代理,发送给WireMock的请求,都会转发给正在录制目标的请求,并记录相关的响应记录到本地
新打开浏览器的Tab,输入地址:https://localhost:9099/users/jinglv,请求成功后,回到录制界面,点击[Stop],这时会提示我们已经捕获到一个Mapping,"Captured 1 stub mappings.”
到本地的mappings文件夹下,就会看到已经录制生成的响应规则json文件了
WireMock配置Mock响应规则
配置Mock响应规则会通过 __files 和 mappings 目录来存放匹配规则文件。 匹配文件以 json 格式存放在 mappings 目录下,WireMock 会在启动后自动加载该目录下所有符合格式的文件作为匹配规则使用。
基本匹配格式12345678910{ "request": { "method": "GET", "url": "/api/book/abc" }, "response": { "status": 200, "body": "this is a book" }}
消息头
可以在 request 或 response 中定义 headers 来匹配请求或者指定响应消息头。
1234"headers": { "Content-Type": "text/plain", "Cache-Control": "no-cache"}
消息体
除了上面直接在 reponse 中通过 body 来直接定义响应消息体。对于 json 格式的响应可以利用 jsonBody 来直接定义
...
WireMock场景测试
场景测试WireMock 中一个很有用的高级特性是支持场景配置,场景是通过状态机来触发,默认状态是 STARTED,通过设置场景(设置 scenarioName )可以在触发后变更新的状态(设置 requiredScenarioState),并根据新的状态(设置 requiredScenarioState )来实现灵活匹配。比如下例就是一个对同一地址重复发送请求返回不同响应的场景配置。
添加第一个场景规则
12345678910111213{ "scenarioName": "delete book", "requiredScenarioState": "Started", "newScenarioState": "deleted", "request": { "method": "DELETE", "url": "/api/book/1" }, "response": { "status": 200, "jsonBody" : {"message":"删除成功"} }}
在添加一个 ...
WireMock介绍
WireMockWireMock是一款开源的Mock框架,可以Mock基于HTTP和HTTPS的API。官网提供了多种搭建WireMock的方式,以下讲解的是通过引入Jar包方式搭建WireMock服务。
WireMock 有以下优点:
支持本地单独部署
丰富的匹配策略
支持接口录制
支持场景定义
本身支持 API 调用
提供 Java 库,易于在代码中使用
WireMock官网
WireMock的安装官网下载的jar包或者Maven或Gradle项目中添加依赖(具体使用参照官网)
WireMock命令行用法WireMock的独立版本是一个Jar包,所以运行Wiremock自然是需要Java基础环境,命令如下
1jingdeMacBook-Pro:2.27.0 apple$ java -jar wiremock-jre8-standalone-2.27.0.jar
命令行支持的一些主要参数及其作用说明如下:
--port设置Mock服务的http端口,默认启动在8080端口。如果设置为0,则自动确定端口。
--https-port设置https的端口。
--verbose在终端显 ...
WireMock Java代码内集成调用
WireMock Java代码内集成调用之前,已经介绍了WireMock单独启动的使用了,但WireMock 本身由 Java 语言开发,所以在 Java 中可以方便地进行调用。接下来,介绍在Java代码中如何进行WireMock的使用。
创建工程
创建maven工程
引入需要的依赖
1234567891011121314151617<dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock-jre8</artifactId> <version>${wiremock.version}</version></dependency><dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock-jre8-standalone</artifactId> ...