接口测试 ApiTestForHttp (记一次小型的接口测试框架的尝试)

jackyin · 2019年10月16日 · 1856 次阅读

一次代码能力的尝试

前言吐槽

从业测试行业已经很多年了,跟着一个老大创业了 3 年,回想起来都是泪,在这个地方也劝慰一些各位,如果你还没有做好充分的个人准备(身体,知识,人脉),千万不要尝试去创业。
言归正传,个人本质工作是测试,但是中途由于参与创业干了几年的项目管理,深切的感觉到创业不易,长期的出差,也使得自己身体和心理上深感疲惫,再加上可能职场上也遇到了一些自己认为的不公平待遇吧,毅然决定做回老本行测试。

新的尝试

代码,作为一名测试,特别是已经跳出这个圈多年的我来说,是在有点陌生,虽然有各种不适,但是既然决定做回本我,还是要决定啃下去,python 作为入门的语言,简单易学,代码风格优雅而让我感觉倍感亲切,py 从此作为我的入门语言

新的环境

从创业团队离职后,跳槽进入了一家 AI 技术公司,当然也要吐槽下,当时面试的老大,来我来后,就立马走人了,我擦来,当时我决定来这个公司主要就是看中这个老大的知识储备呀,就这样我又回到一个人自学的循环中,新公司非常注重实战技术能力,这点我非常喜欢,在接手新的项目任务后,我决定自己通过这个小项目进行代码练手,接口测试进入我的实验范围(ApiTestForHttp)

ApiTestForHttp 尝试

接口测试说简单也简单,说复杂也复杂, 当然作为入门就没有想那么多,那么这个框架可以完成什么?

  1. api 的单一接口测试
  2. 多接口组成业务场景的测试

开发工具和模块

pycharm(工具)
py35, requests, jinja2(模块)

设计的思路

主要参考了 unittest 的单元测试框架思路,以及九毫大神的 httprunner 中关于 json 的处理想法,总的想法很简单就是想将 unittest 这种测试脚本的结构通过 json 的文件形式组织起来,然后赋予各种参数化能力,来达到一个简单的 api 测试的能力,在配合相关的报告生成,来组成一个测试链

示例

{
   "name": "测试登录场景",
   "type": "api",
   "author": "王xxx",
   "date": "19/02/14",
   "test": [{
     "name": "login_commuity",

     "setup": {
       "num1":123,
       "username": "admin",
       "data2": { "username": "${username}", "password": "123456"}
     },

     "requestor":{
        "url": "${host}/device-mgr/api/auth/login",
        "method": "POST",
        "headers": { "Content-Type": "application/json"},
        "data": "${data2}"
     },

     "validator": {
       "assertEqCode": 200,
       "assertEqHeaders": {"Content-Type": "application/json;charset=UTF-8"},
       "assertEqStr": ["100000"],
       "assertEqJson":{ "success":true}
     },

     "collector":{
       "json": {"supertoken": "response.data.token" }
     },

     "teardown":{}
   }]
}

有些见名知意的就不解释了,
setup:主要是做 api 测试前的相关参数准备
requestor:api 请求的相关参数
validator:校验 api 结果
collector:收集参数做后期关联接口使用
teardown:清理 setup 中的参数

对于这些 json 文件的管理,我是根据项目的定义来进行设置,如下图

这种结构是固定的,不允许调整,当然各个菜单下的是可以做多级目录的,此处有一些注意事项:1conf 文件必须在 project 文件夹下这是一个私下的约定

通过上述的项目结构对 json 进行有效的组织管理,在直接通过命令行模式进行执行即可

执行整个项目: python3 api_test.py -p E:\jackstudy\ApiTestForHttp\data\project
执行单个文件:python3 api_test.py -p E:\test_.json -cf E:\data\conf

报告生成

通过命令行执行报告后,查看执行窗口报告生成情况,如下图

框架 report 目录下报告如下:

题外话
关于参数化,当前框架支持比较丰富参数化方式,同时也支持对于参数化方法的自定义:

总之,由于是初期接触代码,在编写的过程中遇到了各种问题,虽然简陋但是也算一定程度的解决了,这个框架不是完美的,也不是优秀的,但是好在是自己学习过程中独立自主的按照自己的思路进行设计和开发,也算是一次个人的代码体验之旅。

如果是大神路过,希望给与优化思路和指导意见, 如果是萌新初来,也希望它给予你们一些思维上的启发。

谢谢

代码入口:https://github.com/jackyin2/ApiTestForHttp

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册