日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WEB端Monkey测试gremlins.js

發(fā)布時間:2024/1/1 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WEB端Monkey测试gremlins.js 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?一直想做web端UI自動化測試,網(wǎng)上查閱了 大量的資料,發(fā)現(xiàn)有一個線程的monkey測試工具,地址:https://github.com/marmelab/gremlins.js。但是我對js不是很精通,網(wǎng)上的資料不全,怎么辦?只好一步一步學(xué)起來。

背景

測試或開發(fā)web程序時,總會漏掉一些特殊用戶交互場景,往往是這些漏掉的場景會出現(xiàn)問題,我們?nèi)绻幌朕k法去發(fā)現(xiàn)這些特殊交互的漏洞并修復(fù),那么這些問題早晚會暴露在線上。但如果有這樣一個工具,可以隨機(jī)模擬用戶操作發(fā)現(xiàn)一些web交互的bug,那么我們應(yīng)該盡可能在用戶使用前發(fā)現(xiàn),避免影響用戶體驗(yàn)。gremlins.js的出現(xiàn)就是為了解決這個問題。

gremlins 可以隨機(jī)單擊窗口中的任意位置,在表單中輸入隨機(jī)數(shù)據(jù),或者將鼠標(biāo)移到隨機(jī)元素上。目地:觸發(fā) JavaScript 錯誤,或使應(yīng)用程序失敗。如果 gremlins 發(fā)現(xiàn)不了程序問題,說明web應(yīng)用足夠健壯,那正是我們所期望的。gremlins.js行為我們稱之為:monkey測試。

安裝

這個模塊是通過依賴node的npm分發(fā)的,需要作為你項(xiàng)目的依賴去安裝,安裝命令:

npm i gremlins.js

?gremlins.js也可以當(dāng)一個小書簽使用,訪問頁面,復(fù)制頁面代碼,在瀏覽器console中回車執(zhí)行,即可發(fā)起monkey

基本用法

gremlins專門對你的應(yīng)用程序發(fā)起攻擊的一個小程序,執(zhí)行下面的方法對你的web程序施壓

const horde = gremlins.createHorde(); horde.unleash(); // gremlins將每隔10ms啟動一次,執(zhí)行1000次

gremlins.js 提供了幾種 gremlin 類:一些在頁面上到處點(diǎn)擊,一些在表單輸入中輸入數(shù)據(jù),另一些在每個可能的方向滾動窗口,等等。

在屏幕上(它們留下紅色痕跡)和控制臺日志中能看到他的操作痕跡,如:

gremlin formFiller input 5 in <input type=?"number" name=?"age">? gremlin formFiller input pzdoyzshh0k9@o8cpskdb73nmi.r7r in <input type=?"email" name=?"email">? gremlin clicker click at 1219 301 gremlin scroller scroll to 100 25 ...

集群還包含 mogwais不會對被測系統(tǒng)產(chǎn)生壓力。?Mogwais 只監(jiān)視應(yīng)用程序的活動并將其記錄在記錄器上。 例如,“fps” mogwai平均每500ms都會監(jiān)控web頁面每秒的幀數(shù):?

mogwai fps 33.21 mogwai fps 59.45 mogwai fps 12.67 ...

gremlins.js壓崩被測系統(tǒng)時mogwais也會發(fā)送報告。比如,每秒少于10幀,那?“fps” mogwai就會拋錯誤信息。

mogwai fps 12.67 mogwai fps 23.56 err > mogwai fps 7.54 < err mogwai fps 15.76 ...

報錯超過10次之后,?Gizmo服務(wù)就會終止測試,因?yàn)槿绻麍箦e超過10次,我們就知道怎么重現(xiàn)問題。但如果Gizmo沒終止測試,默認(rèn)的horde就會在1分鐘后自動停止。我需要增加gremlins操作數(shù)要去延長測試時間,增加的代碼:

const horde = gremlins.createHorde({strategies: [gremlins.strategies.allTogether({ nb: 10000 })], }); horde.unleash(); // gremlins將每隔10ms測試一次,執(zhí)行1000次

Gremlins 和 mogwais 一樣,都是簡單的 JavaScript 函數(shù)。 如果 gremlins.js 不提供可以破壞您的應(yīng)用程序的 gremlin,那么開發(fā)它非常容易,代碼示例如下:

