Allure
Allure介绍官方网站
Allure框架是一种灵活的轻量级多语言测试报告工具,它不仅能够以简洁的web报告形式显示已测试的内容,而且允许参与开发过程的每个人从测试的日常执行中提取最大限度的有用信息。
安装allure的使用是需要安装,系统不同则安装方式不同,更多详细的使用查看官方文件Allure的安装
安装完成后,验证
12jingdeMacBook-Pro:~ apple$ allure --version2.13.5
报告生成1allure serve target/surefire-reports/
Junit5集成本文主要解释是与Junit5进行单元测试,则在测试报告展示是Allure与Junit5集成,更多详细的使用查看官方文件Allure与Junit5
在Maven工程中引入依赖:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253<properties> <aspectj.version>1 ...
REST Assured 获取日志到文件并结合 Allure 报告进行展示
使用 Rest-assured 集合 Allure 运行完用例之后,在生成的报告中只有断言信息,没有请求的日志信息。而当我们的用例失败时,特别是接口失败时,请求日志是分析原因的第一手资源。那如何将 Rest-assured 产生的日志存入 Allure 里,并且能和用例一一对应起来呢?
问题的产生在使用 Rest-assured 集合 Allure 运行完用例之后,查看生成的报告信息如下:
我们可以看到在生成的报告中只有断言信息,而没有请求的日志信息,而当我们的用例失败时,特别是接口失败时,请求日志是分析原因的第一手资源;
解决思路其实Rest-assured是有请求日志的,可以通过在given()和then()后面加上.log().all()来打印全部的日志信息:
接下来如何将打印的日志信息“转义”到Allure报告中呢?
首先来看一下 Allure 报告可以如何展示日志,在学习 Allure 的过程中发现 Allure有添加附件展示的功能,那么我就直接想到将日志能存入文件然后添加到报告附件不就可以了吗?由此,Allure 端的解决方向确定。
接下来就是要想法办将 Rest-as ...
服务端接口测试实战
Charles配置
代理配置
抓取HTTPS的设置
完成以上配置就可以避免因为抓不到https而出现红色的unknown
证书安装

