完成基于Jmeter的API自动化测试有感

故事背景:
我刚入职一家新的IT科技公司,它是做电子钥匙(通过电子卡作为钥匙,打开相关的电子设备)。所以对于公司而言,页面功能有但较为简单但是各种服务API测试就成了主要的测试内容。公司测试人员就我一个,前任小姐姐走之前留给我的接口自动化框架是基于Junit实现的。一来我之前不熟悉Junit,二来说实话,小姐姐的Junit自动化并没有完全实现,还有很多地方需要调整。故我决定将junit上的自动化用例全部迁移到jmeter上。
实现方案说明:
1、与测试管理平台的联动:公司用的测试管理平台是Testrail,小姐姐之前的用例执行结果都会保存在平台上,所以这一点需要保存。
实现策略:通过到Testrail官网上找到了他们的API文档同时也仔细研究了小姐姐的实现方法。本来我想学其在Junit中实现的方案,去调用jar的方式实现与Testrail的联动,但我看了看觉得Jmeter通过调用API接口的方式来实现联动的难度和成本相对较小,所以基于接口文档中关于调用Testplan编号的方式来实现执行结果的写入。因为需要固定编号,所以采用偷懒的办法,反复执行同一个Testplan,不过并不影响测试结果的记录和统计
2、接口用例迁移
方案一:采用和原来Junit方案
原来的junit模式是关注的是入参和接口来表达一个用例,基于对响应结果的解析来判断用例是否被正常执行。一开始我其实不是很理解,她只是做了接口响应结果的校验而没用做数据方面的校验。后来我想明白了。其实很简单,她已经完成了手工测试,在基于已经在此种响应下的数据是准确的前提下,进行判断其实也是可行的,当然也是存在一定的风险的
方案二:基于用例的数据的自动化脚本
其实就是将用例数据从Testrail中读取出来,将按照读取出来的结果解析成jmeter脚本中所需要的相关参数,进行执行。此种方案可以实现用例完成编写之时,自动化测试也就实现了。这个方案缺点也很明显,需要测试人员在编写用例时严格按照用例规范进行编写,同时对预期结果的检查,会相当考研该脚本框架的设计。
方案三:入参数据外用例脚本固化处理
其实就是将脚本基本写死,除了入参为了面对数据库变动造成数据出错的情况。其他脚本逻辑和判断逻辑固定写死。

最后不出所料的我选了第三个最不灵活的方案,原因很简单。我仔细阅读了小姐姐在测试管理平台上的对应用例信息。她又非常多独立判断逻辑,且牵涉到不同的数据源:MS SQLServer,LDAP。且如果要采用二方案的话,我需要完全重写其的测试用例,同时还要完成框架的开发。而我又不能接受像一方案那样默认数据情况是合理的。同时我也分析了开发团队的实际情况,开发团队习惯于开新接口如果需要的话,除非有严重的结构性缺陷,一般不对老接口进行调整。

4 脚本开发
接口自动化脚本开发过程中,个人觉得最难的就是判定逻辑和前置条件准备。由于我在脚本中还要将结果上传至测试管理平台。让整个脚本逻辑变得很复杂。 这里篇幅有限,我就挑我觉得有坑的几个点
1)要用计数器,不是说用jmeter计数器组件。原因就在于我要将判定结果上传到管理平台去。如果你采用出现错误就上传到平台去的话,那就意味这一次执行你需要上传多组结果,所以特地设置了一个变量作为计数器,同时,每次用完都需要归零。因为脚本中虽然每个用例我放在独立的线程组下面,但是还是存在变量数据串了的现象,所以为了防止串的最好的办法,就是用完就归零。
2)Josn组件取值后,如果是多个值,不要用foreach组件。我一开始写脚本的时候,用着它觉得非常好用,后来发现它有些在复杂逻辑的情况下,并不能实现你的所有逻辑判断,反而通过beanshell去自己将Json的取值去循环读出来的方式比较稳定,且易于实现后续的逻辑判断等操作
3)用例实现格式:脚本用例设计的时候要遵循固定格式,这样解读和后续维护方便,我的格式是:前置准备(包括数据、权限等)->结果执行->响应结果判断->结果数据判断->结果上传->环境清理。一个用例脚本包含这些东西。

总结:
我基于小姐姐给我的junit自动化脚本,迁移了两个大服务的接口自动化用例。总体而言,对于我后面的自己的jmeter自动化框架脚本开发是非常有帮助的。那么做的好地方,个人觉得是把所有用例的判断逻辑写进去了,同时这个脚本如果单独挑出一个线程都可以作为性能测试的脚本。还有欠缺的就是脚本的弹性不够,写死的脚本调整起来非常麻烦,同时也可能会影响到别的用例,还有一个就是我没有完全将结果上传至平台,我只是实现了接口响应结果的上传。主要的原因就是错误千奇百怪,而在上传结果的接口要求不能上传特殊结构的数据(json),这就很恶心。我不想在这个上面花太多时间和精力,毕竟现在要先将自动化运行起来才是王道,还有就是上jenkins还没去做,而是用本地任务来定时执行测试,当然这已经是小节了。

后续的话,我会尝试方案二在公司中的实现,同时也会尽量解决结果上传的问题,还有就是上Jenkins。
这纯粹个人见解,如果有同样情况的朋友,愿意的话可以参考一下。当然肯定存在一些问题,如果有愿意讨论的可以留言,一起探讨。
谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值