@sdc-monitor/demo
Version:
<div align="center"> <a href="#" target="_blank"> <img src="https://i.loli.net/2021/07/28/EvPwd4NjVH3tBfO.jpg" alt="mito-logo" height="90"> </a> <p>A Lightweight SDK For Monitor Web</p>
354 lines (275 loc) • 12.1 kB
text/typescript
import MiniProgram from 'miniprogram-automator/out/MiniProgram'
import Page from 'miniprogram-automator/out/Page'
import automator from 'miniprogram-automator'
import { resolve } from 'path'
import {
WxPerformanceData,
WxPerformanceDataType,
WxPerformanceItemType,
WxPerformanceItem
} from '../../../packages/wx-mini-performance/src/types'
const APPID = 'a1329cc0-563b-11eb-98fe-259847d73cdd'
const WIFI = ['wifi', '2g', '3g', '4g', '5g', 'unknown', 'none']
const TEMP_FILE = 'http://tmp/2rPKfFSlT4jcf43b31be29a47fecd8890b363180b043.jpg'
describe('Min e2e:', () => {
const timeout = 60000 // 打开开发工具较慢
const waitFor = 1000
let _miniProgram: MiniProgram
let _page: Page
async function getData(): Promise<WxPerformanceData[][]> {
return await _miniProgram.evaluate(() => {
return wx['__MITO_MINI_PERFORMANCE__'].data as WxPerformanceData[][]
})
}
async function reset() {
return await _miniProgram.evaluate(() => {
wx['__MITO_MINI_PERFORMANCE__'].data = []
return
})
}
/**
* 请确保本地安装了开发工具并打开了安全端口
* 如何打开端口
* 微信开发工具设置 -> 安全设置 -> 安全 -> 打开服务端口
*/
beforeAll(async () => {
try {
const miniProgram: MiniProgram = await automator.launch({
projectPath: resolve(__dirname, '../../../examples/MiniPerformance')
})
_miniProgram = miniProgram
const page: Page = await miniProgram.currentPage()
_page = page
} catch (err) {
console.warn('err = ', err)
}
}, timeout)
it(
'The Performance Data in Wx_Launch include Wx_Lifestyle, WX_PERFORMANCE and WxCustomPaint',
async (done) => {
await _page.waitFor(waitFor)
await _page.waitFor(async () => {
return (await getData()).length > 0
})
// Wx_Lifestyle
const data: WxPerformanceData[][] = await getData()
const launchData = data[0][0]
expect(launchData).toHaveProperty('timestamp')
expect(launchData).toHaveProperty('uuid')
expect(launchData).toHaveProperty('systemInfo')
expect(launchData).toHaveProperty('deviceId')
expect(launchData).toHaveProperty('item')
expect(launchData).toHaveProperty('page')
expect(launchData).toHaveProperty('wxLaunch')
expect(launchData.appId).toBe(APPID)
expect(launchData.type).toBe(WxPerformanceDataType.WX_LIFE_STYLE)
expect(WIFI.some((x) => x === launchData.networkType)).toBeTruthy()
const launchItem = launchData.item
expect(Array.isArray(launchItem)).toBeTruthy()
expect(launchItem[0]).toHaveProperty('timestamp')
expect((launchItem[0] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.AppOnLaunch)
const wxShowData = data[1][0]
expect(wxShowData.type).toBe(WxPerformanceDataType.WX_LIFE_STYLE)
const wxShowItem = wxShowData.item
expect((wxShowItem[0] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.AppOnShow)
const wxLoadData = data[2][0]
expect(wxLoadData.type).toBe(WxPerformanceDataType.WX_LIFE_STYLE)
const wxLoadItem = wxLoadData.item
expect((wxLoadItem[0] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.PageOnLoad)
const wxReadyData = data[3][0]
expect(wxReadyData.type).toBe(WxPerformanceDataType.WX_LIFE_STYLE)
const wxReadyItem = wxReadyData.item
expect((wxReadyItem[0] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.PageOnReady)
// WX_PERFORMANCE
const performanceData = data[4][0]
expect(performanceData.type).toBe(WxPerformanceDataType.WX_PERFORMANCE)
const performanceItem = performanceData.item
expect(Array.isArray(performanceItem)).toBeTruthy()
expect(performanceItem.length).toBe(3)
expect((performanceItem[0] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.Performance)
expect((performanceItem[1] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.Performance)
expect((performanceItem[2] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.Performance)
// WxCustomPaint
const wxCustomPaintData = data[5][0]
expect(wxCustomPaintData.type).toBe(WxPerformanceDataType.WX_LIFE_STYLE)
const wxCustomPaintItem = wxCustomPaintData.item
expect((wxCustomPaintItem[0] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.WxCustomPaint)
expect(wxCustomPaintItem[0] as WxPerformanceItem).toHaveProperty('duration')
expect(wxCustomPaintItem[0] as WxPerformanceItem).toHaveProperty('navigationStart')
expect(wxCustomPaintItem[0] as WxPerformanceItem).toHaveProperty('timestamp')
done()
},
timeout
)
it(
'The Performance Data on Click',
async (done) => {
await reset()
const element = await _page.$('#click-btn')
await element.tap()
await _page.waitFor(async () => {
return (await getData()).length > 0
})
const data: WxPerformanceData[][] = await getData()
const clickData = data[0][0]
expect(clickData).toHaveProperty('timestamp')
expect(clickData).toHaveProperty('uuid')
expect(clickData).toHaveProperty('systemInfo')
expect(clickData).toHaveProperty('deviceId')
expect(clickData).toHaveProperty('item')
expect(clickData).toHaveProperty('page')
expect(clickData).toHaveProperty('wxLaunch')
expect(clickData.appId).toBe(APPID)
// expect(clickData.page).toBe('pages/index/index?')
expect(clickData.type).toBe(WxPerformanceDataType.WX_USER_ACTION)
expect(WIFI.some((x) => x === clickData.networkType)).toBeTruthy()
const clickItem = clickData.item
expect(Array.isArray(clickItem)).toBeTruthy()
expect(clickItem[0]).toHaveProperty('timestamp')
expect((clickItem[0] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.UserTap)
done()
},
timeout
)
it(
'The Performance Data on Request',
async (done) => {
await reset()
const element = await _page.$('#click-request-btn')
await element.tap()
await _page.waitFor(async () => {
return (await getData()).length > 0
})
const data: WxPerformanceData[][] = await getData()
const requestData = data[0][0]
expect(requestData).toHaveProperty('timestamp')
expect(requestData).toHaveProperty('uuid')
expect(requestData).toHaveProperty('systemInfo')
expect(requestData).toHaveProperty('deviceId')
expect(requestData).toHaveProperty('item')
expect(requestData).toHaveProperty('page')
expect(requestData).toHaveProperty('wxLaunch')
expect(requestData.appId).toBe(APPID)
expect(requestData.page).toBe('pages/index/index?')
expect(requestData.type).toBe(WxPerformanceDataType.WX_NETWORK)
expect(WIFI.some((x) => x === requestData.networkType)).toBeTruthy()
const requestItem = requestData.item
expect(Array.isArray(requestItem)).toBeTruthy()
expect(requestItem[0]).toHaveProperty('startTime')
expect(requestItem[0]).toHaveProperty('endTime')
expect(requestItem[0]).toHaveProperty('url')
expect(requestItem[0]).toHaveProperty('status')
expect(requestItem[0]).toHaveProperty('header')
expect(requestItem[0]).toHaveProperty('errMsg')
expect((requestItem[0] as WxPerformanceItem).method).toBe('GET')
done()
},
timeout
)
it(
'The Performance Data on Download File',
async (done) => {
await reset()
const element = await _page.$('#click-down-file-btn')
await element.tap()
await _page.waitFor(async () => {
return (await getData()).length > 0
})
const data: WxPerformanceData[][] = await getData()
const downFileData = data[0][0]
expect(downFileData).toHaveProperty('timestamp')
expect(downFileData).toHaveProperty('uuid')
expect(downFileData).toHaveProperty('systemInfo')
expect(downFileData).toHaveProperty('deviceId')
expect(downFileData).toHaveProperty('item')
expect(downFileData).toHaveProperty('page')
expect(downFileData).toHaveProperty('wxLaunch')
expect(downFileData.appId).toBe(APPID)
expect(downFileData.page).toBe('pages/index/index?')
expect(downFileData.type).toBe(WxPerformanceDataType.WX_NETWORK)
expect(WIFI.some((x) => x === downFileData.networkType)).toBeTruthy()
const downFileItem = downFileData.item
expect(Array.isArray(downFileItem)).toBeTruthy()
expect(downFileItem[0]).toHaveProperty('startTime')
expect(downFileItem[0]).toHaveProperty('endTime')
expect(downFileItem[0]).toHaveProperty('url')
expect(downFileItem[0]).toHaveProperty('header')
expect(downFileItem[0]).toHaveProperty('errMsg')
// expect((downFileItem[0] as WxPerformanceItem).method).toBe('GET')
expect((downFileItem[0] as WxPerformanceItem).status).toBe(200)
done()
},
timeout
)
it(
'The Performance Data on Upload File',
async (done) => {
await reset()
await _miniProgram.mockWxMethod('chooseImage', {
tempFilePaths: [TEMP_FILE]
})
const element = await _page.$('#click-up-file-btn')
await element.tap()
await _page.waitFor(async () => {
return (await getData()).length > 0
})
const data: WxPerformanceData[][] = await getData()
const upFileData = data[0][0]
expect(upFileData).toHaveProperty('timestamp')
expect(upFileData).toHaveProperty('uuid')
expect(upFileData).toHaveProperty('systemInfo')
expect(upFileData).toHaveProperty('deviceId')
expect(upFileData).toHaveProperty('item')
expect(upFileData).toHaveProperty('page')
expect(upFileData).toHaveProperty('wxLaunch')
expect(upFileData.appId).toBe(APPID)
expect(upFileData.page).toBe('pages/index/index?')
expect(upFileData.type).toBe(WxPerformanceDataType.WX_NETWORK)
expect(WIFI.some((x) => x === upFileData.networkType)).toBeTruthy()
const upFileItem = upFileData.item
expect(Array.isArray(upFileItem)).toBeTruthy()
expect(upFileItem[0]).toHaveProperty('startTime')
expect(upFileItem[0]).toHaveProperty('endTime')
expect(upFileItem[0]).toHaveProperty('header')
expect(upFileItem[0]).toHaveProperty('errMsg')
expect(upFileItem[0]).toHaveProperty('filePath')
expect((upFileItem[0] as WxPerformanceItem).status).toBe(0)
expect((upFileItem[0] as WxPerformanceItem).filePath).toBe(TEMP_FILE)
done()
},
timeout
)
it(
'The Performance Data on Navigate',
async (done) => {
await reset()
const element = await _page.$('#navigate-btn')
await element.tap()
await _page.waitFor(async () => {
return (await getData()).length > 0
})
await _page.waitFor(waitFor)
const data: WxPerformanceData[][] = await getData()
// Wx_Lifestyle
const wxLoadData = data[0][0]
expect(wxLoadData.type).toBe(WxPerformanceDataType.WX_LIFE_STYLE)
const wxLoadItem = wxLoadData.item
expect((wxLoadItem[0] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.PageOnLoad)
const wxReadyData = data[1][0]
expect(wxReadyData.type).toBe(WxPerformanceDataType.WX_LIFE_STYLE)
const wxReadyItem = wxReadyData.item
expect((wxReadyItem[0] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.PageOnReady)
// WX_PERFORMANCE
const performanceData = data[2][0]
expect(performanceData.type).toBe(WxPerformanceDataType.WX_PERFORMANCE)
expect(performanceData.page).toBe('pages/test/test?')
const performanceItem = performanceData.item
expect(Array.isArray(performanceItem)).toBeTruthy()
expect(performanceItem.length).toBe(2)
expect((performanceItem[0] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.Performance)
expect((performanceItem[1] as WxPerformanceItem).itemType).toBe(WxPerformanceItemType.Performance)
done()
},
timeout
)
})