接口自动化测试?平台VS框架
乙醇 创建于 almost 7 years 之前
最后更新: less than a minute 之前
阅读数: 798
这几天准备接手一些接口的测试开发工作?在技术方案的选型上碰到了一些困惑,拿来和大家探讨。
在我来新公司之前,团队已经开发出来了相对成熟的接口平台。
注:以上截图自开源项目HttpRunnerManager 。
我们公司的平台要更加完善,可以自定义测试前置,测试后置,添加断言,自定义运行套件,执行SQL语句,定时任务,以及自动发邮件等。最主要的是不用写接口测试代码。
我在上一家公司是基于单元测试框架写接口自动化测试的。
注:以上截图取自《Web接口开发与自动化测试――基于Python语言》书中项目pyrequest 。
真正的项目要复杂得多,单元测试框架本身就帮我们做了很多事情,集成的参数化插件,极大的减少了用例的编写。可以方便的连接数数据库,初始化数据。同样可以实现HTML测试报告,自动发邮件,结合持续集成做定时任务。
以下为某抽奖接口的10条测试用例:
@parameterized.expand([
("all_null", '', '', 10021, '无效ID'),
("lid_mid_error", 'a', 'b', 10021, '无效ID'),
("mid_error", 1, 90132, 10609, '会员不存在'),
("lid_error", 901, 132, 10601, '活动不存在'),
("activity_not_open", 5, 132, 10604, '活动未启用'),
("activity_not_start", 2, 132, 10605, '活动未开始'),
("activity_has_ended", 3, 132, 10606, '活动已结束'),
("not_participate_in_activity", 11, 140, 10612, '用户没有加入活动'),
("have_been_exhausted", 11, 132, 10613, '您的抽奖次数已用完!'),
("is_prisoner", 11, 41, 200, "您没有中奖")
])
def test_random(self, name, lid, mid, status, message):
""" 随机抽奖接口失败用例 """
self.result = MACRequests().get(self.url, {'lid': lid, 'mid': mid})
self.assertEqual(self.result['status'], status)
self.assertEqual(self.result['message'], message)
前面展示的各自的优势和特点。接下来说说各个的缺点。
测试平台的缺点:
添加用例过程有点麻烦。对于一个熟练的测试开发来说,写代码的速度是高于在是高于在Web页面上点点点的。而且平台功能没有写代码灵活。
接口框架的缺点:
必须要会写代码。接口测试用例是通过代码完成的,所以要求必须会写代码。框架看不去也没有平台高大上。
其实,接口测试的难点并不在测试的编写上,而在数据的初始化上。假设有一个用户签到接口,第一次调用返回“签到成功”,第二次调用“已签到”;那我们在跑接口之前是不是要先修改数据状态为“未签到”。怎么构造数据就需要你对业务和表结构非常熟悉。脱离了这一个前提条件,不管是用平台还是框架你都写不出接口用例。如果想把用例设计更加全面可能还需要阅读接口代码的处理逻辑。
作为测试开发怎么考虑?
如果做成接口平台,那么需要测试开发具备Web开发能力,主要工作是开发和维护接口平台。只需要教会测试人员使用平台创建接口用例即可。
如果做成框架,开发工作量要小很多,只需要简单封装一些接口API,定制开发接口测试报告等。主要工作量是教会测试人员去写接口自动化代码。
作为测试开发,我倾向于平台化,教会徒弟饿死师傅。而且平台也更好衡量测试开发工作。你们觉得呢?