[Lens][TSVB] Navigate to lens functional tests speed improvement. (#144043)

* Gauge functional tests fixed and speeded up.

* Metric functional tests fixed.

* Fixed timeseries tests.

* Fixed tests of topN.

* Added small fixes for dashboard.

* Fixed all tests.

* Splitted up open_in_lens functional tests.

* Fixed more tests.

* Fixed heatmap.

* Added more fixes for tests performance.

* Fixed mistake.

* Removed timeouts.

* Fixed createColorRule.

* Fixed getRhythmChartLegendValue.
This commit is contained in:
Yaroslav Kuznietsov 2022-10-28 19:28:25 +03:00 committed by GitHub
parent c5b1afdec1
commit 608a67ad45
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 192 additions and 124 deletions

View file

@ -177,7 +177,8 @@ enabled:
- x-pack/test/functional/apps/lens/group1/config.ts
- x-pack/test/functional/apps/lens/group2/config.ts
- x-pack/test/functional/apps/lens/group3/config.ts
- x-pack/test/functional/apps/lens/open_in_lens/config.ts
- x-pack/test/functional/apps/lens/open_in_lens/tsvb/config.ts
- x-pack/test/functional/apps/lens/open_in_lens/agg_based/config.ts
- x-pack/test/functional/apps/license_management/config.ts
- x-pack/test/functional/apps/logstash/config.ts
- x-pack/test/functional/apps/management/config.ts

View file

@ -8,7 +8,7 @@
import { FtrConfigProviderContext } from '@kbn/test';
export default async function ({ readConfigFile }: FtrConfigProviderContext) {
const functionalConfig = await readConfigFile(require.resolve('../../../config.base.js'));
const functionalConfig = await readConfigFile(require.resolve('../../../../config.base.js'));
return {
...functionalConfig.getAll(),

View file

@ -120,7 +120,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
expect(textContent).to.contain('Maximum:15000000000');
expect(textContent).to.contain('Value:13104036080.615');
dimensions[0].click();
await dimensions[0].click();
await lens.openPalettePanel('lnsGauge');
const colorStops = await lens.getPaletteColorStops();

View file

@ -40,8 +40,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
it('should convert to Lens', async () => {
await visualize.navigateToLensFromAnotherVisulization();
await lens.waitForVisualization('mtrVis');
expect((await lens.getMetricVisualizationData()).length).to.be.equal(1);
expect(await lens.getMetricVisualizationData()).to.eql([
const data = await lens.getMetricVisualizationData();
expect(data.length).to.be.equal(1);
expect(data).to.eql([
{
title: 'Count',
subtitle: undefined,
@ -70,8 +71,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram');
expect(await dimensions[1].getVisibleText()).to.be('Static value: 1');
expect((await lens.getMetricVisualizationData()).length).to.be.equal(1);
expect(await lens.getMetricVisualizationData()).to.eql([
const data = await lens.getMetricVisualizationData();
expect(data.length).to.be.equal(1);
expect(data).to.eql([
{
title: 'Average machine.ram',
subtitle: undefined,
@ -100,8 +102,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
expect(await dimensions[1].getVisibleText()).to.be('Static value: 1');
expect(await dimensions[2].getVisibleText()).to.be('@timestamp');
expect((await lens.getMetricVisualizationData()).length).to.be.equal(1);
expect(await lens.getMetricVisualizationData()).to.eql([
const data = await lens.getMetricVisualizationData();
expect(data.length).to.be.equal(1);
expect(data).to.eql([
{
title: 'Overall Max of Count',
subtitle: undefined,
@ -142,8 +145,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
expect(await dimensions[1].getVisibleText()).to.be('Static value: 1');
expect(await dimensions[2].getVisibleText()).to.be('machine.os.raw: Descending');
expect((await lens.getMetricVisualizationData()).length).to.be.equal(6);
expect(await lens.getMetricVisualizationData()).to.eql([
const data = await lens.getMetricVisualizationData();
expect(data.length).to.be.equal(6);
expect(data).to.eql([
{
title: 'ios',
subtitle: 'Average machine.ram',
@ -200,7 +204,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
},
]);
dimensions[0].click();
await dimensions[0].click();
await lens.openPalettePanel('lnsMetric');
const colorStops = await lens.getPaletteColorStops();

View file

@ -5,10 +5,70 @@
* 2.0.
*/
import { EsArchiver } from '@kbn/es-archiver';
import { FtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: FtrProviderContext) {
describe('Agg based Vis to Lens', function () {
export default function ({ loadTestFile, getService, getPageObjects }: FtrProviderContext) {
const browser = getService('browser');
const log = getService('log');
const esArchiver = getService('esArchiver');
const kibanaServer = getService('kibanaServer');
const PageObjects = getPageObjects(['timePicker']);
const config = getService('config');
let remoteEsArchiver;
describe('lens app - Agg based Vis Open in Lens', () => {
const esArchive = 'x-pack/test/functional/es_archives/logstash_functional';
const localIndexPatternString = 'logstash-*';
const remoteIndexPatternString = 'ftr-remote:logstash-*';
const localFixtures = {
lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json',
lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/default',
};
const remoteFixtures = {
lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/lens_basic.json',
lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/default',
};
let esNode: EsArchiver;
let fixtureDirs: {
lensBasic: string;
lensDefault: string;
};
let indexPatternString: string;
before(async () => {
log.debug('Starting lens before method');
await browser.setWindowSize(1280, 1200);
try {
config.get('esTestCluster.ccs');
remoteEsArchiver = getService('remoteEsArchiver' as 'esArchiver');
esNode = remoteEsArchiver;
fixtureDirs = remoteFixtures;
indexPatternString = remoteIndexPatternString;
} catch (error) {
esNode = esArchiver;
fixtureDirs = localFixtures;
indexPatternString = localIndexPatternString;
}
await esNode.load(esArchive);
// changing the timepicker default here saves us from having to set it in Discover (~8s)
await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings();
await kibanaServer.uiSettings.update({
defaultIndex: indexPatternString,
'dateFormat:tz': 'UTC',
});
await kibanaServer.importExport.load(fixtureDirs.lensBasic);
await kibanaServer.importExport.load(fixtureDirs.lensDefault);
});
after(async () => {
await esArchiver.unload(esArchive);
await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings();
await kibanaServer.importExport.unload(fixtureDirs.lensBasic);
await kibanaServer.importExport.unload(fixtureDirs.lensDefault);
});
loadTestFile(require.resolve('./pie'));
loadTestFile(require.resolve('./metric'));
loadTestFile(require.resolve('./xy'));

View file

@ -41,8 +41,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
it('should convert to Lens', async () => {
await visualize.navigateToLensFromAnotherVisulization();
await lens.waitForVisualization('mtrVis');
expect((await lens.getMetricVisualizationData()).length).to.be.equal(1);
expect(await lens.getMetricVisualizationData()).to.eql([
const data = await lens.getMetricVisualizationData();
expect(data.length).to.be.equal(1);
expect(data).to.eql([
{
title: 'Count',
subtitle: undefined,
@ -70,8 +71,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
expect(dimensions).to.have.length(1);
expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram');
expect((await lens.getMetricVisualizationData()).length).to.be.equal(1);
expect(await lens.getMetricVisualizationData()).to.eql([
const data = await lens.getMetricVisualizationData();
expect(data.length).to.be.equal(1);
expect(data).to.eql([
{
title: 'Average machine.ram',
subtitle: undefined,
@ -99,8 +101,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
expect(await dimensions[0].getVisibleText()).to.be('Overall Max of Count');
expect(await dimensions[1].getVisibleText()).to.be('@timestamp');
expect((await lens.getMetricVisualizationData()).length).to.be.equal(1);
expect(await lens.getMetricVisualizationData()).to.eql([
const data = await lens.getMetricVisualizationData();
expect(data.length).to.be.equal(1);
expect(data).to.eql([
{
title: 'Overall Max of Count',
subtitle: undefined,
@ -152,9 +155,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
expect(dimensions).to.have.length(2);
expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram');
expect(await dimensions[1].getVisibleText()).to.be('machine.os.raw: Descending');
expect((await lens.getMetricVisualizationData()).length).to.be.equal(6);
expect(await lens.getMetricVisualizationData()).to.eql([
const data = await lens.getMetricVisualizationData();
expect(data.length).to.be.equal(6);
expect(data).to.eql([
{
title: 'osx',
subtitle: 'Average machine.ram',
@ -211,7 +214,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
},
]);
dimensions[0].click();
await dimensions[0].click();
await lens.openPalettePanel('lnsMetric');
const colorStops = await lens.getPaletteColorStops();

View file

@ -127,7 +127,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
expect(type).to.be('Donut');
const goBackBtn = await testSubjects.find('lnsApp_goBackToAppButton');
goBackBtn.click();
await goBackBtn.click();
await visEditor.clickOptionsTab();
const isDonutButton = await testSubjects.find('visTypePieIsDonut');

View file

@ -1,75 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { EsArchiver } from '@kbn/es-archiver';
import { FtrProviderContext } from '../../../ftr_provider_context';
export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext) => {
const browser = getService('browser');
const log = getService('log');
const esArchiver = getService('esArchiver');
const kibanaServer = getService('kibanaServer');
const PageObjects = getPageObjects(['timePicker']);
const config = getService('config');
let remoteEsArchiver;
describe('lens app - Open in Lens', () => {
const esArchive = 'x-pack/test/functional/es_archives/logstash_functional';
const localIndexPatternString = 'logstash-*';
const remoteIndexPatternString = 'ftr-remote:logstash-*';
const localFixtures = {
lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json',
lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/default',
};
const remoteFixtures = {
lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/lens_basic.json',
lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/default',
};
let esNode: EsArchiver;
let fixtureDirs: {
lensBasic: string;
lensDefault: string;
};
let indexPatternString: string;
before(async () => {
log.debug('Starting lens before method');
await browser.setWindowSize(1280, 1200);
try {
config.get('esTestCluster.ccs');
remoteEsArchiver = getService('remoteEsArchiver' as 'esArchiver');
esNode = remoteEsArchiver;
fixtureDirs = remoteFixtures;
indexPatternString = remoteIndexPatternString;
} catch (error) {
esNode = esArchiver;
fixtureDirs = localFixtures;
indexPatternString = localIndexPatternString;
}
await esNode.load(esArchive);
// changing the timepicker default here saves us from having to set it in Discover (~8s)
await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings();
await kibanaServer.uiSettings.update({
defaultIndex: indexPatternString,
'dateFormat:tz': 'UTC',
});
await kibanaServer.importExport.load(fixtureDirs.lensBasic);
await kibanaServer.importExport.load(fixtureDirs.lensDefault);
});
after(async () => {
await esArchiver.unload(esArchive);
await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings();
await kibanaServer.importExport.unload(fixtureDirs.lensBasic);
await kibanaServer.importExport.unload(fixtureDirs.lensDefault);
});
loadTestFile(require.resolve('./tsvb'));
loadTestFile(require.resolve('./agg_based'));
});
};

View file

@ -0,0 +1,17 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { FtrConfigProviderContext } from '@kbn/test';
export default async function ({ readConfigFile }: FtrConfigProviderContext) {
const functionalConfig = await readConfigFile(require.resolve('../../../../config.base.js'));
return {
...functionalConfig.getAll(),
testFiles: [require.resolve('.')],
};
}

View file

@ -26,9 +26,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
});
beforeEach(async () => {
await visualize.navigateToNewVisualization();
await visualize.clickVisualBuilder();
await visualBuilder.checkVisualBuilderIsPresent();
await visualBuilder.resetPage();
await visualBuilder.clickGauge();
await visualBuilder.clickDataTab('gauge');
@ -39,6 +36,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
});
it('should convert to Lens', async () => {
await header.waitUntilLoadingHasFinished();
await visualize.navigateToLensFromAnotherVisulization();
await lens.waitForVisualization('mtrVis');
@ -76,7 +75,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
it('should not allow converting of not valid panel', async () => {
await visualBuilder.selectAggType('Value Count');
await header.waitUntilLoadingHasFinished();
expect(await visualize.hasNavigateToLensButton()).to.be(false);
});
@ -96,6 +97,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await visualBuilder.setColorPickerValue('#54A000', 4);
await header.waitUntilLoadingHasFinished();
await visualize.navigateToLensFromAnotherVisulization();
await lens.waitForVisualization('mtrVis');
@ -111,7 +113,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
const dimensions = await testSubjects.findAll('lns-dimensionTrigger');
expect(dimensions).to.have.length(3);
dimensions[0].click();
await dimensions[0].click();
await lens.openPalettePanel('lnsMetric');
const colorStops = await lens.getPaletteColorStops();

View file

@ -5,10 +5,70 @@
* 2.0.
*/
import { EsArchiver } from '@kbn/es-archiver';
import { FtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: FtrProviderContext) {
describe('TSVB to Lens', function () {
export default function ({ loadTestFile, getService, getPageObjects }: FtrProviderContext) {
const browser = getService('browser');
const log = getService('log');
const esArchiver = getService('esArchiver');
const kibanaServer = getService('kibanaServer');
const PageObjects = getPageObjects(['timePicker']);
const config = getService('config');
let remoteEsArchiver;
describe('lens app - TSVB Open in Lens', () => {
const esArchive = 'x-pack/test/functional/es_archives/logstash_functional';
const localIndexPatternString = 'logstash-*';
const remoteIndexPatternString = 'ftr-remote:logstash-*';
const localFixtures = {
lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json',
lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/default',
};
const remoteFixtures = {
lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/lens_basic.json',
lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/default',
};
let esNode: EsArchiver;
let fixtureDirs: {
lensBasic: string;
lensDefault: string;
};
let indexPatternString: string;
before(async () => {
log.debug('Starting lens before method');
await browser.setWindowSize(1280, 1200);
try {
config.get('esTestCluster.ccs');
remoteEsArchiver = getService('remoteEsArchiver' as 'esArchiver');
esNode = remoteEsArchiver;
fixtureDirs = remoteFixtures;
indexPatternString = remoteIndexPatternString;
} catch (error) {
esNode = esArchiver;
fixtureDirs = localFixtures;
indexPatternString = localIndexPatternString;
}
await esNode.load(esArchive);
// changing the timepicker default here saves us from having to set it in Discover (~8s)
await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings();
await kibanaServer.uiSettings.update({
defaultIndex: indexPatternString,
'dateFormat:tz': 'UTC',
});
await kibanaServer.importExport.load(fixtureDirs.lensBasic);
await kibanaServer.importExport.load(fixtureDirs.lensDefault);
});
after(async () => {
await esArchiver.unload(esArchive);
await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings();
await kibanaServer.importExport.unload(fixtureDirs.lensBasic);
await kibanaServer.importExport.unload(fixtureDirs.lensDefault);
});
loadTestFile(require.resolve('./metric'));
loadTestFile(require.resolve('./gauge'));
loadTestFile(require.resolve('./timeseries'));

View file

@ -25,9 +25,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
});
beforeEach(async () => {
await visualize.navigateToNewVisualization();
await visualize.clickVisualBuilder();
await visualBuilder.checkVisualBuilderIsPresent();
await visualBuilder.resetPage();
await visualBuilder.clickMetric();
await visualBuilder.clickDataTab('metric');
@ -90,7 +87,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
it('should not allow converting of not valid panel', async () => {
await visualBuilder.selectAggType('Value Count');
await header.waitUntilLoadingHasFinished();
expect(await visualize.hasNavigateToLensButton()).to.be(false);
});
@ -101,6 +100,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await visualBuilder.setColorPickerValue('#54B399');
await header.waitUntilLoadingHasFinished();
await visualize.navigateToLensFromAnotherVisulization();
await lens.waitForVisualization('mtrVis');
@ -116,7 +116,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
const dimensions = await testSubjects.findAll('lns-dimensionTrigger');
expect(dimensions).to.have.length(1);
dimensions[0].click();
await dimensions[0].click();
await lens.openPalettePanel('lnsMetric');
const colorStops = await lens.getPaletteColorStops();

View file

@ -28,9 +28,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
});
beforeEach(async () => {
await visualize.navigateToNewVisualization();
await visualize.clickVisualBuilder();
await visualBuilder.checkVisualBuilderIsPresent();
await visualBuilder.resetPage();
});
@ -39,6 +36,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
});
it('visualizes field to Lens and loads fields to the dimesion editor', async () => {
await header.waitUntilLoadingHasFinished();
await visualize.navigateToLensFromAnotherVisulization();
await lens.waitForVisualization('xyVisChart');
await retry.try(async () => {
@ -50,11 +49,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
});
it('navigates back to TSVB when the Back button is clicked', async () => {
await header.waitUntilLoadingHasFinished();
await visualize.navigateToLensFromAnotherVisulization();
await lens.waitForVisualization('xyVisChart');
const goBackBtn = await testSubjects.find('lnsApp_goBackToAppButton');
goBackBtn.click();
await goBackBtn.click();
await visualBuilder.checkVisualBuilderIsPresent();
await retry.try(async () => {
const actualCount = await visualBuilder.getRhythmChartLegendValue();

View file

@ -27,9 +27,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
});
beforeEach(async () => {
await visualize.navigateToNewVisualization();
await visualize.clickVisualBuilder();
await visualBuilder.checkVisualBuilderIsPresent();
await visualBuilder.resetPage();
await visualBuilder.clickTopN();
await visualBuilder.checkTopNTabIsPresent();
@ -160,7 +157,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await visualize.navigateToLensFromAnotherVisulization();
await lens.waitForVisualization('xyVisChart');
const goBackBtn = await testSubjects.find('lnsApp_goBackToAppButton');
goBackBtn.click();
await goBackBtn.click();
await visualBuilder.checkTopNTabIsPresent();
});

View file

@ -1229,14 +1229,12 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont
const tiles = await this.getMetricTiles();
const showingBar = Boolean(await findService.existsByCssSelector('.echSingleMetricProgress'));
const metricData = [];
const metricDataPromises = [];
for (const tile of tiles) {
metricData.push({
...(await this.getMetricDatum(tile)),
showingBar,
});
metricDataPromises.push(this.getMetricDatum(tile));
}
return metricData;
const metricData = await Promise.all(metricDataPromises);
return metricData.map((d) => ({ ...d, showingBar }));
},
/**