前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >300行Python代码打造实用接口测试

300行Python代码打造实用接口测试

作者头像
py3study
发布2020-01-10 11:13:15
5270
发布2020-01-10 11:13:15
举报
文章被收录于专栏:python3

  在刚开始实现ApiTestEngine的时候,卡斯(kasi)提议做一个Java版的。对于这样的建议,我当然是拒绝的,瞬即回复了他,“人生苦短,回头是岸啊”。

  当然,我没好意思跟他说的是,我不会Java啊。不过最主要的原因嘛,还是因为Python的语法简洁,可以采用很少的代码量实现丰富的功能。

  有多简洁呢?

  刚在coveralls上看了下ApiTestEngine框架的代码统计行数,总行数只有268行,还不足300行。

  当然,这个行数指的是框架本身的Python代码行数,不包括示例注释的行数。从上图可以看出来,LINES列是文件总行数,RELEVANT列是实际的Python代码行数。例如ate/runner.py文件,注释的行数是远多于实际代码行数的。

  最极端的一个例子是,ate/testcase.py文件中的parse函数,示例注释行数35行,Python代码只有2行。

代码语言:javascript
复制

def parse(self, testcase_template):

   """ parse testcase_template, replace all variables with bind value.

   variables marker: ${variable}.

   @param (dict) testcase_template

       {

           "request": {

               "url": "http://127.0.0.1:5000/api/users/${uid}",

               "method": "POST",

               "headers": {

                   "Content-Type": "application/json",

                   "authorization": "${authorization}",

                   "random": "${random}"

               },

               "body": "${data}"

           },

           "response": {

               "status_code": "${expected_status}"

           }

       }

   @return (dict) parsed testcase with bind values

       {

           "request": {

               "url": "http://127.0.0.1:5000/api/users/1000",

               "method": "POST",

               "headers": {

                   "Content-Type": "application/json",

                   "authorization": "a83de0ff8d2e896dbd8efb81ba14e17d",

                   "random": "A2dEx"

               },

               "body": '{"name": "user", "password": "123456"}'

           },

           "response": {

               "status_code": 201

           }

       }

   """

   return self.substitute(testcase_template)

  另外,如果算上单元测试用例的行数(731行),总的Python代码行数能达到1000行的样子。嗯,代码可以精简,但是单元测试覆盖率还是要保证的,不达到90%以上的单元测试覆盖率,真不好意思说自己做了开源项目啊。

  那这不足300行的Python代码,实际实现了哪些功能呢?

  对比下《接口自动化测试的最佳工程实践(ApiTestEngine)》中规划的特性,已经实现了大半(前六项),至少已经算是一个有模有样的接口测试框架了。

支持API接口的多种请求方法,包括 GET/POST/HEAD/PUT/DELETE 等

测试用例与代码分离,测试用例维护方式简洁优雅,支持YAML/JSON

测试用例描述方式具有表现力,可采用简洁的方式描述输入参数和预期输出结果

接口测试用例具有可复用性,便于创建复杂测试场景

测试执行方式简单灵活,支持单接口调用测试、批量接口调用测试、定时任务执行测试

具有可扩展性,便于扩展实现Web平台化

测试结果统计报告简洁清晰,附带详尽日志记录,包括接口请求耗时、请求响应数据等

身兼多职,同时实现接口管理、接口自动化测试、接口性能测试(结合Locust)

后面剩下的特性还在实现的过程中,但是可以预见得到,最后框架本身总的Python代码行数也不会超过500行。

  当然,单纯地比代码行数的确是没有什么意义,写得爽写得开心才是最重要的。

  最后引用下Guido van Rossum的语录:

  Life is short, go Pythonic!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •   在刚开始实现ApiTestEngine的时候,卡斯(kasi)提议做一个Java版的。对于这样的建议,我当然是拒绝的,瞬即回复了他,“人生苦短,回头是岸啊”。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档