JUnit是一个基于Java的开源框架,可帮助测试人员执行单元测试。JUnit主要用于测试应用程序的每个单元或组件,例如类和方法。它有助于编写和运行可重复的自动化测试,以确保项目代码按预期运行。还可以使用JUnit执行Selenium自动化测试用例,以测试Web应用程序或网站。 在我们开始讨论Selenium中的JUnit注解之前,让我们快速回顾一下JUnit在测试人员社区中流行的原因。 为什么JUnit在测试人员中如此受欢迎 毫无疑问,JUnit被认为是顶级Java测试框架之一。以下是JUnit之所以流行的主要原因: 开源框架 提供与Eclipse、IntelliJ等IDE的集成,可以快速...

  YgmmQQ65rPv4   2023年11月02日   26   0   0 Java测试方法测试用例

前段时间我关注了一篇文章,分享如果使用并发压测发现BUG。突然想起一个话题: 线程不安全需要多少QPS压测才能发现BUG? 我接触到的并发缺陷绝大部分是因为线程安全问题导致的,还有一些数据库锁的问题(这个不擅长)这里就不分享了。 关于Java的一些线程安全的问题,可以参考旧文: 操作的原子性与线程安全2019-07-16 快看,i真的不安全2019-07-19 原子操作组合与线程安全2019-07-22 线程安全集合类中的对象是安全的么?2020-02-24 Lambda表达式在线程安全Map中应用2020-06-01 下面我们来聊聊上面提到的问题,因为这涉及到不同类型的BUG需要多少QP...

  YgmmQQ65rPv4   2023年11月02日   22   0   0 i++线程安全线程模型

今天分享Java对象序列化的不同方法,并对不同序列化方式的性能进行基准测试。 关于持久队列来讲,必须将Java堆内存的对象转换成文件中的二进制数据,对象序列化的性能将显著影响整体的性能表现。相当多的高性能框架都会在序列化和反序列化上下功夫优化性能。本文使用了开源框架ChronicleQueue提供的能力进行序列化和反序列化对比测试。 数据传输对象 在本文中,我用一个对象类FunData,作为DataTransferObject(以下简称DTO)的数据传输对象,其中包含具有较多字段的信息。相同的原则适用于任何其他业务领域的其他DTO。 abstractclassFunDataextendsSel...

  YgmmQQ65rPv4   2023年11月02日   42   0   0 Java字段序列化

队列通常是软件设计模式中的基本组件。但是如果每秒接收到数百万条消息,改如何处理?如果多个消费者都需要能够读取所有消息,又改如何处理?难道需要把所有消息的数据都放在内存中吗?这样JVMGC又表现如何? 之前我写过几个流量回放模型: 基于时间戳的日志回放引擎2022-08-22 千万级日志回放引擎设计稿2021-12-30 虽然方案2已经被更优秀的方案替代,但是思路相同,均是把日志进行格式转换之后存放(这一点跟goreplay略有相似),在千万日志级别,我是直接放在内存中。大约1千万日志的大小约为1G,这样来说对JVM内存压力并不高,对于GC的影响也可以接受,目前的测试结果是YoungGC1次...

  YgmmQQ65rPv4   2023年11月02日   20   0   0 Java性能测试时间戳

我在项目里面都是Java和Groovy混这写,之前逻辑是框架和工具类用Java,脚本用Groovy。但是随着时间推移,Groovy相对Java的优势过于明显,搞得自己把自己搞混乱了。其中遇到了一些兼容性问题,典型的就是Java的function和Groovyclosure之间的兼容性问题。 Javafunction包里面很非常多实现类,其中主要区分的返回和参数个数,然后有很多具体返回和参数类型的实现类。总之就是比较多,实现逻辑倒是不复杂。 相比之下,Groovyclosure就非常简单,一个实现即可满足所有需求,相比Java的使用范围更广。 问题来了,两者不是完全相互兼容的,Java和Groo...

  YgmmQQ65rPv4   2023年11月02日   29   0   0 Java兼容性问题实现需求

