软件测试--如何使用har2case和HttpRunner + Allure生成测试报告
什么是har2casehar2case 是一个开源工具,用于将 HTTP Archive(HAR)文件转换为 YAML 或 JSON 格式的测试用例文件。它主要用于自动化测试领域,特别是与 HTTPRunner 测试框架结合使用时,可以快速生成高质量的测试用例,提高 API 测试的效率和准确性。该工具基于 Python 开发,支持多种参数配置,如文件路径、日志级别和输出格式,适用于 API 自动化测试、性能测试、回归测试和跨平台测试等多种场景。
Har2Case安装教程
首先要先安装python,配置好环境变量
用以下指令查看python版本
1python --version
使用以下指令安装har2case
1pip install har2case
安装完成后使用以下指令确认安装是否成功
1har2case -V
执行上述指令后,若碰到以下错误,则需要根据python版本安装对应模块。
1234567Traceback (most recent call last): File "<frozen runpy>", line 198, in ...
Java--业务场景:在Spring项目启动时加载Java枚举类到Redis中
前言
新的一年即将来到,回首2023年,也是学习了许多,不断进步。今天带来的是项目中遇到的一个业务要求处理方法总结:项目具有很多的枚举类,而这些枚举类在前端页面中需要作为下拉框选项等组件被前端获取。为了后续获取枚举值更加方便快捷,我们在项目启动的时候将所有Java枚举类用一个hash存入Redis中,在提供一个接口,使得前端可以从Redis获取自己想要的枚举值。下文将讲解实现步骤。
实现项目启动时加载枚举值到Redis1. 定义EnumInterface接口
定义EnumInterface接口,实现该接口的枚举类会在后续被识别,在项目启动时加入redis123456789public interface EnumInterface { String getCode(); String getDesc(); //枚举类描述 该值后续会与枚举类名拼接 成为Redis hash的key String enumDesc(); }
2. 创建EnumDTO
创建EnumDTO,将存放每个枚举类对象,同一个枚举类的所有对象最终会放入同一个列表, ...
Java--业务场景:SpringBoot 通过Redis进行IP封禁实现接口防刷
前言
在实际项目中,有些攻击者会使用自动化工具来频繁刷新接口,造成系统的瞬时吞吐量提高,给系统带来很大的压力。要保障服务的安全性,需要防止重要的接口被恶意刷新,接口防刷的方式可以通过设置验证码,IP封禁,安全参数校验等方法。
本文主要采用Redis将同一时间内频繁访问同一接口的IP封禁一段时间的方式来防止接口被恶意刷新。
具体实现步骤1. 定义自定义注解
添加了该注解的接口,将开启接口防刷功能。 12345678910111213141516171819202122/** * 防刷注解 */ @Target(ElementType.METHOD) @Documented @Retention(RetentionPolicy.RUNTIME) public @interface AccessLimit { /** * 表示规定的时间范围 */ int seconds(); /** * 表示在规定的时间范围内最多可被访问的次数 */ int maxCount(); /** * 表示该接口是否需要登录,默认为tr ...
Java -- 业务场景:获取请求的ip属地信息
前言
很多时候,项目里需要展示用户的IP属地信息,所以这篇文章就记录一下如何在Java Spring boot项目里获取请求的IP属地
步骤在pom文件中引入下列依赖123456<!-- 该依赖可以根据ip地址获取该ip相关的信息 --><dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-ip2region</artifactId> <version>2.5.6</version></dependency>
IpUtil工具类
该工具类对HttpServletRequest解析,得到ip地址字符串12345678910111213141516171819202122232425262728293031323334353637public class IpUtil { /** * 获取客户端ip * * @param request ...
Mybatis框架--Mybatis中的#{}和${}的区别是什么?
Mybatis中的#{}和${}的区别是什么?
Mybatis提供了#和$两种占位符,都是实现动态SQL的方式,通过这两种方式可以把参数传递到xml里面,在传递以后,执行操作之前,Mybatis会对这两种占位符进行动态的解析。
==#号占位符==等同于JBDC里面的 ? 占位符,它相同于向PreparedStatement里面的预处理语句设置参数,PreparedStatement里面的SQL语句是预编译的,SQL语句使用了占位符,规定了SQL语句的结构,并且在设置参数的时候如果有特殊字符会自动进行转义,所以#号占位符可以防止SQL注入。
123456String sql = "update Employees set age = ? where id = #{id}";//MyBatis在处理#{}时,会将SQL中的#{}替换为?号,使用PreparedStatement的set方法来赋值;String sql = "update Employees set age = ? where id ...
记录 -- 学术科技节续写比赛作品记录
前言
今天无意中翻到了自己在大学期间参加的学术科技节改编创作大赛三等奖的奖状,不禁感慨(臭美)一下,在一众文科大佬的参赛作品中,我的文章脱颖而出(hhh),尽管只是三等奖但也是很可以了。下面发一下参赛作品记录一下hhh,因为是改编创作,我选择了大家都熟悉的哆啦A梦进行结局的创作,文笔有限,还请见谅。
文章内容 “胖虎起床了,快要迟到了。”伴随着轻柔的声音,胖虎被推醒了。睁开眼睛,他便看到了熟悉的身影正站在他身边,神情紧张。“你是哆啦A梦吗?”胖虎不禁问道。“你在说什么胡话?我是你最好的朋友,哆啦A梦呐,快去学校了。”眼前这个圆乎乎的蓝胖子回应道。“你最好的朋友不是大雄?”胖虎疑惑道,“我们都一起住了这么久了,你是不是还没睡醒,快吃饭,出门。”说着,蓝胖子从口袋里把竹蜻蜓掏了出来。
就这么一来二去地追问,胖虎拍拍脑袋,恍然大悟,现在哆啦A梦是他的好搭档了!胖虎激动地握住了哆啦A梦的双手。曾几何时,他一直羡慕着野比大雄有哆啦A梦,可以随时随地解决琐事烦恼,凭什么大雄就能拥有哆啦A梦,现在幸运儿成 ...
Java--业务场景:敏感词过滤代码实现(Fastjson配置全局序列化 @JSONField注解的serializeUsing属性)
业务场景
在系统数据库中,可能存在一些用户名称,昵称,评论中有些词汇,出于保护隐私或是不符合规范等原因,不能直接展示在前端页面上,这样的敏感词需要用 * 号代替。实现步骤
将系统需要替换的敏感词保存在数据库中,在项目启动后,获取敏感词库,保存到Redis缓存中。
编写敏感词序列化类 SensitiveWordSerializer 。
在需要敏感词过滤的实体类对应的字段上加上注解 @JSONField(serializeUsing = SensitiveWordSerializer.class)。
编写FastJson配置类 设置fastjson的全局序列化和反序列化的特性,使用FastJsonHttpMessageConverter替换spring boot默认实现(MappingJackson2HttpMessageConverter)作为HttpMessageConverters的首选实现。具体代码如下需要的依赖坐标12345678910<!-- fastjson 依赖 --><dependency> <groupId>com.a ...
Java基础--static,final关键字作用与区别
final修饰类
修饰的类不可以被继承
常见的final修饰的类:
字符串类:String StringBuilder StringBuffer
包装类:Byte Interger Double Short Long Float Character Boolean Void
数学工具类:Math StrictMath
系统类:System
作用:final 修饰类的作用是为了保护封装,使其不可被继承,就不会有多态改变行为的可能。修饰方法
修饰的方法不可以被子类继承重写。修饰变量
修饰基本数据类型,则初始化后该变量的值不可以被修改。
修饰引用数据类型,则初始化后该引用不可变,但引用指向的对象内容可以改变。
修饰形参:参数在函数内部不可被修改,用于保证数据安全性,避免无意中改动数据带来的问题。static修饰代码块:
一般用于类的初始化,静态代码块在类的构造函数执行前执行
加载顺序:==父类静态代码块—>子类静态代码块—>父类非静态代码块—>父类构造方法—>子类非静态代码块—>子类构造方法==修饰方法
static修饰的方法叫做静态方法或者类方法。
sta ...
Redis--Redis的过期策略和内存淘汰机制
Redis的过期策略==Redis的过期策略==是:定期删除+惰性删除
定期删除
这里的定期删除是指Redis默认每隔100ms就随机抽取一些设置了过期时间的key。检查其是否过期,如果过期就删除。
定期删除每次只是随机抽取一部分的key进行判断其是否过期而已。如果是全部取出来判断的话,假设Redis里放了10w个设置了过期时间的key,每隔几百毫秒,就检查全部10w个key,那cpu的负载会很高,都消耗在检查过期key上了,这将是一场性能的灾难。惰性删除
因为定期删除具有随机性,所以可能导致很多过期的key没能及时的清除掉。所以Redis同时采用了惰性删除的策略。
惰性删除是指,在获取某个key时,Redis会先检查一下,这个key如果设置了过期时间那么它是否已经过期,如果过期了就会被删除,不会返回任何结果。内存淘汰机制
如果定期删除漏掉了很多过期key,而这些key又没被及时查询,不触发惰性删除,久而久之,大量过期key堆积在内存空间里,就会导致Redis的内存块耗尽。
这时Redis需要走内存淘汰机制。Redis的内存淘汰机制策略|含义—|—noeviction|==不进行内存淘 ...
Java框架--SpringMVC(工作原理,常用注解)的学习笔记
SpringMVC什么是SpringMVC?
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。SpringMVC的优点
是Spring框架的一部分,可以方便的利用Spring所提供的其他功能(如IOC容器,AOP等)。
灵活性强,易于与其他框架集成。
提供了一个前端控制器DispatcherServlet,使开发人员无需额外开发控制器对象。
可自动绑定用户输入,并能正确的转换数据类型。
内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入表单。
支持国际化。可以根据用户区域显示多国语言。
支持多种视图技术。它支持JSP、Velocity和FreeMarker等视图技术。
使用基于XML的配置文件,在编辑后,不需要重新编译应用程序。SpringMVC的原理图SpringMVC接口解释
DispatcherServlet接口:Spring提供的前端控制器,所有的请求都有经过 ...