关于自测的重要性,此处省下1万字,简而言之, 如果不想让 QA 小姐姐把 BUG 甩你一脸,那你就得学会高效自测。

另外呢,有一些水平很差的程序猿,你不让他有一个自测的环境,可以自己跑着,不停的 curl 着,不停的 postman着,他就不会编码---比如本拐。

但是无论 postman,还是curl,总是要费时间的,你要不停的去回车,去试————对于程序(懒)猿(人)来讲,任何重复的劳动都是不能忍受的.

在这里,向大家极力推荐 node.js ,因为两个重要的 npm 库,一个是 node-watch ,可以监测文件的变成,在文件有改变时发生相应的事件。 另一个呢,则是 request ,一个优秀的 http client 库,借助这两点,我们可以在写一个简单的 js脚本,当源码文件发生改变时,自动去调用相应的接口。

思路及源码

知道了几个库,还远远不够,我们想做的时,写一个简单的框架,可以将我们的case配置进去。 同时可以进行一些参数的传递。 那么,一个配置,我希望他是这样的:

module.exports = {type: 'lua',dir: '/data/guaiye/user/',host: 'http://localhost:8080',cases: [{name : '请求登录验证码',index: 1,key : 'req',uri: '/v1/auth/require-checkcode',method: 'post',data: {mobile : '13800000001',source: 'testApp'},},{name : '验证码登录',index: 2 ,key : 'check',uri: '/v1/auth/login-checkcode',method: 'post',data: {mobile : '13800000001',code: '#req.res.data',source: 'testApp'}},{name : '验证token',index: 3,key: 'info',uri: '/v1/auth/info-by-token',method: 'post',method: 'post',data: {source: 'testApp',token : '#check.res.data.token',}},{uri: '/v1/auth/logout',name : '登出',method: 'post',data: {token : '#check.res.data.token',}}]
}

那么,在希望可以按如此进行配置case的基础上,我们去写一个可以遍历这个case的脚本。 首先,简单封装一下request库:

const request = require('request')
let execReq = async(opt)=>{return new Promise((resolve,reject)=>{request(opt,(err,res,body)=>{if (err){reject(err)}else{resolve(body)}})
})
}
let getReq = async(url) =>{return await execReq({url:url,method:'GET',json:true,headers:{'content-type':'application/json'}})
}
let postReq = async (url,data)=>{return await execReq({url:url,method:'POST',json:true,body:data,headers:{'content-type':'application/json'}})
}
module.exports = {exec:execReq,get:getReq,post:postReq
}

在这个思路的基础上,写一个简单的app.js

const cfg = require ( './config') //我们的配置文件
const watch = require('node-watch') // watch神器
const _ = require('lodash')
const http = require('./tools/http') // 上面封装的http
const log = (msg) =>{console.log(new Date().toLocaleTimeString()+':'+msg)}const run_test = async()=>{log(`the .${cfg.type} file in ${cfg.dir} changed,run the test`)log(`the host is ${cfg.host}`)let all = {}for(let i = 0 ; i < cfg.cases.length; i ++){let testCase = cfg.cases[i]let url = cfg.host + '/'+testCase.urilet method =testCase.method || 'get'let postdata = _.cloneDeep(testCase.data || {})all[testCase.key]={}try{for( let p in postdata){let str = postdata[p]if (str.indexOf('#') == 0 ) {let key = str.substr(1)postdata[p] = _.get(all,key)}}let data = await http[method](url,postdata)all[testCase.key].req = postdataall[testCase.key].res = dataconsole.log({name:testCase.name,url,method,req:postdata,res:data})}catch(e){console.log(e)}}
}
watch(cfg.dir , {recursive: true,filter : new RegExp(`\.${cfg.type}$`)},run_test)
run_test()

在这里用了一个小把戏,就是req的定义如果以 '#' 开始,则从测试的上下文中进行取值。
也是用了现成的lodash库。

OK,现在为止,大功告成,每当接一个新需求,我会配置一份测试文件,然后让自己的测试脚本跑进来,时刻看着代码的调试情况。

这个东西虽然简单,其实可以扩展的无限灵活,全当是抛砖引玉,给大家一个思路了。

关于老拐瘦

散养程序猿,野生架构狮
二流搬砖工,三流摄影师
假正经真逗比,装文艺实二逼

所以,这么一个公众号里,会有代码,有段子,有美图,有鸡汤,反正,乱七八遭的,没准碰上哪个刚好就烦到您了呢

啥也不说,扫码关注吧

