日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常

概要:FireEye是通過AI提高測試效率,并降低AI自動(dòng)化測試使用門檻的工具集,一經(jīng)部署,就可以不用再修改腳本實(shí)現(xiàn)模型的使用和更新。本篇文章將具體介紹AI自動(dòng)化測試過程中用到工程結(jié)構(gòu)、模型選型和重訓(xùn)練的技術(shù)細(xì)節(jié)等。

網(wǎng)站的建設(shè)成都創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為水泥攪拌車等企業(yè)提供專業(yè)服務(wù)。

1 使用效果

目前從功能上分為:頁面異常、控件異常、文本異常,測試結(jié)果頁面如下圖所示:

AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常

當(dāng)測試同學(xué)發(fā)現(xiàn)部分測試出的數(shù)據(jù)并不符合預(yù)期,可以通過頁面標(biāo)注并使用重訓(xùn)練功能實(shí)時(shí)更新模型,不斷提高模型準(zhǔn)確率,減少開發(fā)人員重新去介入模型的調(diào)整和部署。

AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常

2.1 工程結(jié)構(gòu)

工程結(jié)構(gòu)如圖所示:

AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常

這個(gè)工程中,訓(xùn)練數(shù)據(jù)的來源有3方面,樣本生成工具生成的模擬樣本、閑魚技術(shù)質(zhì)量門戶持續(xù)搜集的真實(shí)用戶截屏圖片,還有一個(gè)是FireEye的前端頁面用戶手動(dòng)打標(biāo)的重訓(xùn)練數(shù)據(jù),數(shù)據(jù)采集之后,由集成的工具將其轉(zhuǎn)換為所需要的數(shù)據(jù)類型:JPG、PNG、TXT等,并將其中的資源文件上傳至OSS資源管理,當(dāng)用戶觸發(fā)了重訓(xùn)練命令,會(huì)由Jenkins通知服務(wù)端的重訓(xùn)練腳本開始重新訓(xùn)練,重訓(xùn)練后的模型保存在云端,可以通過API提供給FireEye以及其他業(yè)務(wù)場景使用。

2.2 使用模型

我們在針對不同的識別場景對模型的選型也有不同,其中

1, 頁面異常是檢測頁面是否整體空白或圖片中間有很大的錯(cuò)誤提示圖片,因?yàn)檫@類異常結(jié)構(gòu)簡單特征明顯,所以用CNN做聚類就可以準(zhǔn)確區(qū)分出這一類的case。

2, 控件異常是找到頁面中有異常特征的控件,如識別截屏里面包含了圖片的打底圖,說明有圖片加載異常,識別出有l(wèi)oading控件,可能用戶在這個(gè)場景長時(shí)間卡住,識別出有error的HUD表示異常提示。我們在工程中選用SSD做物體檢測,原因是異常控件在一個(gè)頁面中可能存在多個(gè),使用SSD模型可以識別出異??丶念愋鸵约霸陧撁娴奈恢煤彤惓5臄?shù)量。

3, (具體介紹)文本異常檢測是通過OCR逐行識別出頁面中的文本,然后判斷文本的語義是否正常,模型部分選用的是LSTM,RNN的本質(zhì)是一個(gè)數(shù)據(jù)推斷(inference)機(jī)器,它可以尋找兩個(gè)時(shí)間序列之間的關(guān)聯(lián),只要數(shù)據(jù)足夠多,就可以得到從x(t)到y(tǒng)(t)的概率分布函數(shù), 從而達(dá)到推斷和預(yù)測的目的,而LSTM(Long Short Term Memory Networks)長短時(shí)間記憶網(wǎng)絡(luò),是RNN的一個(gè)變種,避免長期依賴和梯度消失,爆炸等問題,使得LSTM已經(jīng)成為處理擁有長期依賴問題的序列數(shù)據(jù)問題的首要方法之一(語言模型、機(jī)器翻譯等領(lǐng)域)。

文本異常的處理是通過一句話判斷是否為異常文本,輸入是有時(shí)序的一串字符,輸出是否異常,符合RNN的5種架構(gòu)中的many-to-one類型,這是我們選用LSTM的原因。

AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常

實(shí)際的檢測效果如下:

AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常

識別結(jié)果(其中第三行被識別出包含亂碼):

AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常

