使用CukeTest建立指令碼自動化備份檔案到網盤

趙陽陽發表於2019-03-01

前言

自動化指令碼可以完成任何事情,幫助大家節省時間和成本,這也是機器人流程自動化(RPA)和自動化測試在企業中應用越來越廣的原因。下面就介紹一個通過指令碼自動化備份檔案的步驟,懂一點JavaScript的同學都能輕鬆實現噢。

百度網盤作為一款常用的網路儲存軟體,可以幫助我們將檔案儲存到雲端,為儲存檔案提供了很大的便利。同時,百度網盤有個【自動備份資料夾】的功能,以便於自動同步。但是這個功能是會員,需要收費才能用。假如你和我一樣不是會員,恰巧又想用到這個功能。那就跟著我來寫一個簡單的自動化指令碼來實現這個功能吧!

準備

  • 作業系統:Windows7以及以上版本的Windows。
  • 客戶端:安裝百度網盤Windows桌面客戶端。
  • 程式碼: CukeTest 內建有Windows桌面應用自動化庫的一款自動化編輯器 cuketest.com/download

操作步驟

  1. 設定本地需要備份的資料夾
  2. 獲取本地目錄中檔名
  3. 自動化指令碼操作百度網盤開啟本地目錄上傳此目錄檔案。

具體操作

  1. 開啟CukeTest,新建專案,選擇【Windows】模組。
image.png | left | 589x286
  1. 編輯feature檔案,輸入功能描述。

    # language: zh-CN
    功能: 備份檔案到百度網盤
    百度的自動備份功能需要會員才能用,作為沒有會員的我寫一段自動化指令碼來實現類似功能
    
      場景: 自動備份檔案到百度網盤
        假如將"D:\backups" 目錄作為需要備份的目錄。
        同時獲取此目錄下所有檔案。
        那麼將此目錄檔案上傳到百度網盤。
    
    複製程式碼
image.png | left | 495x371
  1. 備份檔案的操作:開啟百度網盤,點選【上傳】按鈕,選擇資料夾,上傳。根據手工操作步驟,準備百度網盤客戶端的物件模型。開啟model1.tmodel檔案;使用CukeTest自帶的Windows物件識別器查詢元素。
    百度網盤的介面不是用標準的Windows控制元件來做的。使用物件識別器只能識別到整個Window。這裡介紹一下物件識別器的另一個功能–【虛擬物件識別】。具體操作如下: (也可以參考騰訊課堂免費視訊:ke.qq.com/course/3473…
    1. 在識別到的整個Windows控制元件上右鍵–【編輯虛擬控制元件】
image.png | left | 345x391
2. 在編輯虛擬控制元件介面。【新增虛擬控制元件】--畫出【上傳】按鈕的位置,並修改控制元件名為【上傳】
複製程式碼
image.png | left | 691x320
3. 點選確定。在物件模型管理器中可以實現對【上傳】控制元件的定位。
複製程式碼
image.png | left | 691x175
  1. 使用模型管理器獲取檔案上傳對話方塊的物件模型。
image.png | left | 719x343
  1. 根據描述實現自動化指令碼。
    definitions1.js
    const { Given, When, Then } = require(`cucumber`);
    const { TestModel, Auto } = require(`leanpro.win`);
    const { Util } = require(`leanpro.common`);
    
    const path = require(`path`);
    let fs = require(`fs`);
    
    let model = TestModel.loadModel(__dirname + "/model1.tmodel");
    
    
    //// 你的步驟定義 /////
    
    var backpath;
    
    Given(/^將"([^"]*)" 目錄作為需要備份的目錄。$/, async function (dirpath) {
    
        backpath = path.join(dirpath);
    });
    var filestring=``;
    Given(/^獲取此目錄下所有檔案。$/, async function () {
    
        let moment =require(`moment`)
        let date = moment().format(`YYYY-MM-DD`);
        let dir = path.join(backpath);
        let files = fs.readdirSync(dir)
        
        for(var i =0;i<files.length;i++){
            filestring += `"`+files[i]+`" `
        }    
        
    });
    
    Then(/^將此目錄檔案上傳到百度網盤。$/, async function () {
        await model.getVirtual("上傳").click(0, 0, 1);
        await model.getEdit("檔名(N):1").clearAll();
        await model.getEdit("檔名(N):1").set(backpath);
        await model.getButton("存入百度網盤").click(0, 0, 1);
        await model.getEdit("檔名(N):1").set(filestring);
        console.log(filestring)
        await model.getButton("存入百度網盤").click(0, 0, 1);
    });
    複製程式碼
  2. 執行
    點選【執行】按鈕,即可看到自動化指令碼可以自動開啟百度網盤上傳檔案。
  3. 擴充套件
    CukeTest的指令碼支援命令列執行,具體可以在【執行】–【編輯執行配置】中可以找到。
image.png | left | 593x580

編輯執行配置中複製生成的命令列,可以直接在命令列中執行,所以可以將此命令寫到bat指令碼中。設定定時任務執行來實現定時上傳檔案。或者在Jenkins中配置定時任務實現定時自動備份檔案。

總結

下次要備份別的目錄只要修改feature檔案中目錄資訊就可以了,無需修改程式碼。有興趣的同學可以舉一反三,將平常繁瑣的操作自動化,只需要一些node.js的基礎知識,就可以快速編寫一個可以自動化的場景。當這些場景積累多了,可以組合成一個自動化流程,那時你就是流程自動化的專家啦。

相關文章