根据需要安装证书
数据抓取
完成Charles和Mumu的配置,接下来就到抓包分析数据了,下面内容会详细讲解
实战配置说明抓包工具CharlesCharles抓包工具需要设置代理抓取mumu模拟器中的请求:
安装证书
代理设置
详细见上面步骤
模拟器MumuMumu模拟器中配置Charles的代理
设置–>WLAN–>鼠标左键长按–>修改网络–>代理–>手动–>设置服务器主机名和端口号–>保存
Charles查看HTTP请求和响应通过抓包得到的数据,分析HTTP协议构成,请求和响应,注意:Charles默认设置是不显示Request和Respons ...
算法与数据结构初学
算法与数据结构什么是算法Algorithm的本意:解决问题的算法
本质:一系列解决问题的,清晰,可执行的计算机指令
接下来,我们更形象的理解什么算法,在我们的生活中随处都可以接触到算法,例如菜谱,如下:
从以上的菜谱看到,清晰,明确的一系列操作后得出一盘可口的鱼香肉丝,就可类比于我们学习算法的一系列解决问题的,清晰,可执行的计算机指令
算法的五大特性
有限性–它是指一个算法必须总是在执行有限的步骤之后结束,并且每一步都必须在有限的时间内完成。
这个很容易理解,对于一个算法,我们肯定要让它能够在有限的时间完成任务,不然要花费无穷无尽的时间才能得出结果,那这个算法无疑是失败的。(对于无穷的算法也不能算是失败的算法,也是有一定意义的研究价值)
确定性–顾名思义,对于每种情况下的操作,算法中都有明确的规定,不会产生二义性。
举个例子:你的同学有两个叫张三的,如果你不给这两个叫张三的标记他们独有的标签,那么老师在叫张三的时候就会产生二义性,计算机也是如此,它不知道该选择哪一个“张三”。
可行性–它是指算法中的所有操作都可以通过已经实现的操作运算执行有限次来实现。通俗点讲,就是针对实际问 ...
动态数据基础结构--链表
线性数据结构
为什么链表很重要
真正的动态数据结构
最简单的动态数据结构
更深入的理解引用(或者指针)
更深入的理解递归
辅助组成其他数据结构
链表 Linked List
数据存储在”节点“(Node)中
1234class Node { E e; Node next;}
优点:真正的动态,不需要处理固定容量的问题
缺点:丧失了随机访问的能力(不能使用索引访问数据)
数组和链表的对比
数组最好用于索引有语义的情况。scores[2]
最大的优点:支持快速查询
链表不适合用于索引有语意的情况
最大的优点:动态
链表实现节点的实现1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950/** * 节点设置为私有的内部类,对于用户不需要知道节点的实现细节 */ private class Node { /** * 数据域 */ public E e; /** * 指针(引用) */ ...
递归
递归基础与递归的宏观语义
本质上,将原来的问题,转化为更小的同一问题
举例:数组求和
1234sum(arr[0...0-1]) = arr[0] + summ(arr[1...n-1]) -- 更小的同一问题sum(arr[1...n-1]) = arr[1] + summ(arr[2...n-1]) -- 更小的同一问题 ......sum(arr[n-1...n-1]) = arr[n-1] + summ([]) -- 最基本的问题
代码实现
123456789101112131415161718192021222324252627282930313233343536373839package demo.recursion;/** * 递归求和 * * @author jingLv * @date 2020/12/14 */public class SumForRecursion { /** * 递归求arr中所有元素的和 * * @param arr 数组 * @return 求和的值 */ public static i ...
基础排序算法
基础排序算法排序算法:让数据有序
排序算法中蕴含着重要的算法设计思想
两个基础的排序算法
选择排序法
插入排序法
选择排序法思路:先把最小的拿出来,剩下的再把最小的拿出来,剩下的再把最小的拿出来…每次选择还没处理(排序)的元素里最小的元素
过程:
目前有一组元素:6 4 2 3 1 5
开辟一个新的空间进行操作
拿出最小的元素1,放入新的空间内,剩余元素6 4 2 3 5
剩余的元素拿出最小的元素2,放入新的空间内1的后面,剩余元素6 4 3 5
剩余的元素拿出最小的元素3,放入新的空间内2的后面,剩余元素6 4 5
剩余的元素拿出最小的元素4,放入新的空间内3的后面,剩余元素6 5
剩余的元素拿出最小的元素5,放入新的空间内4的后面,剩余元素6
剩下一个元素,拿出放入新的空间内5的后面,则新数组为:1 2 3 4 5 6
这样的排序过程占用了额外的空间
思考:可否进行原地(原空间)排序完成?
arr[i…n)未排序
arr[0…i)已排序 ...
一道算法题时间复杂度的优化分析
一道算法题时间复杂度的优化分析leetcode上的一道题,给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
1234示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
OK!题已给出,经过思考,给定目标值,在数组中,元素间两两相加等于目标,代码如下:
1234567891011121314151617/** * 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标 * * @param nums 数组 * @param target 目标值 * @return 返回下标数组 */public static int[] twoSumFor(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j ...
数据基础结构--队列(Queue,基于Array底层实现)
队列 Queue
队列也是一种线性结构
相比数组,队列对应的操作是数组的子集
只能从一端(队尾)添加元素,只能从另一端(队首)取出元素
队列是一种先进先出的数据结构(先到先得 First In First Out FIFO)
其实队列⾮常好理解,我们将队列可以看成⼩朋友排队
队尾的⼩朋友到指定的地点了–>出队
有新的⼩朋友加⼊了–>⼊队
相对于栈⽽⾔,队列的特性是:先进先出
先排队的⼩朋友肯定能先打到饭!
队列的基本实现
Interface Queue<E> — ArrayQueue<E>
void enqueue(E)
E dequeue()
E getFront()
int getSize()
boolean isEmpty()
123456789101112131415161718192021222324252627282930313233343536373839404142434445package demo.structure.queue;/** * 队列的基本实现--接口 * * @author jingLv * @d ...
数据基础结构--栈(Stack,基于Array底层实现)
#栈 Stack
栈也是一种线性结构
相比数组,栈对应的操作是数组的子集
只能从一端添加元素,也只能从一端取出元素,这一端称为栈顶
栈是一种后进先出的数据结构(Last In First Out – LIFO)
在计算机的世界里,栈拥有着不可思议的作用
其实⾮常好理解,我们将栈可以看成⼀个箱⼦:
往箱⼦⾥⾯放东⻄叫做⼊栈
往箱⼦⾥⾯取东⻄叫做出栈
箱⼦的底部叫做栈底
箱⼦的顶部叫做栈顶
说到栈的特性,肯定会有⼀句经典的⾔语来概括: 先进后出(LIFO, Last In First Out)
往箱⼦⾥边放苹果,箱⼦底部的苹果想要拿出来,得先把箱⼦顶部的苹果取⾛才⾏
栈的应用
无处不在的Undo操作(撤销)– 编辑器
例如:编辑器输入“沉迷 学习 无法 自拔”
进行删除/撤销的操作,都是从“栈顶”开始
程序调用的系统栈 ,系统调用,子逻辑调用的内部实现过程(断点执行)
栈的基本实现
Interface Stack
void push(E)
E pop()
E peek()
int getSize()
boolean isEmpty
从用户角度看,支持这些操作 ...