
java
文章平均质量分 58
Lion...
攒点C币不容易
展开
-
JSch, connection is closed by foreign host
1. 问题多线程连接SFTP时, 程序抛出异常com.jcraft.jsch.JSchException: connection is closed by foreign host at com.jcraft.jsch.Session.connect(Session.java:269) at com.jcraft.jsch.Session.connect(Session.java:183)2. 分析单线程连接正常, 多线程异常, 连接数的变化导致SFTP不同反应, 猜测是sshd对连接有限制原创 2022-03-31 09:47:57 · 5621 阅读 · 1 评论 -
Spring Boot, 配置https
1. 概述Spring Boot配置https, 共2步获取SSL证书在spring boot配置ssl2. 生成自签名证书2.1. jks证书keytool -genkeypair -alias springboot -keyalg RSA -keysize 4096 -storetype JKS -keystore springboot.jks -validity 3650 -storepass password2.2. pkcs证书keytool -genkeypair -ali原创 2022-03-30 09:48:14 · 442 阅读 · 0 评论 -
Maven打可执行jar包
1. 需求maven默认package打包, 只包含项目代码, 没有引入项目代码依赖的lib包, 执行时缺包那么如何将依赖的lib文件打进jar包呢?2. Assembly插件assembly插件用于maven工程打包, 将项目代码与依赖lib包打进一个jar文件中单词: assembly, 组装, the process of putting together the parts of sth such as a vehicle or piece of furnitureThe Ass原创 2022-03-23 10:43:17 · 1149 阅读 · 0 评论 -
Java, 反射
1 概述白盒测试时,工具类最容易对付,直接调用类方法即可;public修饰的实例方法也还行,先实例化后调用;但是遇到private修饰的方法就头大了,虽然可以在类里写个main方法调用,但破坏了代码本身的完整性,功能代码与测试代码混在一起不过,反射让我们彻底告别这个问题2 基本成员由class展开,类有构造函数(Constructor),类有成员变量(Field),类还有方法(Method)然后使用public、private、protected、static、final等来修饰当然还有注解,参原创 2022-01-11 08:55:51 · 112 阅读 · 0 评论 -
Java, 加载外部数据
1 txtJava7新引入了Path, 用于取代FileFiles提供了文件的基本操作, 包括基本属性, 输入输出流Path path = Paths.get(basePath, "data.txt");Files.lines(path, StandardCharsets.UTF_8).forEachOrdered(p -> { // do some action});2 xml使用Dom4j按DOM方式解析XML文件, 分成三种节点: Element, Attribue,原创 2022-01-11 08:55:27 · 239 阅读 · 0 评论 -
JavaFX, GUI库 - 用户交互(2)
作为一名优秀的CRUD工程师, 不仅要会 查询 和 删除, 还得会 新增 和 修改1. 新增/编码页面使用ScenceBuilder创建页面布局PersonEditView.fxml<?xml version="1.0" encoding="UTF-8"?><?import javafx.geometry.Insets?><?import javafx.scene.control.Button?><?import javafx.scene.cont原创 2022-01-11 08:52:57 · 351 阅读 · 0 评论 -
JavaFX, GUI库 - 用户交互(1)
页面数据展示出来后, 用户如何与工具互动呢?1. 抽取数据正常情况下, 数据来自于文本, 或者直接读取数据库, 这里单独抽取成一个类PersonDB, 以模拟相同的效果import com.leon.model.Person;import javafx.collections.FXCollections;import javafx.collections.ObservableList;public class PersonDB { private volatile static Per原创 2022-01-11 08:52:19 · 330 阅读 · 0 评论 -
JavaFX, GUI库 - MVC
上一篇介绍了项目的基本布局单纯的静态展示无法满足日常需求, 还需增加数据的联动, 让项目活起来1. 创建model与java bean类似, 数据类型上有些许差异 – StringProperty, IntegerProperty等package com.leon.model;import javafx.beans.property.IntegerProperty;import javafx.beans.property.SimpleIntegerProperty;import javafx原创 2022-01-11 08:51:46 · 458 阅读 · 0 评论 -
JavaFX, GUI库初识
1. 介绍曾以为java不适合桌面应用程序的开发, 直到遇到JavaFX它采用MVC的设计模式, 有过web开发经验的人极易上手JavaFX is an open source, next generation client application platform for desktop, mobile and embedded systems built on Java.2. Scene Builder可视化页面设计, 让元素布局不再复杂下载地址: JavaFX Scene Builde原创 2022-01-11 08:51:13 · 581 阅读 · 0 评论 -
RMI, 远程方法调用
RMI = Remote Method Invocation, 远程方法调用机制: 允许一个JVM对象调用另一个JVM对象方法这种机制特别适合分布式应用, 比如JMeter的分布式压测1. 架构图RMI registry, 命名空间, 供server注册RMI server, 具体的实现, 被调用的对象RMI client, 从registry的命名空间中查找注册的方法, 实现远程调用2. 样例角色之前的关系如下, 代码逻辑大体一致2.1. 定义远程调用接口import java.原创 2022-01-11 08:50:29 · 843 阅读 · 7 评论 -
Selenium + Cucumber,行为驱动
前言Cucumber为BDD测试框架, 在于以直白的语言表达业务场景, 统一产品经理, 开发人员, 测试人员, 运营人员等角色的系统认知关于Cucumber的基础知识可以参阅官网: https://docs.cucumber.io/guides/Selenium应该都比较熟悉, 通过webdriver实现UI自动化的测试工具总结:虽然Scenario要求每一个Step都直白易懂, 不要引入代码层面的元素, 但考虑到页面元素众多, 不得不考虑参数化由于上一条的原因, 整体风格更像是关键字驱动无原创 2022-01-10 09:04:55 · 731 阅读 · 0 评论 -
JMeter 5.0:分布式压测部署,多IP时配置
1. 问题JMeter分布式压测时,可能出现如下错误2021-12-08 09:24:45,935 ERROR o.a.j.s.RemoteTestListenerWrapper: Exception on testEnded on host 172.31.138.107java.rmi.ConnectException: Connection refused to host: 169.254.77.99; nested exception is: java.net.ConnectEx原创 2022-01-06 08:46:35 · 1199 阅读 · 0 评论 -
JMeter 5.0: 分布式压测部署
jmeter工具在使用多线程对待测目标产生压力的同时, 对自身也会产生负荷然而服务器的资源是有限的, 如CPU, 内存, 可用端口, 网络IO等等, 如何实现横向扩展, 这是一个问题借用分布式思想, 将压力转移到多台服务器上, 整体资源提升, 那么能产生的压力也会更大jmeter的分布式压测, 是通过RMI机制, 将压测任务分发到多个执行节点, 下面看下具体配置RMI, 请参考RMI, 远程方法调用 - 简书 (jianshu.com)1. 拓扑图2. 执行机配置执行机, 有人喜欢叫se原创 2022-01-06 08:46:02 · 688 阅读 · 0 评论 -
JMeter5.0:vars&props差异
在使用JSR223 Sampler和BeanShell Sampler时,会接触到二个变量:vars,props它们有什么区别呢?本质作用域操作对象varsjmeter variable单线程getObject,putObjectpropsjmeter properties全局get,put1. vars1.1. putput只支持string类型,当我们put整形时,jmeter抛出异常如果需要设置非string类型数据,请使用putObject原创 2022-01-06 08:45:26 · 490 阅读 · 0 评论 -
JMeter 5.0:造测试数据(加载第三方包)
1.问题通过jmeter内置函数造出来的数据,不够贴近真实,展示时效果不太友好比如手机号,使用随机11位数字的方式实现,但与真实的情况相差甚远2.分析如果数据工厂的库就好了,根据不同数据的定义规则,自动生成相对真实的数据python有Faker库,google后发现java有个类似的库:JavaFaker将jar包加载到jmeter中Library中,就能轻松使用3.实现3.1.jar包下载进入maven仓库(https://mvnrepository.com/),分别下载javafa原创 2022-01-06 08:44:44 · 488 阅读 · 0 评论 -
JMeter 5.0:造测试数据(读取DB)
1.问题通过jmeter内置函数造出来的数据,是零散的,是毫无关联的想要获取关联的数据,该如何处理呢?2.分析数据存储于DB,通过JOIN操作,将相关属性关联随机读取一行,按需取用即可3.实现以获取省市县地理信息为例流程如下3.1.查询省市县数据查询地理信息,将结果作为对象输出3.2.将省市县数据作为全局变量全局变量的目的,是避免每个线程单独查询,影响性能def areas = vars.getObject("areas")def random = new Random()原创 2022-01-06 08:43:46 · 213 阅读 · 0 评论 -
JMeter5.0:造测试数据
1. 问题为什么需要造测试数据?如果对数据无特别需求,请忽略本文如何简单快速构造测试数据?2. 拆解将问题拆解如下:快速,借助多线程数据多样性,通过随机函数实现输出,按既定格式编排数据,然后追加到文件jmeter完全满足上述三个要求:线程池,Random内置函数,groovy写文件3. 实现一个简单的流程大体如下自定义变量,主要定义文件名称,分隔符等,不作赘述3.1. 初始化操作定义每个线程的输出文件,并存储于上下文内(vars变量,避免每次写文件时,重新new对象)de原创 2022-01-06 08:42:49 · 444 阅读 · 0 评论 -
JMeter 5.0:解析json
1 概述在SOAP协议流行的年代, XML在数据交换领域顶起了一片天后来随着REST的兴起, JSON受到越来越多的青睐JSON相较于XML, 不冗余, 占用空间少, 序列化快, 且更适合javascriptJMeter是由纯Java编写, 本身不自带解析json的工具包, 如fastjson, 手动添加到ext目录当然可行, 不过有更简便的方法为何不用呢JSON ExtractorRegular Expression ExtractorJSR223 PostProcessor2 准备原创 2022-01-06 08:41:34 · 791 阅读 · 0 评论 -
JMeter 5.0: 自定义变量
1. 前言在使用JMeter的过程中, 常用的定义变量入口有User Defined Variables(UDV)和CSV Data Set ConfigUDV比较好理解, 毕竟没有选项但CSV Data Set Config就麻烦一点, 配置就跟完型填空一样2. 结论UDV变量所有线程共享, 同名变量取第一个, 且可读取jmeter.propterties参数CSVIgnore first line, 即是否忽略表头, 如果为true, 过滤第一行Allow quoted data,原创 2022-01-05 09:09:25 · 1068 阅读 · 0 评论 -
JMeter 5.0:编写Java Request
1 前言现有的sample已基本能满足日常使用,但如果有些特殊要求,比如远程连接服务器,或者操作新型NoSQL库,就得专门定制Java Request采样器要求实现org.apache.jmeter.protocol.java.sampler.JavaSamplerClient接口,或者继承AbstractJavaSamplerClient抽象类系统自带JavaTest、SleepTest 2个Java Request采样器2 JavaSamplerClient每个线程,JMeter都会创建一个J原创 2022-01-05 09:08:32 · 319 阅读 · 0 评论 -
JMeter 5.0:基本介绍
1 Test PlanRun Thread Groups consecutively,一次只运行一个线程Functional Test Model,JMeter将记录每个sample的返回结果,会影响性能,所以一般用来验证配置是否正确2 Thread Group每个线程将独立执行Test Plan,效果上模拟N个虚拟用户Thread Properties:Number of Threads,线程数(或者并发用户数)Ramp-Up Period,单位秒,指启动全部线程总耗时;比如10个线程原创 2022-01-05 09:07:49 · 1034 阅读 · 0 评论 -
Testng(四):ExtentReports定制报告
testng自带的report简直不忍直视,不仅不好看,子文件还很多于是我们迫切需要一款高大上的report模板工具,ExtentReports正是其中一个先来看看它的效果,既有单条用例的执行详情,也有图表统计,而且结果只有一个html文件,便于邮件发送以下示例参考自官网,略有微调public class ExtentReportsListener implements IReporter { private final String OUT_PUT = "test-output/";原创 2022-01-05 09:01:12 · 719 阅读 · 0 评论 -
Testng(三):加载外部数据
1 概述对于一个函数或者一个流程,给定一个输入,应当返回一个结果输入指参数或条件的组合,也就构成不同的测试场景结果即程序对输入的处理,将其与预期结果比对,便可知当前测试场景功能的正确性当这些数据以外部文件的形式存储时,就可以很方便地修改追加,而不用重新调整代码2 @DataProvider在Testng中,@DataProvider负责向测试方法提供数据,返回Object[][]对象于是可以考虑,在@DataProvider方法中,实现读取外部文件,并将文件的内容以Object[][]形式返回原创 2022-01-05 09:00:35 · 505 阅读 · 0 评论 -
Testng(二):监听
1 概述监听(Listeners),捕捉Testng的行为,并支持修改,用于定制化,如日志输出、自定义报告监听器如下:IAnnotationTransformer,只支持@Test注解转换IAnnotationTransformer2,支持@Test,@DataProvider,@Factory等注解转换,比第一代更全面IHookable,替代@Test测试方法,并提供回调函数,常用于权限校验IInvokedMethodListener/IInvokedMethodListener2,监听be原创 2022-01-05 08:59:53 · 632 阅读 · 0 评论 -
Testng(一):注解
1. 执行顺序suit -> class -> method,包含before和after两种形式,刚好对应各阶段的初始化(setup)和清理(teardown)另外test 和 groups可以定义不同的组合,比如指定某个功能模块(package),或者以提测版本号将测试类/方法分组import org.testng.Assert;import org.testng.annotations.*;public class App { private void log(Stri原创 2022-01-05 08:58:10 · 616 阅读 · 0 评论