Capture user actions times for MV2 benchmark and generate artifacts (#15353)
* User actions benchmark and artifacts * Lint and fix identation * Fix lint * Updated path * lint * Add user actions benchmark to pre release job * Remove title * Out path updated * See if url is finally fixed * Adding some console logs * lint * fix lint * fix lint * Updated persisting and store artifacts path * Added MetaMask bot correct link and remove console logs * Remove console log * Sort Imports * Fix lint * Update loadAccount function and prop name for clarity to loadNewAccount * Run yarn setup * Fix yarn * Update Create Account element for Create account * Remove unnecessary step on send Co-authored-by: Jyoti Puri <jyotipuri@gmail.com>feature/default_network_editable
parent
23b882449f
commit
437acdb74c
@ -0,0 +1,130 @@ |
|||||||
|
const path = require('path'); |
||||||
|
const { promises: fs } = require('fs'); |
||||||
|
const yargs = require('yargs/yargs'); |
||||||
|
const { hideBin } = require('yargs/helpers'); |
||||||
|
const { exitWithError } = require('../../development/lib/exit-with-error'); |
||||||
|
const { |
||||||
|
isWritable, |
||||||
|
getFirstParentDirectoryThatExists, |
||||||
|
} = require('../helpers/file'); |
||||||
|
const { convertToHexValue, withFixtures } = require('./helpers'); |
||||||
|
|
||||||
|
const ganacheOptions = { |
||||||
|
accounts: [ |
||||||
|
{ |
||||||
|
secretKey: |
||||||
|
'0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC', |
||||||
|
balance: convertToHexValue(25000000000000000000), |
||||||
|
}, |
||||||
|
], |
||||||
|
}; |
||||||
|
|
||||||
|
async function loadNewAccount() { |
||||||
|
let loadingTimes; |
||||||
|
|
||||||
|
await withFixtures( |
||||||
|
{ |
||||||
|
fixtures: 'imported-account', |
||||||
|
ganacheOptions, |
||||||
|
}, |
||||||
|
async ({ driver }) => { |
||||||
|
await driver.navigate(); |
||||||
|
await driver.fill('#password', 'correct horse battery staple'); |
||||||
|
await driver.press('#password', driver.Key.ENTER); |
||||||
|
|
||||||
|
await driver.clickElement('.account-menu__icon'); |
||||||
|
const timestampBeforeAction = new Date(); |
||||||
|
await driver.clickElement({ text: 'Create account', tag: 'div' }); |
||||||
|
await driver.fill('.new-account-create-form input', '2nd account'); |
||||||
|
await driver.clickElement({ text: 'Create', tag: 'button' }); |
||||||
|
await driver.waitForSelector({ |
||||||
|
css: '.currency-display-component__text', |
||||||
|
text: '0', |
||||||
|
}); |
||||||
|
const timestampAfterAction = new Date(); |
||||||
|
loadingTimes = timestampAfterAction - timestampBeforeAction; |
||||||
|
}, |
||||||
|
); |
||||||
|
return loadingTimes; |
||||||
|
} |
||||||
|
|
||||||
|
async function confirmTx() { |
||||||
|
let loadingTimes; |
||||||
|
await withFixtures( |
||||||
|
{ |
||||||
|
fixtures: 'imported-account', |
||||||
|
ganacheOptions, |
||||||
|
}, |
||||||
|
async ({ driver }) => { |
||||||
|
await driver.navigate(); |
||||||
|
await driver.fill('#password', 'correct horse battery staple'); |
||||||
|
await driver.press('#password', driver.Key.ENTER); |
||||||
|
|
||||||
|
await driver.clickElement('[data-testid="eth-overview-send"]'); |
||||||
|
|
||||||
|
await driver.fill( |
||||||
|
'input[placeholder="Search, public address (0x), or ENS"]', |
||||||
|
'0x2f318C334780961FB129D2a6c30D0763d9a5C970', |
||||||
|
); |
||||||
|
|
||||||
|
const inputAmount = await driver.findElement('.unit-input__input'); |
||||||
|
await inputAmount.fill('1'); |
||||||
|
|
||||||
|
await driver.clickElement({ text: 'Next', tag: 'button' }); |
||||||
|
const timestampBeforeAction = new Date(); |
||||||
|
await driver.clickElement({ text: 'Confirm', tag: 'button' }); |
||||||
|
|
||||||
|
await driver.clickElement('[data-testid="home__activity-tab"]'); |
||||||
|
await driver.wait(async () => { |
||||||
|
const confirmedTxes = await driver.findElements( |
||||||
|
'.transaction-list__completed-transactions .transaction-list-item', |
||||||
|
); |
||||||
|
return confirmedTxes.length === 1; |
||||||
|
}, 10000); |
||||||
|
|
||||||
|
await driver.waitForSelector('.transaction-status--confirmed'); |
||||||
|
const timestampAfterAction = new Date(); |
||||||
|
loadingTimes = timestampAfterAction - timestampBeforeAction; |
||||||
|
}, |
||||||
|
); |
||||||
|
return loadingTimes; |
||||||
|
} |
||||||
|
|
||||||
|
async function main() { |
||||||
|
const { argv } = yargs(hideBin(process.argv)).usage( |
||||||
|
'$0 [options]', |
||||||
|
'Run a page load benchmark', |
||||||
|
(_yargs) => |
||||||
|
_yargs.option('out', { |
||||||
|
description: |
||||||
|
'Output filename. Output printed to STDOUT of this is omitted.', |
||||||
|
type: 'string', |
||||||
|
normalize: true, |
||||||
|
}), |
||||||
|
); |
||||||
|
|
||||||
|
const results = {}; |
||||||
|
results.loadNewAccount = await loadNewAccount(); |
||||||
|
results.confirmTx = await confirmTx(); |
||||||
|
const { out } = argv; |
||||||
|
|
||||||
|
if (out) { |
||||||
|
const outputDirectory = path.dirname(out); |
||||||
|
const existingParentDirectory = await getFirstParentDirectoryThatExists( |
||||||
|
outputDirectory, |
||||||
|
); |
||||||
|
if (!(await isWritable(existingParentDirectory))) { |
||||||
|
throw new Error('Specified output file directory is not writable'); |
||||||
|
} |
||||||
|
if (outputDirectory !== existingParentDirectory) { |
||||||
|
await fs.mkdir(outputDirectory, { recursive: true }); |
||||||
|
} |
||||||
|
await fs.writeFile(out, JSON.stringify(results, null, 2)); |
||||||
|
} else { |
||||||
|
console.log(JSON.stringify(results, null, 2)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
main().catch((error) => { |
||||||
|
exitWithError(error); |
||||||
|
}); |
Loading…
Reference in new issue