接口测试 API 自动化测试框架分享

testly · October 11, 2015 · Last by simon replied at March 01, 2019 · Last modified by admin 恒温 · 15035 hits
本帖已被设为精华帖!

前言

接口自动化逐渐成为各大公司投入产出最高的测试技术。但是如何在版本迅速迭代过程中提高接口自动化的测试效率,仍然是大部分公司需要解决的问题。

框架定位

  • 数据驱动设计模式,无需写测试代码脚本即可实现自动化
  • 等价类非等价类覆盖, E2E(接口流程性测试) Case覆盖
  • 使用Excel的方式进行自动化用例编写,简单,易用,高效。

框架架构图

框架介绍

技术栈

Jenkins + Svn + Maven+TestNG+ReportNG+(HttpClien+URLConnection)

Case展示

1,单个接口Case

Json response 解析用的是 JsonPath 解析方式,检查点以“,”隔开

2.,E2E流程性自动化Case

其中可以取上面的Step 的response 内的参数作为下面步骤的入参或者检查预期值。

执行展示

先配置用例脚本模板:

配置好全局环境配置:

Jenkins配置任务并执行,得到自动化测试报告
邮件报告:

测试报告:
  • 任务概述

  • 步骤过程打印:

接口与接口之间可以按规定的参数进行 取值与赋值,单独由数据中心去控制遍历的接口是否需要进行数据转换!~
这样可以把一些简单的API业务流串起来持续集成,方便快速迭代~!

框架优势:

1 编写Case效率
  • 易编写,在Excel内编写负责 粘贴非常简单方便,全局替换也非常方便。

  • 易维护,无需每个人写代码脚本,在用例模板内可维护性高很多。

  • 易交接,自动化模板基本都能看懂,思路一目了然。

2 执行效率

3,支持接口之间参数定义(需使用定义参数)

4,HTTPCode检查非正常外的状态均会报错!

(只有错误的地址才会出现在测试报告里面)

  • 报告详情示例:

5,响应超时预警邮件触发:
  • 单个接口响应超过5秒自动触发代码发送邮件给指定人

6全局参数变量
  • 指定参数 TTPod_Rondom(20) 在执行过程中代码会自动替换成 一个范围在0~20以内的随机数

7 框架轻便灵活,无缝对接 持续集成,持续交付

与TestNG +Maven+Jenkins 搭建持续集成链路,非常简单。

欢迎一起交流,一起进步 可以关注我的微信公众号:“测试开发进阶” - 点我关注

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 97 条回复 时间 点赞

赞 多谢分享!

谢分享!

我最近也在做自动化接口测试,基于httpclient, 使用json传递数据,get接口的比较容易实现,但是遇到post和put接口时,涉及到修改数据,不知道怎么准备数据以及如何让数据不断重复利用。

已关注!

#3楼 @sz_mizu 其实你可以做一些参数化或者一些随机数,就像我这个模板,传值的时候会有多个公用的变量可以用,可以保证每次参数按要求去赋值

单一接口的参数化,以及返回结果的正则校验也应该支持

#6楼 @vigossjjj 正则校验是支持的么,单一接口的参数化可以去随机或顺序去取一列配置好的参数,目前还会有一些公共的参数比如说一个范围内的随机数,自增数等等,

这些url怎么获得的?有文档?

#8楼 @doctorq 有接口文档的!

#9楼 @testly 所以这个是重点~~给提供文档的RD是好伙伴

testly #11 · October 12, 2015 作者

#10楼 @doctorq 这是硬性要求,每个接口开发前都会有文档,其实数据的准备比较麻烦,但是配置之后后面就方便了!

#11楼 @testly硬啥硬,我们就没有文档

testly #13 · October 12, 2015 作者

#12楼 @doctorq 没有文档那得测试的时候自己去收集了!~相对比较麻烦!

#13楼 @testly 不愧是阿里音乐的测试老大,牛逼

testly #15 · October 12, 2015 作者

#14楼 @monkey 猴哥你的嘲讽是我努力的方向!~

17Floor has been deleted

mark,跪舔柴爷。

