接口自动化测试的一点总结(还是简书好看)

前言

本文是我在公司总结的一点点个人建议, 可能有非常多的遗漏, 先记录下来这时候我的理解。公司是做共享单车业务的, 所以场景基本上也可以复用, 毕竟大家都骑过单车。注明: code是我司接口返回的标志。

编写之前

  • 接口相关(这块总结不全)

    了解接口的功能及其使用场景(正常/异常)及接口具体做的事情。

    • 接口实现了什么功能

    • 接口是否有操作了数据库对应字段

    • 接口是否有操作了redis对应key

    • 接口的入参

      包括必填项和选填项丢失/多余带来的影响, 入参字段的长度是否有限制, 如身份证姓名等

    • 接口的出参

      包括正常/异常场景下code, msg等字段的校验, 如有返回数据, 对返回数据的校验如何去做

    • 接口的设计是否符合功能的预期

      如数据不允许重复时, 连续调用接口2次是否会插入2条数据

  • 场景准备

    • 掌握每个场景所需要的前置条件

      如关锁接口在 正常使用时,他的前置条件为该车辆的锁已经打开

    • 考虑如何设计场景

      可选择数据库/redis添加测试数据或调用接口新增数据的办法(==接口之间会存在依赖, 一旦添加数据的接口出错, 此场景也无法验证==)

  • 用例数据准备

    • 尽可能的动态准备测试数据

      如车辆编号, 可选择从数据库捞取。如有身份证号+姓名这种较为复杂的数据, 可写在变量里。但需要多挑选几组数据, 随机读取

    • 数据依赖

      优先采取新增数据的方式, 保证之前数据完好, 新增数据如有name等字段, 可带上特定标识+时间戳的方式。在用例执行完成之后将其清除, 如果出现垃圾数据, 也便于使用定时任务进行清理。

    • 尽量不要把数据写死

  • 断言

    对比较重要的字段作断言, 如需要展示给用户的字段。

    • http状态码校验

    • code/msg校验

    • db校验(业务相关, 如无类似情况可忽略)

      存在接口名返回与数据库不一致的情形, 应以接口为主。db目前多使用下划线式, 接口出参常使用驼峰式。编写sql查询语句的时候, 使用select ride_type as rideType此类。

    • 异常场景db校验

      为了防止: 接口出参返回code不为0, 但db却被修改。

    • redis校验

      如有涉及到redis, 需要对redis字段做断言。

    • 最近比较火的异步接口

      异步接口如何做断言, 本人没有太多接触。由于http协议是无状态的, 异步接口一般是调用后将任务放入消息队列, 接口就成功返回了。我的理解是去检查消息队列是否存在消息, 如有如果被消费了, 可起一个收尾类似tearDown的用例专门针对异步接口, 当他们消费完毕之后, 再对数据库/redis进行相关校验。

开始编码

  • 编码

    gat是公司内部封装的基于golang的自动化测试框架, 其实只封装了http请求和做了一部分单元测试框架的工作。

    • 用例描述

      用例编写之前, 脑海里应该有以下几点。如何设计场景, 覆盖哪些场景, 如何做断言。可以在文件顶部, 写入自己的思路, 这样在编码过程中会游刃有余, 不至于乱了方寸。之后维护的时候也不至于被业务逻辑绕晕。

    • setUp和tearDown

      目前gat框架是由TestFuncName为入口, 我们可以在函数开始执行后, 调用setUp()函数, 将自己想处理, 想得到的数据都处理完成。再后面就是逻辑的代码, 到最后使用tearDown进行清理。

    • 用例名称与Action对应, 文件名尽量与结构体名一致

    • 大体结构

    • 注释要多写, 常用方法可以封装

      /*
      测试功能点: 检查用户行程
      
      覆盖到的场景:
      1. 用户正在骑行中
      2. 用户未骑行
      
      数据准备:
      这里填写, 你将怎样制作数据
      
      数据清理:
      这里填写, 你将如何清理脏数据
      
      用例执行流程:
      这里写你的执行思路, 首先检测什么测试点, 然后....
      
      断言:
      写出断言的标准, 理由, 如何做(这也是评审的一部分)
      
      */
      
      package UserCenter
      
      import (
              "fmt"
              "testing"
              )
      
      type struct UserRideCheck {
          Data []map[string]interface{} // 测试数据
          Action string  //调用接口名
      }
      
      func (u *UserRideCheck) setUp() {
          fmt.Println("用例正准备执行!")
      }
      
      func (u *UserRideCheck) tearDown() {
          fmt.Println("用例执行完毕, 正在清理!")
      }
      
      func (u *UserRideCheck) TestUserRideCheck() {
          setUp()  // 初始化
          //主逻辑, 可再封装函数
          defer tearDown()  // 清理(后续可添加Recovery防止用例失败阻塞)
      }
      
      func init() {
          // 自己框架添加用例的逻辑
          data := initStruct()
          testcase.Cases["UserCenter"] = append(testcase.Cases["UserCenter"], data)
      }
      
      func initStruct() *UserRideCheck{
          return &UserRideCheck {
              Action: "user.ride.check"
          }
      }
      
      // unittest
      func UnitTestUserRideCheck(t *testing.T) {
          u := initStruct()
          u.TestUserRideCheck()
      }
      

附加:

  • 如果可能的话, 对开发做代码走查, 尽可能覆盖其if else分支

  • 我们自身的代码也会出错, 我们需要用日志记录测试过程中接口出现的问题以及自己的问题

  • 如果可以, 与CI结合

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • what-接口是什么? 在计算机中,接口是计算机系统中两个独立的部件进行信息交换的共享边界。举个例子,我提供加法的...
    我为峰2014阅读 12,115评论 3 27
  • 2016眼看就要过去了,马上我们就要迎来崭新的2017。总结过往,展望未来。站在岁末年初的分水岭,是不是每年到了这...
    墨多先生阅读 479评论 0 1
  • 倘若死后会下地狱 生会显得美妙 不会装聋作哑 巴不得张开另一只眼镜去目睹 穿透穿不过的冰冷建筑 看到世界的本相 生...
    安小河阅读 288评论 0 2
  • 江南的水墨烟雨 北国的冰天雪地 塞北的马头琴音 巴蜀的肥鱼 爱琴海的圣托里尼 美丽的西西里 以及 盛夏五月的你 这...
    鱼丸粗面只要碗阅读 121评论 0 0