2017-03-13 22 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...