4.0 复制文件目录结构及文件本身

本文介绍了一种改进的自动化测试方法,当测试失败时,不仅将失败的文件复制到‘failed’文件夹,而且同时保留原始目录结构。通过新增`copyDir`方法来提取并创建源文件的目录结构,确保文件在目标位置能按原结构组织。修改后的`copy`方法利用`fs`模块进行文件操作,确保当文件已存在时不会覆盖。这种改进有助于更有效地管理和排查测试失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原本将自动化测试在中,失败的文件复制到一个failed文件夹里,但是发现错误文件太多的话,不太好区分这些文件原本属于哪个目录结构,毕竟在原文件的目录结构里,对这些文件进行了区分,所以修改代码,连同原有的目录结构一快复制过去

一、新增一个方法

/**下述方法主要对目录结构做一个简单的提取及拼接
根据实际情况,去除掉文件名和前面最前面的两层目录
并且循环去创建目录,由于dir默认值是"\\",所有dirpath后面不需要带"\\"
如copyDir("D://","D://test/new/project/index.html")应写成
copyDir("D:","D://test/new/project/index.html")
*/
function copyDir(dirpath, filepath) {
    if (filepath !== undefined) {
        let arr = filepath.split("\\");
        let dir = '\\';
        for (let i = 2; i < arr.length - 1; i++) {
            if (!fs.existsSync(dirpath + dir + arr[i])) {
                dir = dir + arr[i] + "\\";
                fs.mkdirSync(path.join(dirpath + dir), function (error) {
                    if (error)
                        return error
                })
            }
            else
                dir = dir + arr[i] + "\\";
        }
        return path.join(dirpath + dir)
    }
}

二、修改原有的copy方法

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 dir = copyDir(dirpath, file)
    if (dir !== undefined) {
        let failedPath = path.join(dir, fileName)
        if (!fs.existsSync(failedPath)) {
            let readSteam = fs.createReadStream(file);
            let writeSteam = fs.createWriteStream(failedPath);
            readSteam.pipe(writeSteam)
        } else
            return 'file already exists'
    }
}


function getFileName(filepath) {
    let arr;
    if (filepath !== undefined) {
        arr = filepath.split("\\");
        return arr[arr.length - 1]
    }
}

三、最终效果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值