徒手撸平台——基于Springboot+layui实现接口自动化平台

timeout: 10s

lettuce:

  pool:

    min-idle: 0

    max-idle: 8

    max-active: 8

    max-wait: -1ms

password:

token:

expire:

seconds: 72000

jwtSecret: (XIAO:)KaTeX parse error: Expected group after '^' at position 7: ^11244^̲%(WEI:)@@+±-(LAO:)++++.sds(SHI:)




[]( )2.2 分级设计

-------------------------------------------------------------------



前面提到,接口自动化平台数据采用分层设计,即将接口自动化所需的数据分为【项目管理】、【接口列表】、【用例管理】、【测试集合】、【测试结果】五个部分。如下图所示:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906142542923.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



### []( )2.2.1 项目管理



项目管理,定义了公司系统的基本框架。以新浪新闻为例,我将做如下分割:



*   平台:新浪新闻

*   项目:体育

*   模块:西甲

*   IP地址:略



![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906114315913.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)  

项目模块层,有以下规范和特点:



*   项目管理页面决定了每个接口的归属,当我们新增接口时,必须创建在已有模块下,而不能随心所欲地添加。因为平台使用人众多,如果不做此约束,数据将会十分混乱。

*   通常情况下,每个项目对应着自己的IP地址。这个平台中,每个模块对应着一个IP地址,还是有一些数据冗余,但如果为了消除数据冗余而再增加一层,就不是三表关联而是四表关联了,开发难度倍增,使用起来也略显繁琐。

*   每个模块定义了IP地址后,该模块下的接口将直接继承,不需要再单独为接口定义IP地址了。



### []( )2.2.2 接口列表



当项目模块创建后,就可以在该模块下添加接口了。  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210121171448262.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



接口层有以下规范和特点:



*   这个页面定义了一个接口的基本信息,包括路径、请求方法、参数类型等,但不会定义具体的参数以及其他信息,这些信息留到用例页去定义。

*   每个接口只能有一条记录,新增时根据接口路径进行判重,以便进一步增强数据规范性,防止出现明明是一个接口,但接口名称不一样的情况。

*   新增接口时,平台、项目、模块皆为选择项(可选择的数据来源于【项目管理】),而不能自行填入。



![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906144023200.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



### []( )2.2.3 用例管理



用例管理是对接口的进一步描述,是最核心的部分,也是开发难度最大的一个模块。  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210121171604666.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



用例层具有以下规范和特点:



*   用例依赖于接口而存在,只有在接口列表页创建了某个接口后,才能在此页面创建该接口的用例,用例将自动继承所属接口和模块的属性,比如IP地址和路径等。

*   一个接口可以有多个用例,用例之间参数值不同。

*   用例类型分为标准用例、正常用例、异常用例,所谓标准用例是指该用例的参数等信息都是能确保用例能正常执行并获取正常响应结果的用例,每个接口下只能有一个标准用例,**当接口下创建了标准用例后,再次创建用例时,直接复制其参数信息等数据,极大增加创建用例的便利性**。

*   操作栏点击【执行】按钮后,将发起一次接口请求,参数为该用例的数据。

*   点击【编辑】可以修改用例的基本信息。

*   点击【详情】,进入用例详情页。



用例详情页有以下几大部分:



#### []( )2.2.3.1 基本信息



基本信息,用例的描述性信息,自动读取。其中,所属平台、所属项目、所属模块等信息,读取自用例所属的模块,接口名称、接口路径等读取自用例所属的接口。  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906151348927.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



#### []( )2.2.3.2 请求参数



请求参数,包括请求头和请求体两部分。  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906151559334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



#### []( )2.2.3.3 关联提取



这个功能是为后续【测试集合】准备的,当你准备把一个用例加入测试集合,且测试集合后续的接口的参数依赖该用例响应结果的值,就需要在关联处理做预处理。  

比如一个登录用例,需要在响应结果中提取token并提供给后续接口使用,就可以按图中示例,添加一条关联提取规则:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906151721455.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



*   变量名:提取到的信息暂存到内存中时对应的变量名

*   路径表达式:需要提取的内容对应的路径,其书写格式与使用规则与Jmeter的【JSON Extractor】完全一致。

*   缺省值:当提取预期内容失败时,给变量名赋予的值。



#### []( )2.2.3.4 结果断言



结果断言目前包括常规断言和Beanshell断言两种形式,其中常规断言包括:包含、相等、JSON三种方式(已经能覆盖大多数应用场景,后续可以继续丰富)  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906151813539.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



*   包含:响应结果包含预期值,即判定接口请求成功

*   等于:响应内容等于预期值,即判定接口请求成功

*   JSON:通过路径表达式在响应结果中提取特定字段,该特定字段的值等于预期值,即判定接口请求成功



#### []( )2.2.3.5 结果示例



结果示例是接口返回结果的示例:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906152006940.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



### []( )2.2.4 测试集合



测试集合可以说是这个接口自动化平台的意义之所在。在接口自动化中,单接口调用参考价值有限,多个接口按照业务逻辑组成一条流程,才是接口自动化意义所在。  

当一系列接口用例创建完成后,在【测试集合】页面可以按照业务逻辑将它们组装起来,形成一个任务队列。  

![在这里插入图片描述](https://img-blog.csdnimg.cn/2019090615283610.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)  

下面说明一下如何编辑一条测试集合:



1.  点击【编辑】按钮,将进入测试集合详情页,在该页面可以非常方便地增减用例、调整用例顺序。  

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906153134526.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)

2.  点击【+】按钮,进入用例添加页面:  

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906153522391.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)