[node]request+watch开发自测的懒人神器相关推荐

  1. 如何用TestNG满足开发自测?

    写在前边 用单元测试Junit完全可以满足日常开发自测,为什么还要学习TestNG,都影响了我的开发进度! 最近技术部老大突然宣布:全体开发人员必须熟练掌握自动化测试框架TestNG,就有了上边同事们 ...

  2. java研发自测报告_开发自测方法探讨

    开发自测被多个团队实践,开发自测的效果也是不一而足的,具体怎么样的开发自测方式是更好的,每个人都有自己的观点和看法,这里说说自己对开发自测的方法的一些探讨. 一.传统研发流程的弊病 在讨论开发自测之前 ...

  3. 开发自测,到底该从哪里做起?

    最近有几个在做开发的同学问我是怎么做测试的,或者怎么对一个系统进行测试. 这个问题看似简单,其实范围很广,特别是在不知道公司业务和系统的情况下,无法给一个正确的答复. 如果我告诉你就是做功能性能安全测 ...

  4. 吐槽嫌弃测试周期太长?开发自测一下

    互联网产品竞争激烈,在生存的巨大压力之下,策划和运营人员们恨不得每一个需求都能秒级上线,这就给研发团队带来了巨大的压力. 有时候,产品的老大很关注某一个功能点,希望能尽快上线,可是,他发现这个功能的开 ...

  5. [ 懒人神器 ] —— OO一键build:.zip - .jar

    懒人神器 更新 大家注意一下,由于在写入MANIFEST的时候,Class-Path路径给的是 ../lib ,即上级目录的lib. 所以在对拍时如果手动移动了 jar包的位置,需要保证 lib/ 文 ...

  6. 懒人神器 !一个创意十足的 Python 命令行工具

    作者 | 写代码的明哥 来源 | Python编程时光 当听到某些人说 xx 库非常好用的时候,我们总是忍不住想要去亲自试试. 有一些库,之所以好用,是对一些库做了更高级的封闭,你装了这个库,就会附带 ...

  7. 微信小程序测试方法 二维码测试 开发自测

    官方文档 情景1. 测试人员测试小程序 & 内测 方法:设置"体验版". 体验版前提:后端必须有https域名支持! 需要进行如下设置: 1. 开通体验版 版本管理设置 在 ...

  8. 懒人神器:自动生成单元测试插件 Squaretest

    你是否常常因代码需编写单元测试而痛苦不堪,你是否因单元测试历史债而惆怅不断,Squaretest或许能帮你消除痛苦消除惆怅 前言 一.Squaretest是什么? 二.使用步骤 1.引入插件 2.使用 ...

  9. android懒人笔记

    摘自大神Trinea 一.ListView android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新,ListView.ViewPager.WebView.Expa ...

  10. wince 百度地图懒人包_【分享】路虎高德V6.0+V33图资懒人包(WIN CE)【亲测】

    本帖最后由 hnxzsk 于 2016-8-1 09:50 编辑 [分享][转载][亲测][可用] 路虎高德V6.0+V33图资懒人包 看到网友发的是凯立德的地图,有朋友说经常用的是高德,本人就分享过 ...

最新文章

  1. birt脚本for循环_Shell脚本编程2 for循环/while循环
  2. 【APICloud系列|34】免费使用的ChromeDebug 模块
  3. Java笔记02-OOP
  4. linux 下安装 vim
  5. 阿里巴巴CTO程立:践行“好科技”,我们正在做这些事
  6. 自己制作的4X4光立方焊接时候出现的问题
  7. 开发者API资源(接口整理)
  8. SSM的整合项目(详细)
  9. 企业邮箱登录入口:企业邮箱oa管理系统
  10. MyBioSource丨人Hif1αelisa试剂盒解决方案
  11. linux统计代码耗时函数,统计函数执行耗时
  12. 职称计算机考试演示,2015职称计算机考试模拟题:演示文稿的放映、打包和打印...
  13. [R语言] WGCNA入门教程
  14. 微信小程序:小秋工具箱开发总结
  15. Mycat 读写分离+分库分表
  16. 数码相框解决方案深度分析
  17. ERP系统的八大主要功能模块
  18. 用口诀背单词 - 5
  19. 帝国时代php,依然经典,《帝国时代》WEB版现世
  20. 计算机毕业设计之java+javaweb的充电桩综合管理系统

热门文章

  1. 基于和风天气API开发的天气查询小工具(含源码)
  2. 「奶茶鼠太空系列」「敷衍熊探索发现系列」数字藏品限量抢!
  3. 微信扫码下载APK遮罩提示示例
  4. 关于lcm,gcd的一些性质
  5. 每日excel学习之分类汇总和数据有效性
  6. Flutter网格控件GridView
  7. 当电脑内存比较小的时候,小于4G,安装32bit还是64bit呢
  8. 2021-1-16-JavaGuide老哥的操作系统常见问题总结 自己按照理解,综合了王道考研的视频,对内容进行了修改,增加了内容,以便于自己理解。这份材料不是背的,而是让自己去理解的。
  9. 输入今天的日期,输出明天的日期
  10. 计算机专业—毕业设计题目大全