自动化测试入门

周一开会测试部提出想学习下接口测试,为自动化测试做调研,我主动接下了这个小而美的事,本想美滋滋的炫技

Posted by Rong on March 12, 2019

周一开会测试部提出想学习下接口测试,为自动化测试做调研,我主动接下了这个小而美的事,本想美滋滋的炫技,结果完全出乎我的详细。首先测试同事不了解一些基础的知识,其次他们并不是只想学习接口测试,想实现一套自动化测试流,我真的是~~~既然接了活,怎么也得伺候好咯,开干!

平时开发过程中我是使用chrome的插件:RESTLet-Client

rest-client

也使用过postman,但感觉有点不好用,而且数据json格式化不够美观,最主要的是平时自己chrome常开,不愿意再开个软件(postman独立安装)。 开完会就屁颠的过去和他们聊,结果发现这是个大坑。首先我只了解单元测试和接口测试,一般为了和前端沟通,我会在写接口前定义好接口格式,但是他们想要的却是一套自动化的流程,但是周会上也™说的是需要培训下接口测试,:disappointed_relieved:

喝口水压压惊,我思考下怎么搞。

  • 从基础开始
    首先就是让他们了解下怎么做post和get发请求,以及怎么传递参数,这部分略过,没啥技术含量。 但是为了做team的东西,提前使用全局变量和环境变量,定义一些url。比如我写了一个dev的Environment Variables:

    dev

    url上引用,切换环境非常方便。

    url引用环境变量

    这里需要了解下postman的变量范围和机制:

    Variable scopes

    参考资料

  • 发送请求预处理

    postman可以在发送请求前做一些事,通读官方文档(全英文,不过写的很清晰,很好理解)后,我做了很多尝试,比如我们的passwd字段是加密后传递服务器的,可以在pre-request script中请求我们相关的js,而且官方也支持加密。但是并不支持获取js执行其中的方法。

    pre-request script

    我这里是把自己的期望值和期望服务器返回的错误消息都保存到data域中,到时候和请求后做比较。

  • 测试script

    tests script

    postman支持多种测试,以及断言。这里我简单的判断了服务器返回code值和预期是否相同,只跑接口测试时要自己预处理我们定义的引用值,比如:

    body值

    我们restful服务返回的结果格式是:

      {
          "code":0,
          "data":"xxx"
      }
    
  • 执行自动化测试

runner

选择开发环境,加载测试准备的数据:

[{
  "username": "\"17823918517\"",
  "passwd": "\"8c885ca832aae573f0238382a5b750d545271e068c948eafe0ade7dbe31c1ac14928bd4e0b2978b1dce0413ea0576be489df354889dea662159d3923b47e34f96709959a27b8aaebd7406757fb68075f3afce40154801e9df84a3c2925e094769e38c8f6d68f8ff2e5f2da7be8dcf5b2d212834da8dbed4ee4c529d4af092f70\"",
  "code":2000104,
  "desc":"登录失败,此手机号尚未注册"
}, {
  "username": "\"17600000011\"",
  "passwd": "\"8c885ca832aae573f0238382a5b750d545271e068c948eafe0ade7dbe31c1ac14928bd4e0b2978b1dce0413ea0576be489df354889dea662159d3923b47e34f96709959a27b8aaebd7406757fb68075f3afce40154801e9df84a3c2925e094769e38c8f6d68f8ff2e5f2da7be8dcf5b2d212834da8dbed4ee4c529d4af092f70\"",
  "code":0,
  "desc":"登录成功"
}, {
  "username": "\"18798862459\"",
  "passwd": "\"123456\"",
  "code":1000012,
  "desc":"登录失败,用户名或密码错误"
}, {
  "username": "\"17600000011\"",
  "passwd": "\"1234\"",
  "code":1000012,
  "desc":"登录失败,用户名或密码错误"
}]

由于passwd没法在测试前进行加密处理,只能先写加密后的值,而且postman有个BUG,官方文档中说引用数据会替换为string,我多次测试都是错误的,只能转换了下格式"username": "\"18798862459\""

测试用例准备data

执行run后得到自动测试结果:

tests data

总结

从一个半路出家到通读官方文档,再到测试demo,再到team规划和swagger导入postman等一步步走来,有点成就感。

  1. 解决post请求body中变量引用参数不为string问题
  2. 学习team建设统筹规划的整体思想

撒花★,°:.☆( ̄▽ ̄)/$:.°★