Angularjs 量角器日志Prefs,如何在特定测试步骤后开始和停止记录性能日志,并在完成后停止记录

Angularjs 量角器日志Prefs,如何在特定测试步骤后开始和停止记录性能日志,并在完成后停止记录,angularjs,protractor,Angularjs,Protractor,我在测试中使用loggingPrefs来记录测试期间发出的所有网络调用/http请求,我想知道是否可以在某个测试步骤后记录性能日志,并在该步骤完成后停止。因此,我可以验证在执行步骤后是否发出了某些Http请求 例如: //Start Recording Performance after user is logged in //and validate certain HTTP request is made //Stop Recording Performance //Log out fro

我在测试中使用loggingPrefs来记录测试期间发出的所有网络调用/http请求,我想知道是否可以在某个测试步骤后记录性能日志,并在该步骤完成后停止。因此,我可以验证在执行步骤后是否发出了某些Http请求

例如:

//Start Recording Performance after user is logged in
//and validate certain HTTP request is made
//Stop Recording Performance 
//Log out from application - I do not want to record performance for Logout step

这应该可以完成任务。使代码适应您的需要。不要忘记连接浏览器

能力:

'goog:chromeOptions': {
    'perfLoggingPrefs': {
        'enableNetwork': true,
        'enablePage': false
    }
},
loggingPrefs: {
 'performance': 'ALL'
}
规范示例:

import { browser } from 'protractor';

describe('dummy test', () => {
    it('should do something', async () => {
        const startTime = Date.now();

        await browser.waitForAngularEnabled(false);
        await browser.get('https://google.com');

        await browser.sleep(5000);

        const endTime = Date.now();

        await collectPerformLog(startTime, endTime);
    });
});

export async function collectPerformLog(timeFrom, timeTo) {
    await browser.manage().logs().get('performance').then((browserLog) => {

        const fs = require('fs-extra');
        const filePath = '/performance/performance.log';
        fs.ensureDirSync('/performance/');
        let filteredData = browserLog
            .filter(data => timeFrom < data.timestamp && timeTo > data.timestamp);
        fs.appendFile(filePath, JSON.stringify(filteredData));

    }).catch((e) => {
        console.log('Error collection performance logs.', e);
    });
}
从“量角器”导入{browser};
描述('虚拟试验',()=>{
它('应该做点什么',异步()=>{
const startTime=Date.now();
wait browser.waitForAngularEnabled(false);
等待浏览器。获取https://google.com');
等待浏览器。睡眠(5000);
const endTime=Date.now();
等待收集性能日志(开始时间、结束时间);
});
});
导出异步函数collectPerformLog(timeFrom,timeTo){
等待browser.manage().logs().get('performance')。然后((browserLog)=>{
常数fs=需要('fs-extra');
const filePath='/performance/performance.log';
财政司司长ensureDirSync(“/performance/”);
让filteredData=browserLog
.filter(数据=>timeFromdata.timestamp);
appendFile(filePath,JSON.stringify(filteredData));
}).catch((e)=>{
log('Error collection performance logs',e);
});
}

我尝试了此操作,但FilteredData不包含任何内容,performance.log将使用[]创建为空文件。您是否在量角器中添加了功能?检查browserLog,如果其为空,则表示您忘记启用功能中的某些内容,否则,为筛选器提供的日期-从/到与记录的数据的时间戳不匹配。我尝试了两种方法
browser.manage().logs().get('performance')。然后((browserLogs)=>{var filteredata=browserLogs.filter(data=>timeFromdata.timestamp);})这不起作用,但如果我这样写它,它会起作用:
browserLogs.forEach((browserLog)=>{var message=JSON.parse(browserLog.message).message;console.log(message.params.request.url,browserLog.timestamp);})您提供的时间戳,用于筛选与浏览器日志中的真实数据不匹配的数据。确保timestamp-start在请求之前,end timestamp在您希望减少浏览器日志时。脚本工作正常,只是您必须正确应用日期时间戳