由于最近做formData格式的请求,需要对一大批文件做接口自动化的测试,当某些文件因为超时、文件本身、程序本身等原因造成自动化脚本中的部分用例失败时,我们就需要把这些文件单独来出来进行甄别及修改,以便再次运行脚本的时候,可以单独运行产生错误的文件,jest本身的bail参数显然不能满足当前需求。
一、封装新建目录及复制文件的方法
const fs = require('fs')
const path = require('path')
function createDir(dirpath, file) {
let exist = fs.existsSync(dirpath)
if (exist) {
copy(dirpath, file)
} else {
fs.mkdir(dirpath, function (error) {
if (error)
return error
})
copy(dirpath, file)
}
}
function copy(dirpath, file) {
let fileName = getFileName(file)
let failedPath = path.join(dirpath, fileName)
let readSteam = fs.createReadStream(file);
let writeSteam = fs.createWriteStream(failedPath);
readSteam.pipe(writeSteam)
}
function getFileName(filepath) {
let arr = filepath.split("\\");
return arr[arr.length - 1]
}
module.exports = createDir
二、在断言失败语句前面,调用上述方法
if (flag === 1 && (end_time - start_time) < wait_time) {
wait.wait(wait_time)
continue;
}
if (flag === 1 && (end_time - start_time) >= wait_time) {
copy(defaultSettings.config.failed_path,array[i])
assert.fail("Time Out")
break;
}
if (flag === 2) {
copy(defaultSettings.config.failed_path,array[i])
assert.fail("Task's state is Error")
break
}
if (flag === 3) {
copy(defaultSettings.config.failed_path,array[i])
assert.fail("Task's action is ALLOW")
break
}
if (flag === 4) {
assert.ok("success")
break
}
else {
assert.fail(flag)
break;
}
三、接下来可以新建一个failed.js测试脚本,去读取该目录里的文件,如果存在文件,就执行,没有文件就不执行,jest不像mocha,可以在运行中获取this实例,所以可以只能在测试方法外层加上一个判断来执行,类似如下代码结构
describe('',function (){
let flag = false//假设读取failed目录为空,则flag为false
if (flag){
it('should ', function () {
});
}
else
it.skip('should ', function () {
});
})