随着软件需求的变化比以往任何时候都更快更频繁,越来越多的团队正在采用敏捷方法来实现更短的开发周期和更快的迭代时间。 在这个瞬息万变的IT环境中,应用程序的软件质量比以往任何时候都更加重要,手动测试似乎很耗时、重复并且容易出现人为错误。从手动测试转向自动化测试的必要性非常适合快速变化的技术环境。与手动测试相比,自动化测试在很大程度上可归因于更高的测试覆盖率以及更早期发现和解决问题的灵活性。 虽说如此,手动测试在软件开发生命周期中的永远占据一席之地;尽管它必须与强大的自动化测试策略相结合。随着越来越多的组织进行这种转变,从手动测试到自动化测试的转变是当务之急。 从手动测试转向自动化的想法似乎令人生...

  YgmmQQ65rPv4   2023年11月02日   25   0   0 运行测试测试用例自动化测试

前文说道从手动测试到自动化测试(上)2022-10-10,接下来分享后面的内容。 自动化什么 对于初学者来说,重要的是要记住自动化测试并不是适用于所有测试场景的灵丹妙药。但是,通过注意下面描述的以下几点,可以选择要自动化和不自动化的内容: 成本 假设你有频繁的发布进入。在这种情况下,首先自动化冒烟测试和回归测试更为重要,因为这将有助于加快测试周期,缩短上市时间,减少人工干预。 优先级 这很重要,因为测试人员可以根据业务需求和复杂性将首先需要自动化支持的功能与其他功能分开。业务优先级较低的区域可以从自动化范围中删除。 什么可以自动化 这个因素取决于许多领域,比如可用性方面,这些领域不能自动化,其...

在很早之前我就有个想法,如果有一个服务能把我的请求放大N倍发送给服务端,那就可以更加灵活地将接口的功能测试用例和性能测试用例结合在一起。只需要设置一些参数,就可以在本地控制请求QPS,比如每秒100次,然后通过服务器放大100倍,那么请求到被测服务的QPS就是10000倍了。 但是由于当时技术水平比较菜,主要考虑到:1、当时面临被测服务的QPS有限,不需要这个功能;2、为了这个需求写个用不到的服务,无法落地。所以就放弃了。 在最近更新DCS_FunTester分布式压测框架的时候,我又回想起来这件事情,如此前面两个考虑的因素基本解决。说干就干,先上再说。计划主要用于以QPS为主要标准的压测,而...

  YgmmQQ65rPv4   2023年11月02日   65   0   0 Java性能测试json

在接口测试过程中,某个线程连续两次请求中间都会消耗的时间,线程在收到响应进行第二次请求的时候会消耗一些时间,比如进行结果验证,日志存储,或者进行数据统计等等。 一般来讲这些时间都是微秒级别的,偶尔会遇到一些毫秒级别的,比如这次:线程安全类在性能测试中应用,中间参数签名的消耗时间在10ms级别,如果在并发的情况下甚至达到100ms,而且对本机的CPU资源消耗也比较厉害。 解决办法:提前将数据签名,以空间换时间,先把所有的参数签名完毕,然后再去发送请求。 中间用到了线程安全的队列LinkedBlockingDeque,这个可以帮助我们解决掉数据可能会重复的问题。 新版发代码如下: package...

  YgmmQQ65rPv4   2023年11月02日   20   0   0 Java线程安全数据

在去年年初换过工作开始专注做性能测试,其中有一项很大的挑战就是FunTester测试框架性能是否可以支撑公司现在的业务。之前有文章分享过如何突破职业瓶颈,其中讲到如何负责服务的QPS上升一个数量级是一个非常大的挑战。最近在这个问题上,我有了一些新的发现,分享一下自己对FunTester测试框架使用的Java+Groovy这对组合性能方面的认识。 首先谈谈Java语言的性能,在此之前我在本地做过一系列的单机测试10万QPS,K6、Gatling和FunTester终极对决!、单机12万QPS——FunTester复仇记,对此我还是挺满意的。后来在工作用应用得到了单个进程6w的QPS,也算是符合预...

  YgmmQQ65rPv4   2023年11月02日   62   0   0 Javago语言性能测试