赞 学习学习

20Floor has been deleted

高大上。。。

学习了。
ps:框架介绍——图里的执行层Jenkins写错了

testly #23 · October 12, 2015 作者

#22楼 @delete31 果然是测试!

牛逼

#5楼 @testly 接口测试一些操作使数据库中的数据发生了变化,在一个接口测试完后需要恢复数据吗(恢复到原来的数据,以保证下次可以重复利用这条数据),如果要恢复数据的话是否要操作数据库?

testly #26 · October 12, 2015 作者

#25楼 @sz_mizu 这个问题还确实有点棘手,要恢复数据库的话如果可以通过接口能实现的话可以加一个步骤接口来恢复这个字段,或者更偏方你可以参数化源数据,比如:抽奖的case 一个用户只能抽奖一次,你执行完之后必须得去改数据库才能重复抽,你可以参数化这个用户在100个用户里面去随机去取用户来抽奖!这样可以么?

有2个问题请教下,那个耗时是怎么计算的额,执行前和执行后时间戳么还是。 jenkins集成testng.xml文件怎么执行的

testly #28 · October 13, 2015 作者

#27楼 @13651969749 耗时是建立发送请求进入缓存流之前和 得到响应之间的时间 ,第二个问题是吧testng.xml 写在pom.xml里面!我这边还把testng.xml作为参数在jenkins那边是可以选择来跑哪个xml

#28楼 @testly 明白了,tks。。

前来顶帖

testly #31 · October 13, 2015 作者

#30楼 @sophia_jl 老大好!

JJ BOOM SKY~

想学,但是不知道如何下手

testly #34 · October 16, 2015 作者

#33楼 @lovoro 很简单,你先熟悉HttpClien 把一些发送请求的方法封装起来,再想办法在发送请求参数上面去做功夫@!尽量保持灵活性强,又要坚持代码通用,不需要重复coding!框架的话比较简单!先把第一步完成后面好弄的!

不愧是阿里音乐的测试老大,牛逼

一直有个疑问,就是无论是API的自动化还是功能自动化,当某些操作使数据库中的数据发生了变化,要恢复到原来的数据,是不是只能通过操作数据库?毕竟要持续地跑case的话,是必须要恢复到原来的数据啊!

testly #37 · October 16, 2015 作者

#36楼 @charles 按你的说法,打个比方,如果人工取测试完测试下来是不是最后需要去数据库重置数据? 如果是的化可以自己派生出一个通过java 去修改数据库至于需要重置数据和表的可以作为变量放到数据文件内在每次执行完后去自动执行重置数据脚本即可?

testly #38 · October 16, 2015 作者

#35楼 @75281920 你也跟着瞎起哄

没有数据需要通过查询数据库的吗?

testly #40 · October 19, 2015 作者

#39楼 @alwans 建立在这套框架之上可以支持扩展数据库查询提取参数再传参! 至于怎么实现原理是一样的,在数据模板配置指定参数程序会去数据库拿指定的参数!

两个问题:
1.像对某一个音乐进行下单的话,url中肯定会带上这个音乐的id,那接口自动化的话需要遍历所有的音乐吗?还是说只需要测试一条就可以了。
2.另外url中动态的数据要如何进行处理呢?

testly #42 · October 22, 2015 作者

#41楼 @zsx10110 第一个问题 id 第一,可以随机取id,第二可以通过之前的接口来取值再传过去~/b 每次执行时执行一次,如果多次的话也可以通过配置 文件来实现,配置文件里面有一个执行次数的选项
第二,动态数据可以支持 数据库查询再赋值给接口,查询数据库和传值的过程都可以通过文件配置来实现,还支持上接口之间参数传递,还支持参数化!

大哥,框架很好,但是源码呢 :)

8错,涨姿势,来个源码demo呗。

楼主,请教两个问题:

  1. 是否有可视化界面给用户操作
  2. case间传参数是如何实现的?

越来越多的大牛分享接口测试了,非常感谢。

testly #47 · October 29, 2015 作者