3.  通过选定一系列筛选条件,【用例】行将展示所有符合筛选条件的用例,选择想要的用例后,点击【提交】即将该用例添加到测试集合的用例列表中。  

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906153455193.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)

4.  选择了用例后,回到测试集合详情页,用例顺序调整完毕后,点击【提交】按钮,将信息保存到数据库。同时,程序会自动生成【用例队列】(用例ID组成的队列)和【队列描述】(用例对应的接口名称组成的队列)。



新增一条测试集合与上述操作基本相同,不同的是,在【测试集合】页点击新增后,进入的集合详情页,只有一条示例用例:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906154151713.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)  

测试集合支持【一键执行】,目前只支持单线程全部执行,后续考虑优化加入按项目执行和多线程执行。



### []( )2.2.5 测试结果



在【测试集合】页面选择执行某条测试集合后,程序将读取其对应的用例队列,并依次执行每个用例,最终生成一条测试集合的测试结果,并持久化保存在数据库中。  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906154509217.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)  

点击【详情】按钮,进入测试结果详情页,查看某条测试结果的详情:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906154849297.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)  

双击某行,弹出该行对应的响应结果:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906161039422.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



[]( )3 难点与待优化列表

=====================================================================



[]( )3.1 关联的实现

--------------------------------------------------------------------



关联在【用例管理】的【关联提取】已有简单阐述,这里详述一下其实现方案:



*   首先,当一条测试集合被执行时,在栈内存中开辟一个Map或JSONObject,我称其为关联池。

*   执行每条用例时,读取其【关联提取】数据,如果有记录,解析该记录并按提取规则去用例的响应结果中提取相应内容(提取失败则取其缺省值),并将该内容put到关联池中。

*   执行每条用例时,如果用例的某个参数的值是 ${param}  

    格式,意味这个参数值是引用值,则将"param"解析出来,并到关联池中以"param"为key执行get操作。

*   基于这种设计机制,我们还可以实现下面的场景:第一个用例的参数A的值是2001,后面用例涉及到参数A的值都想跟第一个用例保持一致,如果每个用例都写成固定值,那么一旦修改将是很麻烦的事。那么,我们可以在关联提取中添加一行,路径故意写错,缺省值写为‘2001’,当该用例执行时,关联提取失败,缺省值‘2001’就被put到了关联池中,后面的用例引用该值即可。

*   测试集合执行完成后,关联池被销毁。



实现思路的示意图如下:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190906164149143.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L211X3dpbmQ=,size_16,color_FFFFFF,t_70)



# 总结

**就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!**

**金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。**

![三面蚂蚁核心金融部,Java开发岗(缓存+一致性哈希+分布式)](https://img-blog.csdnimg.cn/img_convert/0112209bb9616f09060672c27587d992.webp?x-oss-process=image/format,png)


我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!**

**金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。**

[外链图片转存中...(img-8YG1Rh49-1720106308181)]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值