Record tests as separate scenes

This commit is contained in:
Thomas Nordquist
2019-04-13 12:39:56 +02:00
parent d1f4bc678c
commit e6bcc00927
2 changed files with 111 additions and 53 deletions

24
src/spec/SceneBuilder.ts Normal file
View File

@@ -0,0 +1,24 @@
export interface Scene {
name: string,
start: number
stop: number
duration: number
}
export class SceneBuilder {
public scenes: Array<Scene> = []
public offset = Date.now()
public async record(name: string, callback: () => Promise<any>): Promise<any> {
const start = Date.now() - this.offset
await callback()
const stop = Date.now() - this.offset
this.scenes.push({
name,
start,
stop,
duration: stop - start,
})
}
}

View File

@@ -1,6 +1,6 @@
import * as os from 'os' import * as os from 'os'
import * as webdriverio from 'webdriverio' import * as webdriverio from 'webdriverio'
import mockMqtt, { stop } from './mock-mqtt' import mockMqtt, { stop as stopMqtt } from './mock-mqtt'
import { clearOldTopics } from './scenarios/clearOldTopics' import { clearOldTopics } from './scenarios/clearOldTopics'
import { clearSearch, searchTree } from './scenarios/searchTree' import { clearSearch, searchTree } from './scenarios/searchTree'
import { connectTo } from './scenarios/connect' import { connectTo } from './scenarios/connect'
@@ -15,6 +15,9 @@ import { showNumericPlot } from './scenarios/showNumericPlot'
import { showOffDiffCapability } from './scenarios/showOffDiffCapability' import { showOffDiffCapability } from './scenarios/showOffDiffCapability'
import { showZoomLevel } from './scenarios/showZoomLevel' import { showZoomLevel } from './scenarios/showZoomLevel'
import { showAdvancedConnectionSettings } from './scenarios/showAdvancedConnectionSettings' import { showAdvancedConnectionSettings } from './scenarios/showAdvancedConnectionSettings'
import { SceneBuilder } from './SceneBuilder'
import * as fs from 'fs'
import { import {
clickOnHistory, clickOnHistory,
createFakeMousePointer, createFakeMousePointer,
@@ -45,80 +48,111 @@ const options = {
} }
async function doStuff() { async function doStuff() {
console.log('mock mqtt') console.log('Waiting for MQTT Broker on port 1880 (no auth)')
await mockMqtt() await mockMqtt()
console.log('start webdriver') console.log('start webdriver')
const browser = await webdriverio.remote(options) const browser = await webdriverio.remote(options)
await createFakeMousePointer(browser) await createFakeMousePointer(browser)
await connectTo('127.0.0.1', browser) // Wait for Username input to be visible
await browser.$(`//label[contains(text(), "Username")]/..//input`)
const scenes = new SceneBuilder()
await sleep(1000) await scenes.record('connect', async () => {
await connectTo('127.0.0.1', browser)
await sleep(2000)
})
await sleep(1000) await scenes.record('topic_updates', async () => {
await showText('Topic overview', 2000, browser, 'top') await showText('Topic overview', 2000, browser, 'top')
await sleep(2000) await sleep(2000)
await showText('Indicate topic updates', 2000, browser, 'bottom') await showText('Indicate topic updates', 2000, browser, 'bottom')
await sleep(3000) await sleep(3000)
})
await showText('Plot topic history', 2000, browser) await scenes.record('numeric_plots', async () => {
await showNumericPlot(browser) await showText('Plot topic history', 2000, browser)
await sleep(2000) await showNumericPlot(browser)
await sleep(2000)
})
await showJsonPreview(browser) await scenes.record('json-formatting', async () => {
await showText('Formatted messages', 1500, browser, 'top') await showJsonPreview(browser)
await sleep(1500) await showText('Formatted messages', 1500, browser, 'top')
await sleep(1500)
})
await showOffDiffCapability(browser) await scenes.record('diffs', async () => {
await hideText(browser) await showOffDiffCapability(browser)
await hideText(browser)
})
await showText('Publish topics', 2000, browser, 'top') await scenes.record('publish_topic', async () => {
await clickOnHistory(browser) await showText('Publish topics', 2000, browser, 'top')
await publishTopic(browser) await clickOnHistory(browser)
await sleep(1000) await publishTopic(browser)
await sleep(1000)
})
await showText('Write JSON with ease', 2000, browser, 'top') await scenes.record('json_formatting_publish', async () => {
await showJsonFormatting(browser) await showText('Write JSON with ease', 2000, browser, 'top')
await sleep(1000) await showJsonFormatting(browser)
await sleep(1000)
})
await showText('Copy to Clipboard', 2000, browser) await scenes.record('clipboard', async () => {
await copyTopicToClipboard(browser) await showText('Copy to Clipboard', 2000, browser)
await hideText(browser) await copyTopicToClipboard(browser)
await copyValueToClipboard(browser) await hideText(browser)
await sleep(1000) await copyValueToClipboard(browser)
await sleep(1000)
})
await showText('Search topic hierarchy', 0, browser, 'middle') await scenes.record('topic_filter', async () => {
await searchTree('temp', browser) await showText('Search topic hierarchy', 0, browser, 'middle')
await hideText(browser) await searchTree('temp', browser)
await showText('Topics containing "temp"', 1500, browser) await hideText(browser)
await sleep(1500) await showText('Topics containing "temp"', 1500, browser)
await clearSearch(browser) await sleep(1500)
await sleep(1000) await clearSearch(browser)
await sleep(1000)
})
await hideText(browser) await scenes.record('delete_retained_topics', async () => {
await showText('Delete retained topics', 0, browser) await hideText(browser)
await clearOldTopics(browser) await showText('Delete retained topics', 0, browser)
await hideText(browser) await clearOldTopics(browser)
await hideText(browser)
})
await showText('Display Options', 2000, browser) await scenes.record('settings', async () => {
await showMenu(browser) await showText('Display Options', 2000, browser)
await showMenu(browser)
})
await sleep(2000) await scenes.record('customize_subscriptions', async () => {
await disconnect(browser) await sleep(2000)
await disconnect(browser)
await showText('Customize Subscriptions', 3000, browser, 'top')
await showAdvancedConnectionSettings(browser)
})
await showText('Customize Subscriptions', 3000, browser, 'top') await scenes.record('keyboard_shortcuts', async () => {
await showAdvancedConnectionSettings(browser) await showText('Keyboard shortcuts', 1750, browser, 'middle')
await sleep(1750)
await showZoomLevel(browser)
})
await showText('Keyboard shortcuts', 1750, browser, 'middle') await scenes.record('end', async () => {
await sleep(1750) await showText('The End', 3000, browser, 'middle')
await showZoomLevel(browser) await sleep(3000)
})
await showText('The End', 3000, browser, 'middle')
await sleep(3000)
browser.closeWindow() browser.closeWindow()
stop() stopMqtt()
fs.writeFileSync('scenes.json', JSON.stringify(scenes.scenes, undefined, ' '))
} }
doStuff() doStuff()