#45楼 @franky 界面还没做,只有Jenkins 界面去run,第二个问题,case之间参数 在数据模版里面用根据关键字去正则提取!比如在“返回下单接口返回的“order_id”需要提取出来,只需要在 模板的一列写上关键字:”order_id“就可以了!

有个疑问,如果是验证手机验证码这类的接口,要怎么才能自动获得验证码?

testly #49 · November 03, 2015 作者

#48楼 @et91 如果你的验证码存在数据库内那只要在接口请求前配一条sql 把验证码取出来就行了!如果不是存在sql 那你手工测试怎么取?

有开源吗?学习,学习!

testly #51 · November 04, 2015 作者

#50楼 @yangxiangfu 不好意思哈,集团的代码估计还不能对外公开!

大赞!我们也在做接口测试的框架。@seveniruby是主程。找时间一定交流一下啊。

testly #53 · November 09, 2015 作者

#52楼 @skytraveler 向你们学习

想问下,如果接口里面有个参数需要其他参数加起来的 MD5值,这种情况怎么处理好啊

testly #55 · November 13, 2015 作者

#54楼 @yanzilove MD5是在发到服务端再去解密的吧?,这种场景你如果能用工具 把参数加上MD5值能请求成功我这个也就可以的!

#55楼 @testly 谢谢回复,现在也在做类似的框架,跟你的比起来,发现我的太草率了

testly #57 · November 13, 2015 作者

#56楼 @yanzilove 你也可以分享一下 你的东西,大家一起帮你完善,大家互勉!

#57楼 @testly
不敢班门弄斧啊

赞,另外能支持cookie、headers一些信息的配置吗?

testly #60 · November 16, 2015 作者

#59楼 @li_hugo 这些都可以在配置触发器内配置,httpclient本身有一些关于cookie的方法!应该支持的!

请教:
1.你怎么控制检查点的,检查json里面的某个或者多个字段的数据?
2,如果里面有图片,是否还有再次发一次请求去验证?

testly #63 · November 27, 2015 作者

#62楼 @284772894
第一个问题:检查点是由测试人员确定好预期结结果,我会把它的预期变为一个集合 然后根据集合里面的每一个key 和对应关键字去返回的Jason里面一层一层的找!可以支持复杂结构体层级路径遍历
第二个问题:据我的了解一般的接口返回里面只会有图片的url?

#63楼 @testly json 不是 jason

#63楼 @testly
#62楼 @284772894 对于图片的url,我觉着用url到服务器判断文件是否存在应该就可以了

#63楼 @testly 弱弱的问一句,你这个自动化框架是用java写的吧,python能实现你这个自动化框架吗?

testly #68 · December 09, 2015 作者

#67楼 @yuwuhen333 我觉得应该可以吧,跟语言没有关系!

设计思路很棒,赞个

不得不赞!!这是实现私有云测了吗?

能分享下源码吗??

先赞个!请问接口测试中接口间的参数依赖是怎么解决的呢(如果不用持久化方式)?而且返回的response的body参数校验的预期值是否写在excel中?@

#63楼 @testly

testly #74 · February 27, 2016 作者

#73楼 @sigma 比如 接口之间的参数可以用公共的参数接收并传递下去~ 教验点也都是写在文档里面 也可以通过参数传递把上面接口传下来作为下面接口的校验点(还可以通过在文件里面写sql直接去数据库捞数据并作为校验点)~

#74楼 @testly 谢谢解惑与指教~目前我准备做一个轻量级的接口测试框架,但是参数传递的话,如果在java用静态变量存储的话是可以,但是我不想硬编码到代码中,想弄个通用点的(适于任何项目),excel数据驱动的,目前还在不断尝试中,感觉难点在于如何组织、处理excel中的数据哇~

testly #76 · February 27, 2016 作者

#75楼 @sigma 我目前就是脱离代码的~ 比如上一个接口取出来一个 orderId 下一个接口请求需要用的话 只需要在文档里面贴入“${orderId}”就会自动替换获取之前取得值 ,类似这样的~
其实我的思路就是将取出来的数据装到一个 Map里面 替换的话根据对应的Key替换对应的 value

