2017-03-13 91 views
0

我正在使用量角器並嘗試使用基於時間戳的文件名創建文件。問題是,儘管我使用browser.sleep()在創建時間戳(用於創建文件名)之前等待了一段隨機時間,但文件名相互仍在大約50ms內:量角器:跟蹤當前規格

if (instanceCount < 4) { 
     var randomNumber = Math.floor(Math.random() * (10000 - 500 + 1)) + 500; 
     console.log("instanceCount == " + instanceCount + "... sleeping " + randomNumber + " ms"); 
     browser.sleep(randomNumber); 
    } 

    var date = new Date(); 
    timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' + 
     date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms'; 

    fs.writeFileSync(filepath + timeStamp, 'utf8'); 

    instanceCount = fs.readdirSync(filepath).length; 

timeStamp變量似乎忽略了browser.sleep()函數。我嘗試使用一個函數返回一個承諾,但無法讓它工作。這是我想出的:

var getTimestamp = function() { 
     return new Promise(function (resolve, reject) { 

      if (instanceCount < 4) { 
       var randomNumber = Math.floor(Math.random() * (10000 - 500 + 1)) + 500; 
       console.log("instanceCount == " + instanceCount + "... sleeping " + randomNumber + " seconds"); 
       browser.sleep(randomNumber); 
      } 

     }); 
    }; 

     getTimestamp().then(function() { 
      var date = new Date(); 
      timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' + 
       date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms'; 

       fs.writeFileSync(filepath + timeStamp, 'utf8'); 
     }, 

有人可以告訴我,如果我在正確的軌道和/或如果這對流量控制/執行有意義嗎?

+0

而不是試圖寫一些任意的時間戳一些文件,還有其他的方式來獲得書面其它更有意義的文件。你可以使用茉莉花記者,並使用合併來僞造。這將按規格書寫文件。看到這個https://github.com/angular/protractor-cookbook/blob/master/jasmine-junit-reports/conf.js#L18。您還可以使用阻止代理功能分隔出日誌。有關阻止代理的更多信息,請查看https://github.com/angular/blocking-proxy中的自述文件。 – cnishina

+0

我嘗試過使用jasmine-reporter,但我可以工作的唯一方法是addReporter方法,並且我已經有記者登錄到我的控制檯。我意識到從時間戳命名文件似乎並不是最佳實踐,但我需要從此代碼獲得的主要功能是讀取給定時間點文件夾中有多少文件。文件本身並不重要,並且將文件名作爲時間戳記有助於顯示執行過程中發生了什麼。我已經用instanceCount變量更新了我的問題以顯示我的意思 – Tom

+0

您是否爲此嘗試過食譜?它應該按規格分開。如果你所有的測試都在一個文件中,這隻會產生一個文件。 – cnishina

回答

0

如果您打算使用新的承諾,您的方法需要解決承諾。另外,如果您要使用browser.sleep,則需要返回該承諾。在下面的例子中,我鏈接它返回一個布爾值。這將幫助我們決定寫入文件還是不寫入文件。

/** 
* gets the timestamp should resolve and return a promise 
* @returns Promise<boolean> if true, it is instanceCount < 4. false 
*   if instanceCount >= 4 
*/ 
let getTimestamp = function() { 
    if (instanceCount < 4) { 
    let randomNumber = Math.floor(Math.random() * (10000 - 500 + 1)) + 500; 
    console.log("instanceCount == " + instanceCount + "... sleeping " + randomNumber + " seconds"); 
    return browser.sleep(randomNumber).then(() => { return true }); 
    } else { 
    return Promise.resolve(false); 
    } 
}; 

getTimestamp().then((result)=> { 
    if (result) { 
    let date = new Date(); 
    timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' + 
    date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms'; 
    fs.writeFileSync(filepath + timeStamp, 'utf8'); 
    } 
} 
0

我發現從cnishina,其中包括使用browser.wait()的方法。然後和向下延伸它所有的方式(約50線)的地方,我所需要的執行用很大的幫助的溶液是同步的。很酷的是,.then函數結束後的所有內容都是異步執行的,這意味着實際上根本沒有時間浪費!下面的代碼:

 browser.sleep(randomNumber).then(function() { 

      var date = new Date(); 
      timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' + 
       date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms'; 

      fs.writeFileSync(filepath + timeStamp, 'utf8'); 

      //.then function continues...