一、工作中需要发送formData请求,循环发送某个目录下的所有文件,再通过其他接口获取结果,所以先要提取文件
//parse_file.js
const fs = require('fs');
const path = require('path');
var temp = []
exports.parse_file =
function parse_file(dir_path) {
let p = path.join(dir_path);
let stat = fs.lstatSync(p);
let is_direc = stat.isDirectory();
if (is_direc) {
let length = fs.readdirSync(p)
for (let i of length) {
parse_file(path.join(dir_path + '\\' + i))
}
} else {
temp.push(p)
}
return temp
}
二、编写测试脚本,循环发送formData请求
//check_file.js
const parse = require('../utils/parse_file.js')
const path = require('../config/config')
const axios = require('axios')
const defaultSettings = require('../config/config')
const FormData = require('form-data');
const fs = require('fs');
const replace = require('../utils/replace')
const assert = require('assert')
axios.defaults.baseURL = defaultSettings.config.url;
// require('events').EventEmitter.defaultMaxListeners = 0;
describe('check_file', function () {
const array = parse.parse_file(path.config.path);
const config = {
method: 'post',
url: defaultSettings.config.inter_path.task,
headers: {
'Authorization': '',
'cookie': '',
'content-type': '',
},
//有的文件会比较大的话,需要设置maxBodyLength参数
maxBodyLength: 1000000000
}
beforeAll(async function () {
await axios.post(defaultSettings.config.inter_path.dologin, defaultSettings.config.login_config, {
headers: {
'content-type': 'application/json;charset=UTF-8'
}
})
.then(res => {
config.headers.Authorization = res.headers["set-cookie"];
config.headers.cookie = res.headers['set-cookie'][0];
})
})
for (let i = 0; i < array.length; i++) {
let data = new FormData();
config.headers["content-type"] = {...data.getHeaders()}['content-type']
//将文件名当成用例名,输出到测试报告中,以对比结果,方便找出具体哪个文件没通过测试
it(`${array[i]}`, async function () {
let source_name;
//这里需要对replace方法中的参数判空,不然会报cannot read property 'replace' of null错误
if (array[i] != null) {
source_name = replace(array[i]);
}
jest.setTimeout(100000)
data.append('file', fs.createReadStream(array[i]));
data.append('remark', '');
data.append('securityLevel', '');
config.data = data;
await axios(config)
.then(function (response) {
//请求成功后,会将文件的名字给返回来,所以这里做了正则匹配,来判定接口是否成功
let res_name
if (response.data.name != null) {
res_name = replace(response.data.name);
}
if (new RegExp(res_name).test(source_name)) {
assert.ok("success")
} else {
assert.fail(`${response.data.name} don't match source's name`)
}
})
.catch(function (error) {
assert.fail(error)
});
})
}
})
三、封装正则方法
//replace.js
//这里要对文件名中的特殊字符做个替换
module.exports = function replace(str) {
let pattern = /[\+\-\!\@\#\$\%\^\&\*\(\)\{\}\[\]\_\=\`\~\/\\\,\.\:\;\"\'\?\。\|\,\<\>]/g;
return str.replace(new RegExp(pattern), '')
}
四、测试报告展示