利用現代瀏覽器所提供的強大 API 錄製,回放並保存任意 web 界面中的用戶操做

在開發測試階段做爲開發人員你永遠不知道你的測試和產品有什麼沙雕操做,他們只會說xxx頁面/功能有bug。想要復現也很難。前段時間正好看到了rrweb這個項目,索性基於它實現了定時間隔錄製、主動上報、存入數據庫、統一查看等功能,能夠再項目開發時引入,不再怕bug復現了。javascript

走過路過先來波start

項目地址css

示例
示例

利用現代瀏覽器的強大功能還原操做並儲存 V1.0.0

實測在windows下安裝最新的MySQL8.0會報錯,重置密碼也不行,緣由不明,解決辦法是安裝MySQL 5.7.25MAC OS下安裝最新版沒有問題。html

✨ 特性

  • 錄製並回聽任意 web 界面中的用戶操做 前端封裝+後端。
  • 開箱即用。
  • 支持跨域。

🖥 支持環境

  • Linux,MacOS,Windows
  • 現代瀏覽器和 IE11及以上。
  • Electron

💽 後端架構

  1. 基於NodeJS
  2. 數據庫使用MySQL
  3. 服務框架使用express4

💻 前端架構

  1. 錄製基於rrweb
  2. http請求默認依賴axios可配置爲jQuery以及任何與jQuery結構相同的庫
  3. 回放頁面前端框架使用VUE
  4. UI框架使用Element
  5. 回放基於rrewb-player

📦 安裝

  1. 安裝MySQL並配置./server/mysql.config裏的端口號及用戶密碼。前端

  2. 導入提供的./test.sql文件,每一個項目能夠建一個表。vue

  3. 安裝NodeJSjava

  4. 進入項目目錄。node

  5. 安裝依賴:mysql

    npm i #國內使用cnpm
    複製代碼
  6. 啓動項目:jquery

    node server
    複製代碼

operationRecord.js參數

const record=new Record({
    url: '/operationRecord/add',//後臺服務器url,如未修改服務器文件,應爲:服務端ip+/operationRecord/add
    name: '不知名的測試人員',//提交人,會顯示在統計頁面。默認:unknow
    projectName: 'test',//須要鏈接的表名
    ajaxFn:$,//ajax 提交函數,默認依賴axios,若是項目中使用的是jquery直接寫$,能夠使用人和和jquery結構一致的ajax庫
    msg:'你這東西有bug啊',//提交bug信息,最多255
    isReport:'1',//是否定爲上報,1:是,0:否。默認:0
    interval:'2000',//提交間隔,默認10秒,單位ms
    success: function (res) {
        console.log(`成功的回調${res}`);
    },
    error: function (err) {
        console.log(`失敗的回調${err}`);
    }
});
//方法
record.destroy(); //銷燬
console.log(record) //查看屬性
複製代碼

🔨 示例

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>test</title>
    </head>

    <body>
        <h1>test</h1>
        <input type="text">
        <button>測試</button>
        <button>回放</button>
        <script src="./js/axios.min.js"></script>
        <script src="./js/operationRecord.js"></script>
        <script> let a = new Record({ url: 'ip地址+/operationRecord/add', name: 'liu', projectName: 'testProject', msg:'測試信息', interval:20000, success: function (res) { console.log(res); } }); </script>
    </body>

</html>
複製代碼

打開http://localhost:9527/查看結果ios

📖 目錄結構

├── .git								
├── .gitignore
├── README.md
├── datas								// 錄製數據儲存目錄
├── node_modules
├── package.json
├── public								// 靜態文件目錄
├── ├── .DS_Store
├── ├── css								// css文件
├── ├── ├── element.min.css
├── ├── ├── fonts						// 字體文件
├── ├── ├── ├── element-icons.ttf
├── ├── ├── ├── element-icons.woff
├── ├── ├── player.min.css
├── ├── ├── reset.min.css
├── ├── ├── style.css					// 自定義樣式
├── ├── index.html
├── ├── js								// js文件
├── ├── ├── axios.min.js
├── ├── ├── element.min.js
├── ├── ├── operationRecord.js
├── ├── ├── player.min.js
├── ├── ├── replay.js
├── ├── ├── vue.js
├── ├── replayer.html
├── readme.js
├── server								// 服務器文件
├── ├── local-zh.config					// 表名中英文對應
├── ├── mysql.config					// mysql配置文件
├── ├── mysql.js						// mysql操做
├── server.js							// server
複製代碼

📄 TODO

  1. 自動引入rrweb以及rrweb-player最新版。
  2. rrweb與本項目代碼分離,使用時自動打包壓縮。
  3. 更換MySQL爲其餘輕量級數據庫。(本項目對數據庫要求不高,mysql比較成熟,遷移至MongoDB成本太高)
  4. 添加已讀功能。
  5. 完善數據傳輸部分。
  6. 解耦。

✔ 支持環境

現代瀏覽器及 IE11。

IE / Edge
IE / Edge
Firefox
Firefox
Chrome
Chrome
Safari
Safari
Opera
Opera
IE11, Edge 14及以上 18及以上 6及以上 15及以上

🤝 參與共建
PRs Welcome

提交pr

提交issue

相關文章
相關標籤/搜索