设为首页 收藏本站
查看: 1804|回复: 0

[经验分享] 300行Python代码打造实用接口测试框架

[复制链接]

尚未签到

发表于 2018-8-14 09:14:51 | 显示全部楼层 |阅读模式
300行Python代码打造实用接口测试框架
  发表于:2017-6-29 09:47  作者:Leo Lee   来源:博客
  字体:大 中 小 | 上一篇 | 下一篇 | 打印 |我要投稿 | 推荐标签: Python 接口测试
  在刚开始实现ApiTestEngine的时候,卡斯(kasi)提议做一个Java版的。对于这样的建议,我当然是拒绝的,瞬即回复了他,“人生苦短,回头是岸啊”。
  当然,我没好意思跟他说的是,我不会Java啊。不过最主要的原因嘛,还是因为Python的语法简洁,可以采用很少的代码量实现丰富的功能。
  有多简洁呢?
  刚在coveralls上看了下ApiTestEngine框架的代码统计行数,总行数只有268行,还不足300行。
DSC0000.jpg

  当然,这个行数指的是框架本身的Python代码行数,不包括示例注释的行数。从上图可以看出来,LINES列是文件总行数,RELEVANT列是实际的Python代码行数。例如ate/runner.py文件,注释的行数是远多于实际代码行数的。
  最极端的一个例子是,ate/testcase.py文件中的parse函数,示例注释行数35行,Python代码只有2行。
  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%以上的单元测试覆盖率,真不好意思说自己做了开源项目啊。
DSC0001.jpg

  那这不足300行的Python代码,实际实现了哪些功能呢?
  对比下《接口自动化测试的最佳工程实践(ApiTestEngine)》中规划的特性,已经实现了大半(前六项),至少已经算是一个有模有样的接口测试框架了。
  支持API接口的多种请求方法,包括 GET/POST/HEAD/PUT/DELETE 等
  测试用例与代码分离,测试用例维护方式简洁优雅,支持YAML/JSON
  测试用例描述方式具有表现力,可采用简洁的方式描述输入参数和预期输出结果
  接口测试用例具有可复用性,便于创建复杂测试场景
  测试执行方式简单灵活,支持单接口调用测试、批量接口调用测试、定时任务执行测试
  具有可扩展性,便于扩展实现Web平台化
  测试结果统计报告简洁清晰,附带详尽日志记录,包括接口请求耗时、请求响应数据等
  身兼多职,同时实现接口管理、接口自动化测试、接口性能测试(结合Locust)
  后面剩下的特性还在实现的过程中,但是可以预见得到,最后框架本身总的Python代码行数也不会超过500行。
  当然,单纯地比代码行数的确是没有什么意义,写得爽写得开心才是最重要的。
  最后引用下Guido van Rossum的语录:
  Life is short, go Pythonic!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551447-1-1.html 上篇帖子: Python进阶-继承中的MRO与super 下篇帖子: python+selenium启动firefox和chrome-Farley
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表