方案的實(shí)現(xiàn)上我們使用的是,Keras提供的LSTM層來構(gòu)造網(wǎng)絡(luò),然后構(gòu)建以閑魚APP里的標(biāo)題、詳情、評論等作為正樣本,口字碼、拼音碼、符號碼、錕拷碼、代碼等作為負(fù)樣本的訓(xùn)練數(shù)據(jù),使用nltk的分詞器分詞輸入訓(xùn)練得到模型,通過OCR提取頁面文字輸入頁面識別輸入模型判斷。

部分代碼:

1,首先統(tǒng)計(jì)數(shù)據(jù)中有多少個(gè)不同的詞,每句話由多少個(gè)詞組成

maxlen = 0  #句子最大長度 
word_freqs = collections.Counter()  #詞頻 
num_recs = 0 # 樣本數(shù) 
with open('./train.txt','r+') as f: 
    for line in f: 
        label, sentence = line.strip().split("t") 
        words = nltk.word_tokenize(sentence.lower() 
        if len(words) > maxlen: 
            maxlen = len(words) 
        for word in words: 
            word_freqs[word] += 1 
        num_recs += 1

目前項(xiàng)目里的亂碼識別主要是針對英文和字符類型,所以使用的是nltk庫做分詞,如果是主要對中文處理,使用結(jié)巴分詞效果更好,或者用NLTK庫中Sinica(中央研究院)提供的繁體中文語料庫,from nltk.corpus import sinica_treebank 這樣導(dǎo)入

2,建立兩個(gè)表,word2index和 index2word,用于單詞和數(shù)字轉(zhuǎn)換,把句子轉(zhuǎn)換成數(shù)字序列,長度統(tǒng)一到 MAXSENTENCELENGTH,不夠的填0,多出的截掉

MAX_FEATURES = 2000 
MAX_SENTENCE_LENGTH = 40 
vocab_size = min(MAX_FEATURES, len(word_freqs) + 2 
word2index = {x[0]: i+2 for i, x in rate(word_freqs.most_common(MAX_FEATURES)} 
word2index["PAD"] = 0 
word2index["UNK"] = 1 
index2word = {v:k for k, v in word2index.items()} 
X = np.empty(num_recs,dtype=list) 
y = np.zeros(num_recs) 
i=0 
with open('./train.txt','r+') as f: 
    for line in f: 
        label, sentence = line.strip().split("t") 
        words = nltk.word_tokenize(sentence.lower() 
        seqs = [] 
        for word in words: 
            if word in word2index: 
                seqs.append(word2index[word]) 
            else: 
                seqs.append(word2index["UNK"]) 
        X[i] = seqs 
        y[i] = int(label) 
        i += 1 
X = sequence.pad_sequences(X, maxlen=MAX_SENTENCE_LENGTH) ,
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=0.2, random_state=42) 
EMBEDDING_SIZE = 128 
HIDDEN_LAYER_SIZE = 64

3,模型訓(xùn)練,損失函數(shù)用 binary_crossentropy,優(yōu)化方法用 adam,最后導(dǎo)出h6模型。

model = Sequential() 
model.add(Embedding(vocab_size, EMBEDDING_SIZE,input_length=MAX_SENTENCE_LENGTH) 
model.add(LSTM(HIDDEN_LAYER_SIZE, dropout=0.2, recurrent_dropout=0.2) 
model.add(Dense(1) 
model.add(Activation("sigmoid") 
model.compile(loss="binary_crossentropy", optimizer="adam",metrics=["accuracy"]) 
BATCH_SIZE = 32 
NUM_EPOCHS = 10 
model.fit(Xtrain, ytrain, batch_size=BATCH_SIZE, epochs=NUM_EPOCHS,validation_data=(Xtest, ytest) 
model.save("garbled.h6");"

4,OCR識別頁面文字內(nèi)容,導(dǎo)入模型中進(jìn)行預(yù)測。(目前使用是谷歌OCR,中文識別的精度還不夠)

3 FireEye輔助工具集

3.1 樣本生成工具

在工程開始初期從真實(shí)用戶收集的數(shù)據(jù)很少,需要大量的樣本提供訓(xùn)練,為了能大量生成訓(xùn)練和測試樣本并且不影響APP的線上統(tǒng)計(jì)數(shù)據(jù),開發(fā)了一個(gè)通用的native的mock庫可以截取控件加載數(shù)據(jù)隨機(jī)生成mock的數(shù)據(jù),用來配合Facebook-WDA截取圖片獲得樣本: 1,mock所有UIImage,隨機(jī)加載1萬個(gè)樣本數(shù)據(jù)里的圖片url;

2,mock所有UILabel和UITextField,隨機(jī)從樣本庫中生成語句和數(shù)字,內(nèi)容數(shù)與原有數(shù)據(jù)相仿;

3,通過Facebook-WDA工具腳本控制APP,隨機(jī)點(diǎn)擊進(jìn)入不同頁面,滑動(dòng),截圖,判斷是否到底部,再隨機(jī)跳轉(zhuǎn)到別的頁面…這樣來獲得大量樣本;

3.2 重訓(xùn)練打標(biāo)工具

打標(biāo)一直以來是使用AI困擾大家的一件耗時(shí)耗力的步驟,F(xiàn)ireEye提供重訓(xùn)練功能的同時(shí)提供了相關(guān)工具:

其中頁面異常的識別的CNN模型和識別文本異常的LSTM模型重訓(xùn)練,可以通過用戶在網(wǎng)頁上的對結(jié)果進(jìn)行勾選,輸入正確的結(jié)果來完成標(biāo)注工作,操作比較簡單,最復(fù)雜繁瑣的是SSD模型的打標(biāo),普遍的做法是使用labelImg工具,先準(zhǔn)確的框選目標(biāo)物體輸入標(biāo)簽名,然后導(dǎo)出包含物體位置和標(biāo)簽信息的CSV文件,F(xiàn)ireEye將這個(gè)功能集成到了重訓(xùn)練的系統(tǒng)中,用戶可以通過在頁面上劃線或者畫框標(biāo)出物體大致的位置,位置會(huì)傳到后端腳本自動(dòng)裁剪提取前景,得到更精準(zhǔn)的物體實(shí)際定位并生成CSV文件,其中畫框標(biāo)記的具體實(shí)現(xiàn)如下:

1,前端頁面打標(biāo)

下圖是使用框選物體來標(biāo)記右下角的按鈕,我們不需要框出準(zhǔn)確的位置:

AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常

2,調(diào)用Python腳本,使用OpenCV的grabcut來實(shí)現(xiàn)前景提取

img=cv2.imread('tmp2.png')
mask=np.zeros((img.shape[:2]),np.uint8)
bgdModel=np.zeros((1,65),np.float64)
fgdModel=np.zeros((1,65),np.float64)
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
mask2=np.where((mask==2)|(mask==0),0,1).astype('uint8')

下圖是grabcut提取前景后識別出的mask圖,右下角有部分裁剪后留下的雜點(diǎn)

AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常

3,得到前景二值化,查找連通區(qū)域,找到最大面積,通過把小面積區(qū)域用fillConvexPoly方法填充覆蓋,得到

img=img*mask2[:,:,np.newaxis]
gray_temp = mask2.copy() #copy the gray image because function
binary, contours, hierarchy = cv2.findContours(gray_temp, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(img, contours, -1, (0, 255, 255), 2)
area = []
for i in xrange(len(contours)):
    area.append(cv2.contourArea(contours[i]))
max_idx = np.argmax(area)
for i in xrange(len(contours)):
     if i != max_idx:
        cv2.fillConvexPoly(mask2, contours[i], 0)

AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常

4,再獲得外接矩形,得到準(zhǔn)確的標(biāo)記位置并輸出CSV文件。

總結(jié)

FireEye目標(biāo)是打造一個(gè)精簡易用的自動(dòng)化測試工具集,可以很方便快捷的部署和調(diào)整,后面工程的重心會(huì)是AutoML的模型自動(dòng)調(diào)參,識別布局異常,以及通過頁面元素(控件、文本等)的綜合分析,區(qū)分業(yè)務(wù)場景,理解用戶操作路徑是否正確等方面,歡迎有興趣的小伙伴一起探討學(xué)習(xí)。


新聞標(biāo)題:AI賦能一鍵自動(dòng)檢測:頁面異常、控件異常、文本異常
文章分享:http://www.dlmjj.cn/article/pgjjjc.html