在批量使用测试账号的时候,需要对账号进行标记,一般用username字段,之前的策略是统一的名称+用户编号(测试用户的编号,非用户id),由于需求变更,用户username不允许使用数字了,所以需要把数字转成汉字来进行标记。下面分享集中方法: privatestaticStringchange1(intn){//数字转换成汉字表示 String[]c={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; Stringss=n+"";//把输入的内容转换成String类型字符串 StringBuilderbuilder=newStringBuilder(""); ...

  YgmmQQ65rPv4   2023年11月02日   17   0   0 脚本语言数字转换类型转化

在之前文章Java自定义异步功能实践中,我仿造Go语言中的go定义了fun作为Groovy/Java异步执行的关键字。通过一个定长的线程池执行异步任务。 经过一段时间的使用,效果非常好,既能满足当下的需求,在实现的过程中也锻炼了自己对线程池的理解。通常的使用场景分为:异步上报数据、大量任务需要多线程执行、做简单的并发测试。 但是来了一个新活儿,需要控制请求的QPS,而非通过线程池的大小控制并发的压力。这样第一能够更加准确,第二能适配不同的耗时的任务。 说来就来,经过查询资料,很多限流框架或者组件都比较好地实现了这个功能。但是功能设计相对我的需求来说,太复杂,太强大了。有点大材小用的感觉。所以查...

  YgmmQQ65rPv4   2023年11月02日   45   0   0 Java异步任务线程池

这是一篇有关GroovyShell的帖子,以及它如何在日常工作中为您提供帮助(只要您是软件开发人员)。无论您使用哪种编程语言或技术,都可以从GroovyShell中受益。唯一真正的要求是您能够编写(和阅读)小段Groovy代码。 入门 我认为Groovyshell的目的最好由官方文档来描述: GroovyShell,又名。groovysh是一个命令行应用程序,可轻松访问以评估Groovy表达式,定义类并运行简单的实验。 GroovyShell包含在Groovy编程语言的发行版中,可以在<groovyhome>/bin中找到。要启动GroovyShell,只需从命令行运行groo...

  YgmmQQ65rPv4   2023年11月02日   39   0   0 编程语言应用程序命令行

最早提到接口测试的优点时,有一个就是执行效率提升,可能是UI层面执行的N倍。但是今天我要分享的这个案例这个优点的升级版本。 某个接口参数倒是不多,但是每个参数的范围略大,最大的将近500个枚举范围,小的也是20个。如果把所有参数组合穷举完,粗略估计可能10亿级别的。 需求就是要把这部分所有参数组合都遍历进行测试,然后我就开始了踩坑了。 初版方案 一开始的想法就是多个循环嵌套,然后并发发起请求,实现起来非常简单方便。如下: @Log4j2 classTTextendsMonitorRT{ staticvoidmain(String[]args){ ["types参数集合"].each{ def...

  YgmmQQ65rPv4   2023年11月02日   32   0   0 Java性能测试json

最近在写一个Springboot项目时,需要接入Swagger功能,过程中遇到了几个问题,其中就数@requestBody不兼容Swagger的情况最难受,其他还有遇到问题,这里整理一下,分享一下解决方案。这里希望把Swagger当做一个接口文档展示和接口调试的工具,而且支持测试环境和上线后的环境。 @requestBody兼容性问题 关于这个问题网上搜到的两个方案排名靠前: 通过环境配置,分开线上和线下环境,避开这个兼容性问题 通过修改参数解析器解决 这里复制一下大神的分析结论: 根本问题是springmvc中独立的参数解析器功能和swagger功能上的冲突,一个要求不能加上@Requ...

  YgmmQQ65rPv4   2023年11月02日   26   0   0 解析器兼容性问题spring

前几天分享过固定QPS异步任务功能初探使用了缓存线程池,利用java.util.concurrent.Semaphore实现了固定QPS的异步任务。 昨天录制视频的时候,谈到第二种放弃的实现思路,就是通过将任务丢到一个队列中,然后通过一个线程从线程池取任务,丢到线程池里面执行。今天早上仔细想了想还是很值得实现了,能够很好地降低线程数,刚好我之前在Java自定义异步功能实践2021-10-19中用到了守护线程,正好充当这个任务管理线程。 下面就是具体的实现: 入口方法 这里依然写到了com.funtester.frame.SourceCode工具类中,关键字我用看funer,区别去之前的funn...

  YgmmQQ65rPv4   2023年11月02日   57   0   0 Java异步线程线程池

在当今的企业环境中,软件测试不再被视为不必要的投资;相反,它已经上升到一种需要而不是奢侈品的水平。随着市场的不断变化和竞争的加剧,企业必须做一些让他们与竞争对手区分开来的事情。 为了使自己与众不同,公司必须提高效率、加速发展并以具有成本效益的方式提供质量。他们可以通过优秀的产品将他们的项目提升到一个新的水平。这增强了他们的潜在客户和当前客户对其产品的信赖,这可以通过强大的回归质量保证系统来实现。 自动化测试是软件开发周期中最严格的软件测试,几乎每个组织都在使用它。自动化测试可以让公司以更快、更高质量的软件发布。测试自动化让测试人员从单调的任务中解脱出来,同时也加快了整个测试过程。 然而,自动化...

质量分析师的工作绝非易事。开发人员通常不喜欢他们,没有人喜欢代码中错误被拿出来公开。但是QA的工作在软件开发生命周期中非常有趣且非常重要。尤其是在当前的数字化转型时代,随着智能手机用户数量的日益增加以及组织越来越倾向于创建移动应用程序,QA扮演着非常重要的角色。下面分享如何确保移动应用程序高质量部署所需的手动测试策略。 选择设备类型 开始测试阶段之前的一项重要工作是确定要在其上执行测试的设备数量。对于iOS设备,设备数量是有限的。但Android系统生态中,可以运行Android系统的设备数不胜数。 使用分析工具研究市场,找出最终用户最常使用的设备。 如果项目的预算估算足够,请为移动测试团队...

  YgmmQQ65rPv4   2023年11月02日   17   0   0 移动设备应用程序android

手动测试人员应该权衡测试自动化相对于手动测试的好处,并且即可开始行动。下面我介绍一下从手动测试到自动化测试转换的5步指南。 步骤1:查找合适的自动化测试用例 测试自动化在重复测试中发挥着极其重要的作用。可以在下表中找到最适合自动化的测试类型列表。 测试类型 自动化有什么帮助 回归测试(包括单元测试和端到端测试) 减少工作负载,帮助提升应用程序的可信度 验收测试 应该使用支持跨浏览器/平台测试的工具自动化,以提高性能一致性 API测试 测试自动化通过在每次API调整时启动API回归测试来帮助更早地检测BUG 步骤2:找到适合的工具或框架 工具选择过程要求测试人员注意所...

  YgmmQQ65rPv4   2023年11月02日   21   0   0 测试人员测试自动化用例

本文介绍并分析了100道常见SQL面试题,主要分为三个模块:SQL初级查询、SQL高级查询以及数据库设计与开发。 本文主要使用三个示例表:员工表(employee)、部门表(department)和职位表(job)。 下面是这些示例表的结构: 部门表(department),包含部门编号(dept_id)和部门名称(dept_name)字段,主键为部门编号。 职位表(job),包含职位编号(job_id)和职位名称(job_title)字段,主键为职位编号。 员工表(employee),包含员工编号(emp_id)、员工姓名(emp_name)、性别(sex)、部门编号(dept_id)、经...

  YgmmQQ65rPv4   2023年11月02日   31   0   0 子查询数据SQL
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~