// Create a new custom gremlin to blur an input randomly selected function customGremlin({ logger, randomizer, window }) {// Code executed once at initializationlogger.log('Input blur gremlin initialized');// Return a function that will be executed at each attackreturn function attack() {var inputs = document.querySelectorAll('input');var element = randomizer.pick(element);element.blur();window.alert('attack done');}; }// Add it to your horde const horde = gremlins.createHorde({species: [customGremlin], });

?gremlins.js中的所有方法都可配置,擴(kuò)展性強(qiáng)并且非常適合測試。

高級用法

設(shè)置Gremlins和Mogwais 用于測試

所有的Gremlins和Mogwaisorn類默認(rèn)都添加到horde中了,你也可以只選中你想要得gremlins類,配置如下:

gremlins.createHorde({species: [gremlins.species.formFiller(),gremlins.species.clicker({clickTypes: ['click'],}),gremlins.species.toucher(),],}).unleash();

如果你想自定義gremlins替換默認(rèn)的,可以用allSpecies常量

gremlins.createHorde({species: [...gremlins.allSpecies, customGremlin],}).unleash();

?要僅添加您想要的 mogwais,請以相同的方式使用 mogwai 配置和 allMogwais() 常量。

?gremlins.js 目前提供了一些 gremlins 和 mogwais類:

  • clickerGremlin 單擊任意位置
  • toucherGremlin 觸摸任意位置
  • formFillerGremlin 通過輸入數(shù)據(jù)、選擇選項(xiàng)、單擊復(fù)選框等來填充表單
  • scrollerGremlin 滾動視口
  • typerGremlin 在鍵盤上鍵入
  • alertMogwai 防止調(diào)用 alert() 阻止測試
  • fpsMogwai 記錄瀏覽器的每秒幀數(shù) (FPS)
  • gizmoMogwai暫停gremlins當(dāng)他們移動的太遠(yuǎn)時

配置gremlins

gremlins.js提供的所有g(shù)remlins和mogwais都可配置,比如你可以通過注入自定義配置來改變它們的工作方式。

例如,clicker gremlin 是一個將對象作為自定義配置的函數(shù):

