JMH 测试各序列化技术性能
Java 性能难题1234long start = System.currentTimeMillis();// ...long end = System.currentTimeMillis();System.out.println(start - end);
上面是我们最常见的性能测试,这样的测试结果真的准确吗?答案是否定的,它有下面几个问题:
时间精度问题,本身获取到的时间戳就是存在误差的,它和操作系统有关。
JVM 在运行时会进行代码预热,越跑越快。因为类需要装载、需要准备操作。
JVM 会在各个阶段都有可能对你的代码进行优化处理。
资源回收的不确定性,可能运行很快,回收很慢。
带着这些问题,突然发现进行一次严格的基准测试的难度大大增加。
JMH 介绍为了解决上面的性能难题,我们可以使用 JMH,它是由 Java 虚拟机团队开发的一款用于 Java 微基准测试工具。使用 JMH 可以让你方便快速的进行一次严格的代码基准测试,并且有多种测试模式,多种测试维度可供选择;而且使用简单、增加注解便可启动测试。
JMH 使用依赖引入JMH 的使用需要引入所需的 maven 依赖
123 ...
JMeter使用
JMeter 简介Apache JMeter 是一款纯 Java 编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。
JMeter 主要有以下几方面用途:
性能测试:用于测试应用程序在不同负载下的性能表现
负载测试:模拟大量用户访问来观察系统的响应和稳定性
功能测试:验证应用程序的功能是否正常
测试实例使用百度搜索接口作为本次的测试实例
接口地址:http://www.baidu.com/s?ie=utf-8&wd=jmeter性能测试
请求参数:ie-编码方式,默认为 utf-8;wd-搜索词
返回结果:搜索结果,可以通过校验结果中是否含有搜索词wd来判断本次请求成功或失败
JMeter 脚本编写添加线程组
添加线程组各个属性详解:
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程,设置多少虚拟用户数在这里也就是设置多少个线程数。
Ramp-Up准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动1 ...
Charles学习
Charles 介绍简介Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析
除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议
Charles 主要功能将 Charles 设置为系统代理Charles 是通过将自己设置成代理服务器来完成封包截取的,所以使用 Charles 的第一步是将其设置成系统的代理服务器。具体操作如下:
需要注意的是,Chrome 和 Firefox 浏览器默认并不使用系统的代理服务器设置,而 Charles 是通过将自己设置成代理服务器来完成封包截取的,所以在默认情况下无法截取 Chrome 和 Firefox 浏览器的网络通讯内容。如果需要截取的话,在 Chrome 中设置成使用系统的代理服务器设置即可,或者直接将代理服务器设置成 127.0.0.1:8888 也可达到相同效果。
过滤网络请求在通常情况下,我们需要对网络请求进行过滤,只监控指定目录服务器上发送的请求。有 ...
pytest学习
pytest 基本使用pytest 介绍pytest 是 python 语言下的一种单元测试框架,与 python 自带的 unittest 单元测试框架类似,相比于 unittest 框架使用起来更简洁,效率更高(java语言下的单元测试框架是junit和testng)
pytest 可以结合 requests 实现接口测试,结合 selenium/playwright、appium 实现自动化功能测试。
pytest 特点:
具有unittest绝大部分功能,非常容易上手,入门简单,功能灵活,文档丰富,文档中有很多实例可以参考
具有强大灵活的fixture固件,支持简单的单元测试和复杂的功能测试;
支持参数化(parametrize)、数据驱动
执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败(xfail)
支持重复执行(rerun)失败的case
支持运行由nose ,unittest编写的测试case
支持执行部分用例(比如:根据标记,或者features、stories,后者一来allure - pytest插件)
具有很多第三 ...
TestNG学习
TestNG 使用流程1、在 pom. xml 文件中添加如下依赖:
123456789101112131415161718<?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>org.example</groupId> <artifactId> ...
Selenium 学习
Selenium 介绍Selenium 支持多平台、多浏览器、多语言去实现自动化测试,是一个开源和可移植的 Web 测试框架,支持并行测试执行,从而减少了时间并提高了测试效率。利用它,我们可以编写相关的自动化程序,让程序完全像人一样在浏览器里面操作 Web 界面,比如模拟鼠标点击、模拟键盘输入等等。不但能够操作 Web 界面,还能从 Web 中获取信息,并且相对来说,使用 Selenium 来获取信息更加简单,它的基本原理是我们编写自动化程序之后利用浏览器驱动直接对浏览器进行操作,只要我们用户能在浏览器上获得的信息使用 Selenium 都可以获得。
搭建 Selenium 环境1、首先要求 Java 换件要在 1.8 版本之上
2、检查 Chrome 的版本,同时在 Google 驱动的官网上下载对应版本的驱动 https://googlechromelabs.github.io/chrome-for-testing/#canary
3、解压下载好的驱动压缩包,将下载好的c / hromedriver.exe放到java系统环境变量下
Selenium 使用基本使用1、首 ...
Spring学习
Spring 基本介绍什么是 Spring 框架Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
Spring 框架指的是 Spring Framework,它是很多模块的集合,使用这些模块可以协助我们进行开发。比如说 Spring 支持 IOC 和 AOP、对数据库进行访问、集成第三方组件(电子邮件,任务,调度,缓存等等)、单元测试、支持 RESTful Java 应用程序的开发。
[!note] Spring 框架的优点
IOC 和 DI 的支持:Spring 的核心就是一个大的工厂容器,可以维护所有对象的创建和依赖关系,Spring 工厂用于生成 Bean,并且管理 Bean 的生命周期,实现高内聚低耦合的设计理念。
AOP 编程的支持:Spring 提供了面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等切面功能。
声明式事务的支持:支持通过配置就来完成对事务的管理,而不需要通过硬编码的方式,以前重复的一些事务提交、回滚的 JDBC 代码,都可以不用自己写了。
快捷测试的支持:Spring 对 Junit ...
Select语句执行过程
一条 SQL 执行语句如下
1select * from book where id = 1;
那么,在执行一条这样的语句时,其内部都发生了什么?
MySQL 的执行流程下图展示了一条 SQL 语句的执行流程:
可以看到, MySQL 的架构共分为两层:Server 层和存储引擎层
其中,
Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现,主要包括连接器,查询缓存、解析器、预处理器、优化器、执行器等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等。)都在 Server 层实现。
存储引擎层负责数据的存储和提取。支持 InnoDB、MyISAM、Memory 等多个存储引擎,不同的存储引擎共用一个 Server 层。现在最常用的存储引擎是 InnoDB,从 MySQL 5.5 版本开始, InnoDB 成为了 MySQL 的默认存储引擎。我们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎支持的索引类型也不相同,比如 InnoDB 支持索引类型是 B+树,且是默认使用,也 ...
从输入 URL 到页面展示
从输入 URL 到页面展示
简单流程:
在浏览器中输入指定网页的 URL。
浏览器通过 DNS 协议,获取域名对应的 IP 地址。
浏览器根据 IP 地址和端口号,向目标服务器发送一个 TCP 连接请求,通过三次握手建立 TCP 连接。
浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容。
服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器。
浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。
浏览器在不需要和服务器通信时,可以主动关闭 TCP 连接,或者等待服务器的关闭请求。
HTTP 请求一条 URL 由以下几个部分组成:
在对 URL 进行解析之后,浏览器确定了 Web 服务器和文件名,然后会使用这些信息来生成 HTTP 请求消息。
DNS通过浏览器解析 URL 并生成 HTTP 请求消息后,需要委托操作系统将消息发送给 ...
Swap 交换空间
这两天正在部署短链接项目,我所买的服务器是 2c4g,以为其绰绰有余,且过让人大跌眼镜,在启动服务之后便发现其内存直接爆满,导致服务器卡死。在准备买 4c8g 服务器之时,我偶发现了使用交换空间解决服务器内存不足的问题,确实有很大改善,现将步骤总结于此。
检查系统的 Swap 信息首先我们需要检查系统的存储,看看是否已经配置过 swap。一个系统可以设置多个 swap 文件或分区,不过一般来说一个就够了。
使用swapon命令可以检查系统是否已经配置过swap,这是一个通用的swap工具。使用-s标签可列出当前存储设备上的swap使用情况:
1swapon -s
如果该命令没有返回出结果,则代表该系统尚未配置过 swap。
或者,我们也可以使用free工具来查看系统的整体内存使用情况,这里可以看到内存和swap的使用状态(显示单位为MB):
1free -m
检查可用的存储空间通常,我们建立一个单独的分区作为 swap。然而有时候由于硬件或软件的限制,新建分区的方式无法实现,这种情况下就可以建立一个 swap 文件来实现同样的功能。
开始之前,先检查一下磁盘的可用空间。输入如下指令 ...