#76楼 @testly 那您的处理数据的代码逻辑一定很强大,我要自己去实现试试,多谢指教~

testly #78 · February 27, 2016 作者

#77楼 @sigma 建议设计一个数据中心 ~作用是 入参出参的数据转换~

#78楼 @testly T T我都写到一起了,入参是JSONStirng,转为JSONObject,出参全部转为String,之后用JSONPath表达式获取需要的actualValue跟expectValue比对,目前还在思考如何实现接口间参数传递~

@testly 问下这个报告是用reportng生成的?

testly #81 · March 11, 2016 作者

#80楼 @mark 对的,

#81楼 @testly 请问大神"检查多个文件全部遍历文件内的所有接口"是通过配置文件实现指定读取的excel文件集合吗?目前我按照您的思路实现了一个简单的单文件自动化接口测试框架,而且由于使用了testng的dataprovider,所以造成我产生的报告中(reportNG)所有测试方法的名称都一样(因为只有一个@Test注解,或者能动态的根据我传入test方法的参数caseDescription去修改@Test中的description?)

testly #83 · March 12, 2016 作者

#82楼 @sigma 目前我是脱离 @Test注解 的
通过和失败都是打点 自己写方法

#83楼 @testly 多谢指教,看来我得研究下reportng自己生成的html模板了,修改自带的template

testly #85 · March 13, 2016 作者

#84楼 @sigma 最好自己定制,testng +reportNG有局限性

#85楼 @testly 好的,目前还在熟悉中,自己定制的话需要用到java的类似于html模板啥的,这个之前没研究过,准备研究下,感觉一个好的报告系统真是对于自动化测试来说非常重要

陈恒捷 接口测试的一些感悟 中提及了此贴 20 Mar 15:55
恒温 感谢 fir.im —— 结果公布 中提及了此贴 05 Jun 13:20

好文章,,, 有开源吗?

我最近也在编写一个类似这样的叫接口自动化框架,也是 excel 为数据源,不一样的是测试用例没有采用 testng 之类的单元测试框架测试。是将整个框架打包成一个 jar 包,给组内的人员进行使用,使用 java 执行 jar 包的命令,带上 excel 文档的路径就可以自动运行了。但这种情况下,报表方面比较难做,请教下楼主,这种情况下,怎么能做好报表?

DC 回复

excel里除了数据,专门弄几页做testNG的事,程序里控制。然后每次跑完收集结果,形成report。
哈哈,我实现过你的需求,有需要可以找我~~

mark下,学习下思路!!

Alpha 回复

能分享下源码吗?大家共同学习

DC 回复

代码很容易,主要是思路。我帖子里会慢慢说清楚的

你好,楼主想问一下,excel作为输入源,里面会包含特别多的接口时你们会做分类吗?还有怎么校验结果呢?比如验证某个接口数据是否正确需要查数据库,那么用excel批量读取待测接口后,怎么区分哪些接口的结果需要从库里查?或是结果怎么校验正确与否呢?多谢!!!

testly #96 · April 17, 2018 作者
y 回复

接口本身自带属性属于哪个service 或者哪个业务模块 按照这个分就可以了
查数据校验看做成一个step 就可以了 把查出来的数据包装成json格式 按照接口返回一样的校验。

testly 回复

好的,我试一下~~~谢谢楼主指教!

post请求方式,表格数据源data里面为什么不直接用json格式,而是转成get方式,要用的时候还得转json? 如果有数组参数怎么办?

testly #99 · May 03, 2018 作者
阿三 回复

这个入參的类型是业务形态决定的,我们需要做的支持各种情况
如果有数组 也是按照 key:value的方式进行入參,同postman理

100Floor has been deleted

楼主您好,看到您的分享获益匪浅,有个小小的疑问。我们公司的接口都是Restful风格的,比方说http://www.baidu.com/api/v3/sessions/h5/13500000009,,是否需要在Excel专门用一个字段来做参数化,还是就在URL里面写死?这是个发送短信验证码的接口,结尾的手机号

大神 期待开源 学习下

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up