const customClicker = gremlins.species.clicker({// which mouse event types will be triggeredclickTypes: ['click'],// Click only if parent is has class test-classcanClick: (element) => element.parentElement.className === 'test-class',// by default, the clicker gremlin shows its action by a red circle// overriding showAction() with an empty function makes the gremlin action invisibleshowAction: (x, y) => {}, }); gremlins.createHorde({species: [customClicker], });

每個特定的 gremlin 或 mogwai 都有自己的自定義方法,你可以查看源碼獲取詳細(xì)內(nèi)容。

插入隨機(jī)器

如果你想重復(fù)測試,那就需要插入一個隨機(jī)數(shù)生成器,比如:

// seed the randomizer horde.createHorde({randomizer: new gremlins.Chance(1234); });

測試前或測試后執(zhí)行代碼

測試或?qū)Ρ粶y系統(tǒng)發(fā)起攻擊前,你可能想執(zhí)行通用代碼,這段代碼可能是用來:啟動文件、禁用一些功能、啟動應(yīng)用程序等。那你只需要插入如下代碼:

const horde = gremlins.createHorde();console.profile('gremlins'); horde.unleash().then(() => {console.profileEnd(); });

制定策略

gremlin默認(rèn)每隔10s隨機(jī)操作對被測系統(tǒng)發(fā)起攻擊,這種攻擊策略成為分布時攻擊策略,你可以試用策略自定義對象定義:

const distributionStrategy = gremlins.strategies.distribution({distribution: [0.3, 0.3, 0.3, 0.1], // the first three gremlins have more chances to be executed than the lastdelay: 50, // wait 50 ms between each action });

這里需要注意:默認(rèn)gremlins有五類,前面的例子會給最后一個gremlin賦值為0。你可以使用另外一種測了。這個策略只是一個方法,入?yún)⒅挥幸粋€:gremlins數(shù)組。另外兩種策略是關(guān)聯(lián)的,方便我們更復(fù)雜攻擊場景制定策略。

停止攻擊

使用horde.stop()可以停止攻擊

自定義日志

gremlins.js在控制臺記錄了所有g(shù)remin的action(動作)和mogwai。如果你想重寫日志方法,以下是編寫的格式:

const customLogger = {log: function (msg) {/* .. */},info: function (msg) {/* .. */},warn: function (msg) {/* .. */},error: function (msg) {/* .. */}, }; horde.createHorde({ logger: customLogger });

Cypress

cypress測試用例中使用gremlins時,你需要提供:

import { createHorde } from 'gremlins.js';describe('Run gremlins.js inside a cypress test', () => {let horde;beforeEach(() =>cy.window().then((testedWindow) => {horde = createHorde({ window: testedWindow });}));it('should run gremlins.js', () => {return cy.wrap(horde.unleash()).then(() => {/* ... */});}); });

Playwright

palywright中使用,你可以將如下代碼作為一個初始化腳本:

const { test } = require('@playwright/test');test('run gremlins.js', async ({ page }) => {await page.addInitScript({path: './node_modules/gremlins.js/dist/gremlins.min.js',});await page.goto('https://playwright.dev');await page.evaluate(() => gremlins.createHorde().unleash()); });

總結(jié)

以上是生活随笔為你收集整理的WEB端Monkey测试gremlins.js的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕人妻一区二 | 深夜视频免费在线观看 | 99人妻碰碰碰久久久久禁片 | 激情伦成人综合小说 | 伊人春色网站 | 亚洲欧美日韩一区二区三区在线观看 | 污免费在线观看 | 丝袜人妻一区二区三区 | av日韩av| 他趴在我两腿中间添得好爽在线看 | 欧美日韩一区二区区别是什么 | 97caoporn| xxx日本少妇 | 久久精品国产99久久久 | 日本少妇xxxx软件 | 亚洲美女屁股眼交8 | 日韩精品免费在线视频 | 黄色成人在线视频 | 亚洲天堂偷拍 | 日韩视频一区二区三区在线播放免费观看 | 男生和女生一起差差差很痛的视频 | 午夜av福利 | 国产午夜福利在线播放 | 国产污污视频在线观看 | 色七七在线 | 欧美激情性做爰免费视频 | 99热这里只有精品在线观看 | 日韩在线视频观看 | 久久婷婷五月综合 | 97人人草 | 九九五月天 | 国产一二精品 | 天天在线观看 | 天天干天天操天天舔 | 台湾少妇xxxx做受 | 欧美老肥妇做.爰bbww视频 | 少妇偷人精品无码人妻 | 美女视频一区二区三区 | 久久性爱视频网站 | 性欧美videos另类艳妇3d | 欧美精品亚洲一区 | 国产又粗又硬又黄的视频 | 欧美精品韩国精品 | 狠狠躁夜夜躁av无码中文幕 | 欧美乱大交xxxxx | 看毛片的网站 | 亚洲成人一区二区在线观看 | 久久精品一二三 | 青青草好吊色 | 亚洲欧美色图在线 | 久久av高潮av无码av喷吹 | 视频1区| 国产精品4| 日韩免费网址 | 国产精华一区二区三区 | 日韩涩| 亚洲成人一二三 | 久久久成人av | 久久国产福利 | 国产卡一卡二在线 | 天天爽天天爽夜夜爽毛片 | 在线免费av播放 | 欧美激情国产在线 | 天天爱天天色 | 一道本在线观看 | 欧美黄色录像带 | 亚洲青色在线 | 秋霞电影网一区二区 | 精品人妻二区中文字幕 | 国产欧美日韩 | 97超级碰碰碰 | 黄色av地址 | 狠狠操天天干 | 99视频在线观看免费 | 欧美黄色三级视频 | 中文字幕精品在线视频 | 欧洲亚洲国产精品 | 男人日女人网站 | 精品一区二区日韩 | 国产偷v国产偷v亚洲高清 | 一级淫片免费 | 色屁屁一区二区三区视频 | 亚洲精品一区二区三区区别 | 国产三级一区 | 99热播| 国产福利短视频 | 免费在线a| 欧美另类一区二区 | 国产精品情侣呻吟对白视频 | 国产做爰xxxⅹ性视频国 | 国产精品成人aaaaa网站 | 久久字幕 | 蜜臀av夜夜澡人人爽人人 | 在线精品亚洲欧美日韩国产 | 亚洲精品一二三 | 在线免费一区二区 | www.jizzjizz | 操屁股视频 | 成人激情免费视频 |