使用node.js进行API自动化回归测试
概述
原理
- 录制HTTP
- 解析HTTP文本
- 执行准备工作(set up)
- 执行测试
- 处理并校验结果
- 测试报告
- 定期执行
- 总结
{req_method: '',req_endpoint: '',req_headers: {},req_body: '',res_headers: {},res_body: '' }
superagent.get(‘www.baidu.com’).redirects(0)
如果要测试的系统都是HTTPS,需要取得信任证书,并导出来(浏览器登录https的时候会要求接受证书,这个过程中可以导出来),以备模拟登录时使用。superagent使用证书简单示例,假设已准备好的证书文件为abc.pem:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';var cert = fs.readFileSync(__dirname + '/abc.pem'); superagent.get('https://abc.com').ca(cert).end(function(err, res) {...});
注意node.js里面一定要设置 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 才能成功。
function request(httpReq, testData) { //httpReq代表一个http; testData主要是设置对http response进行校验的黑白名单等等return new Promise(function(resolve) {var assert = require('./assertion.js').assert, //引入自己开发的assertion模块对http reponse进行校验endpoint = httpReq.req_endpoint,req_method = httpReq.req_method.toLowerCase(),req_headers = httpReq.req_headers,req_body = httpReq.req_body;superagent[req_method](endpoint).set(req_headers).send(req_body).timeout(10000).end(function(err, res) {var result = assert(httpReq, res, testData);resolve(result);});}); }
var superagent = require('superagent');function execute(httj, testData) { //httj是所有解析出来的http对象集合; testData是为需要的http设置的黑白名单等校验条件var failureCount = 0,logs = [];if (testData.serial) { //串行var p = Promise.resolve();for (var key in httj) {void function(k) {p = p.then(function(result) {log(result);return request(httj[k], testData); //request函数简单包装了superagent执行HTTP的方法,见上一段示例代码 });}(key);}p.then(function(result) {log(result);});} else { //并行var allWS = [];for (key in httj) {allWS.push(request(httj[key], testData));}p = Promise.all(allWS).then(function(arr) {for (var result of arr) {log(result);}});}return p.then(function() {var isPassed, report;failureCount === 0 ? isPassed = true : isPassed = false;report = logs.sort().join('');return { //生成最终测试结果 isPassed,report};});function log(result) {if (result !== undefined) {if (result.status === 'failed') {++failureCount;}logs.push(result.info);}} }
function search(obj, key) {var arr = [];for (var i in obj) {if (!obj.hasOwnProperty(i)) continue; //exclude properties from __proto__if (i === key) {var o = new Object;o[i] = obj[i];arr.push(o);}if (typeof obj[i] === 'object') {arr = arr.concat(search(obj[i], key));}}return arr; }
"assertion_criteria": {"baidu.com/home/display": {"whitelist": ["<title>Home</title>", "name", "货币"]},"baidu.com/search": {"blacklist": ["pageInfo", "id", "时间戳"]} }
function flatten(obj) {var arr = [];if(obj instanceof Array) {obj.forEach(function(element) {if(typeof element!=='object') {arr.push('ROOT:' + element);} else {arr = arr.concat(flatten(element));}});} else {for(var key in obj) {if(!obj.hasOwnProperty(key)) continue;if(typeof obj[key]!=='object') {arr.push(key + ':' + obj[key]);} else {if(obj[key] instanceof Array) {obj[key].forEach(function(element) {if(typeof element==='object') {arr = arr.concat(flatten(element));} else {arr.push(key + ':' + element);}});} else {arr = arr.concat(flatten(obj[key]));}}}}arr.sort();return arr; }
把http reponse经过上述黑白名单、扁平化处理后,就可以使用chai库进行字符串或者json对象比较(chai的eql或者contain方法),判断结果是否一致。这里就不贴代码了。
总结
转载于:https://www.cnblogs.com/chrischjh/p/4845691.html
使用node.js进行API自动化回归测试相关推荐
- 十个书写Node.js REST API的最佳实践(上)
收录待用,修改转载已取得腾讯云授权 原文:10 Best Practices for Writing Node.js REST APIs 我们会通过本文介绍下书写Node.js REST API的最佳 ...
- api怎么写_使用Node.js原生API写一个web服务器
Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...
- Vanilla Node.js REST API示例
A Vanilla Node.js REST API without Frameworks such us Express | Engineering Education (EngEd) Progra ...
- 【node.js后台api项目】(二)实现注册功能
[node.js后台api项目](二)实现注册功能 一.实现思路 二.项目目录 三.代码编写 1.基本代码 2.数据合法性校验 3.注册路由处理函数 4.密码加密 一.实现思路 注册功能简单来说就是提 ...
- 【node.js后台api项目】(七)更新用户头像接口
[node.js后台api项目](七)更新用户头像接口 1.接口相关信息 2. 定义路由和处理函数 3.验证提交的数据 4.实现更新用户基本信息功能 1.接口相关信息 路由: /my/update/a ...
- [Node.js]Restful Api
摘要 什么Rest? REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种 ...
- node js fcoin api 出现 api key check fail : {status:1090,msg:Illegal API signature}
//主区://ft / btc 不支持市价 买入数量不能小于5个FT 买//ft / eth 支持市价 最小买入eth不能小于0.01 买//ft / usdt 支持市价 最小买入usdt不能小于10 ...
- 2020 年 Node.js 开发者调查报告
导读:本次调查由阿里巴巴.腾讯等公司领衔,调查时间从 2020 年 2 月至 4 月,以中文进行.截止至 4 月 10 日共有 1113 名受访者参加调研.本报告将从 Nodejs 开发者人群.应用场 ...
- Node.js 开发者 2020 年度报告
大家好,我是若川.欢迎加我微信 ruochuan12,长期交流学习.今天分享一篇Node.js报告,记得当时我还参与填写这个调查问卷了,Node.js的重要性不言而喻.微信预计阅读只需7分钟.点击下方 ...
最新文章
- Revit:概念建模环境技能学习 Revit: Conceptual Modeling Environment
- Oracle Hints具体解释
- php fpm 三个模式_php-fpm运行原理和模式的简单介绍
- [css] 说说你对table-layout的理解,它有什么运用场景?
- ORM中的Model与DDD中的DomainModel
- 【刷算法】字符串的全排列
- visjs使用小记-2.option参数注释说明
- [洛谷P1156][codevs1684]垃圾陷阱
- (机器学习之算法)凸优化
- 为什么人和人的差距这么大?
- c语言编程马克思手稿 百例,清华大学出版社-图书详情-《C语言趣味编程100例》...
- 基于UDP的网络聊天室
- unity如何插入图片_unity 图片导入及其使用方法
- 解决bug-python中关于Process finished with exit code -1073740791
- 【快速打点综合工具 -- ALLiN】
- C++:实现量化如何建立一个期限结构,并为一个简单的FRA远期利率协议测试实例
- Linux 安装apr-util
- Hyperion Research:2021年量子计算市场收入已达4.9亿美元
- Win11下VS2022的emguCV4.6安装配置方法
- 使用Keras进行单模型多标签分类