亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種網(wǎng)站自動(dòng)化測(cè)試方法及自動(dòng)化測(cè)試系統(tǒng)的制作方法

文檔序號(hào):7987595閱讀:224來源:國知局
一種網(wǎng)站自動(dòng)化測(cè)試方法及自動(dòng)化測(cè)試系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種網(wǎng)站自動(dòng)化測(cè)試方法及自動(dòng)化測(cè)試系統(tǒng),以解決目前自動(dòng)化測(cè)試效率低的問題。其中,一種網(wǎng)站自動(dòng)化測(cè)試方法包括:對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量;根據(jù)所述中間件變量生成中間件接口;接收待測(cè)試的頁面元素信息,并查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口;調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。本發(fā)明提高了頁面元素的識(shí)別效率,進(jìn)而提高了自動(dòng)化測(cè)試的效率。
【專利說明】一種網(wǎng)站自動(dòng)化測(cè)試方法及自動(dòng)化測(cè)試系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及自動(dòng)化測(cè)試技術(shù),特別是涉及一種網(wǎng)站自動(dòng)化測(cè)試方法及自動(dòng)化測(cè)試系統(tǒng)。
【背景技術(shù)】
[0002]自動(dòng)化測(cè)試是把以人為驅(qū)動(dòng)的測(cè)試行為轉(zhuǎn)化為機(jī)器執(zhí)行的一種過程。通常由測(cè)試人員根據(jù)測(cè)試用例中描述的規(guī)程一步步執(zhí)行測(cè)試,得到實(shí)際結(jié)果與期望結(jié)果的比較。在此過程中,為了節(jié)省人力、時(shí)間或硬件資源,提高測(cè)試效率,引入了自動(dòng)化測(cè)試的概念。
[0003]在網(wǎng)站自動(dòng)化測(cè)試中,頁面元素(即頁面中對(duì)用戶可見的控件,例如button(按鈕),form(表格)等)的識(shí)別是自動(dòng)化測(cè)試的基礎(chǔ)?,F(xiàn)有的測(cè)試過程中,測(cè)試人員通過安裝firebug、iedeveloper等插件,并手動(dòng)點(diǎn)擊選擇頁面元素來實(shí)現(xiàn)對(duì)頁面元素的識(shí)別。當(dāng)測(cè)試人員手動(dòng)選擇某個(gè)頁面元素時(shí),這些插件可以自動(dòng)識(shí)別出所選的頁面元素,并將識(shí)別結(jié)果顯示出來,以供測(cè)試人員在測(cè)試過程中使用。
[0004]上述網(wǎng)站自動(dòng)化測(cè)試方法雖然可以使用插件來識(shí)別頁面元素,但還是引入了較多的人工操作,在識(shí)別頁面元素的時(shí)候需要測(cè)試人員對(duì)需要識(shí)別的元素一個(gè)一個(gè)進(jìn)行手動(dòng)點(diǎn)擊,操作比較繁瑣。而一個(gè)網(wǎng)站包含大量的網(wǎng)頁,每個(gè)網(wǎng)頁也包含大量的頁面元素,上述需要較多人工操作的識(shí)別方法顯然不能滿足自動(dòng)化測(cè)試中的識(shí)別需求,而且識(shí)別效率低下。由于頁面元素的識(shí)別是自動(dòng)化測(cè)試的基礎(chǔ),因而頁面元素識(shí)別的效率低下也帶來了網(wǎng)站自動(dòng)化測(cè)試的效率低下。

【發(fā)明內(nèi)容】

[0005]本申請(qǐng)?zhí)峁┝艘环N網(wǎng)站自動(dòng)化測(cè)試方法及自動(dòng)化測(cè)試系統(tǒng),以解決目前自動(dòng)化測(cè)試效率低的問題。
[0006]為了解決上述問題,本申請(qǐng)公開了一種網(wǎng)站自動(dòng)化測(cè)試方法,包括:
[0007]對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量;
[0008]根據(jù)所述中間件變量生成中間件接口 ;
[0009]接收待測(cè)試的頁面元素信息,并查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口 ;
[0010]調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
[0011]可選地,所述對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量包括:
[0012]將網(wǎng)頁解析成HTML DOM樹并遍歷所述HTML DOM樹,所述網(wǎng)頁的一個(gè)頁面元素對(duì)應(yīng)所述HTML DOM樹的一個(gè)節(jié)點(diǎn);
[0013]依據(jù)所述HTML DOM樹的節(jié)點(diǎn)對(duì)應(yīng)的頁面元素生成中間件變量,其中,所述頁面元素的屬性信息作為所述中間件變量的屬性集。
[0014]可選地,所述頁面元素的屬性信息包括以下任意一項(xiàng)或幾項(xiàng):所在網(wǎng)頁的地址信息、頁面元素的類別、頁面元素的名稱,頁面元素的id和頁面元素的值。[0015]可選地,所述根據(jù)中間件變量生成中間件接口包括:
[0016]遍歷所述各中間件變量的屬性集,將所述屬性集中相同屬性的中間件變量歸為一個(gè)哈希表,并以所述相同屬性對(duì)該哈希表命名,將所述相同屬性的中間件變量歸為該哈希表的成員;
[0017]依據(jù)所述HTML DOM樹的層級(jí)關(guān)系,將所述哈希表中具有相同父節(jié)點(diǎn)的哈希表生成一個(gè)中間件接口,所述中間件接口以父節(jié)點(diǎn)對(duì)應(yīng)的頁面元素的任一屬性信息命名。
[0018]可選地,所述查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口包括:
[0019]計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度;
[0020]根據(jù)所述匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口。
[0021]可選地,所述計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度包括:
[0022]獲取所述待測(cè)試的頁面元素信息中的頁面元素名稱,并獲取所述中間件接口的名稱;
[0023]將所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的所有字符轉(zhuǎn)換為小寫/大寫字符;
[0024]計(jì)算所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的相同的小寫/大寫字符的個(gè)數(shù),記為最長(zhǎng)匹配串;
[0025]將所述最長(zhǎng)匹配串與所述中間件接口名稱的小寫/大寫字符的個(gè)數(shù)做除法運(yùn)算,將所述除法運(yùn)算的商作為所述待測(cè)試的頁面元素信息與所述中間件接口的匹配度。
[0026]可選地,所述根據(jù)所述中間件接口的匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口包括:
[0027]判斷所述待測(cè)試的頁面元素信息與各中間件接口的匹配度中最大匹配度是否高于或等于預(yù)設(shè)的閾值;
[0028]當(dāng)所述最大匹配度高于或等于預(yù)設(shè)的閾值時(shí),將所述最大匹配度對(duì)應(yīng)的中間件接口作為所述待測(cè)試的頁面元素信息匹配得到的中間件接口;
[0029]當(dāng)所述最大匹配度低于預(yù)設(shè)的閾值時(shí),匹配失敗。
[0030]可選地,所述調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作包括:
[0031]接收針對(duì)所述待測(cè)試的頁面元素信息的測(cè)試參數(shù),將所述測(cè)試參數(shù)傳入所述匹配到的中間件接口,所述匹配到的中間件接口通過調(diào)用對(duì)應(yīng)的中間件變量對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
[0032]可選地,所述網(wǎng)站自動(dòng)化測(cè)試方法還包括:
[0033]判斷所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集是
否一致;
[0034]若所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集一致,則調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作;
[0035]若所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集不一致,則根據(jù)所述待測(cè)試的頁面元素的屬性信息對(duì)所述匹配到的中間件接口的屬性集進(jìn)行修正。
[0036]本申請(qǐng)還提供了一種網(wǎng)站自動(dòng)化測(cè)試系統(tǒng),包括:[0037]變量生成模塊,用于對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量;
[0038]接口生成模塊,用于根據(jù)所述中間件變量生成中間件接口 ;
[0039]匹配模塊,用于接收待測(cè)試的頁面元素信息,并查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口;
[0040]測(cè)試模塊,用于調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
[0041 ] 可選地,所述變量生成模塊包括:
[0042]解析子模塊,用于將網(wǎng)頁解析成HTML DOM樹并遍歷所述HTML DOM樹,所述網(wǎng)頁的一個(gè)頁面元素對(duì)應(yīng)所述HTML DOM樹的一個(gè)節(jié)點(diǎn);
[0043]變量子模塊,用于依據(jù)所述HTML DOM樹的節(jié)點(diǎn)對(duì)應(yīng)的頁面元素生成中間件變量,其中,所述頁面元素的屬性信息作為所述中間件變量的屬性集。
[0044]可選地,所述頁面元素的屬性信息包括以下任意一項(xiàng)或幾項(xiàng):所在網(wǎng)頁的地址信息、頁面元素的類別、頁面元素的名稱,頁面元素的id和頁面元素的值。
[0045]可選地,所述接口生成模塊包括:
[0046]遍歷子模塊,用于遍歷所述各中間件變量的屬性集,將所述屬性集中相同屬性的中間件變量歸為一個(gè)哈希表,并以所述相同屬性對(duì)該哈希表命名,將所述相同屬性的中間件變量歸為該哈希表的成員;
[0047]接口子模塊,用于依據(jù)所述HTML DOM樹的層級(jí)關(guān)系,將所述哈希表中具有相同父節(jié)點(diǎn)的哈希表生成一個(gè)中間件接口,所述中間件接口以父節(jié)點(diǎn)對(duì)應(yīng)的頁面元素的任一屬性
息命名。
[0048]可選地,所述匹配模塊包括:
[0049]計(jì)算子模塊,用于計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度;
[0050]查找子模塊,用于根據(jù)所述匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口。
[0051]可選地,所述網(wǎng)站自動(dòng)化測(cè)試系統(tǒng)還包括:
[0052]判斷模塊,用于判斷所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集是否一致;
[0053]所述測(cè)試模塊,還用于當(dāng)所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集一致時(shí),調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作;
[0054]修正模塊,用于當(dāng)所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集不一致時(shí),根據(jù)所述待測(cè)試的頁面元素的屬性信息對(duì)所述匹配到的中間件接口的屬性集進(jìn)行修正。
[0055]與現(xiàn)有技術(shù)相比,本申請(qǐng)包括以下優(yōu)點(diǎn):
[0056]本申請(qǐng)實(shí)施例提供的測(cè)試方法,首先對(duì)網(wǎng)頁進(jìn)行解析,針對(duì)網(wǎng)頁元素生成機(jī)器能夠直接執(zhí)行的中間件接口(DSL, Domain Specific Language語言),這些中間件接口可以自動(dòng)模擬用戶操作來測(cè)試網(wǎng)頁元素;在測(cè)試過程中,測(cè)試人員可以通過查找與待測(cè)試頁面元素信息相匹配的中間件接口并調(diào)用所述中間件接口來執(zhí)行自動(dòng)化測(cè)試操作。這種測(cè)試方法可以批量調(diào)用中間件接口來自動(dòng)識(shí)別頁面元素,不需要測(cè)試人員手動(dòng)選擇頁面元素逐一進(jìn)行識(shí)別,因此提高了頁面元素的識(shí)別效率,進(jìn)而提高了自動(dòng)化測(cè)試的效率。
[0057]而且,本申請(qǐng)實(shí)施例在匹配到中間件接口之后,繼續(xù)判斷待測(cè)試的頁面元素的屬性信息與匹配到的中間件接口的屬性集是否一致,若不一致,則根據(jù)待測(cè)試的頁面元素的屬性信息對(duì)匹配到的中間件接口的屬性集進(jìn)行修正。這個(gè)過程可以理解為一個(gè)反驗(yàn)證過程,保證了待測(cè)試頁面元素和中間件接口的準(zhǔn)確匹配。當(dāng)頁面元素的布局發(fā)生改變的時(shí)候,待測(cè)試的頁面元素的屬性信息與匹配到的中間件接口的屬性集不一致,根據(jù)待測(cè)試的頁面元素的屬性信息對(duì)匹配到的中間件接口的屬性集進(jìn)行修正,從而使得所匹配的中間件接口的屬性集信息與發(fā)生改變后的頁面元素的屬性信息相對(duì)應(yīng),可以動(dòng)態(tài)適應(yīng)頁面布局的變化。
[0058]當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
【專利附圖】

【附圖說明】
[0059]圖1是本申請(qǐng)實(shí)施例所述一種網(wǎng)站自動(dòng)化測(cè)試方法的流程圖;
[0060]圖2是本申請(qǐng)實(shí)施例所述另一種網(wǎng)站自動(dòng)化測(cè)試方法的流程圖;
[0061]圖3是本申請(qǐng)實(shí)施例所述一種網(wǎng)站自動(dòng)化測(cè)試系統(tǒng)的結(jié)構(gòu)框圖;
[0062]圖4是本申請(qǐng)實(shí)施例所述另一種網(wǎng)站自動(dòng)化測(cè)系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0063]為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說明。
[0064]下面通過實(shí)施例對(duì)本申請(qǐng)所述方法的實(shí)現(xiàn)流程進(jìn)行詳細(xì)說明。
[0065]參照?qǐng)D1,其示出了本申請(qǐng)實(shí)施例所述一種網(wǎng)站自動(dòng)化測(cè)試方法的流程圖。本實(shí)施例具體可以包括以下步驟:
[0066]步驟100,對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量;
[0067]本實(shí)施例中上述對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量具體可以包括以下子步驟:
[0068]子步驟1001,將網(wǎng)頁解析成HTML DOM樹并遍歷所述HTML DOM樹,所述網(wǎng)頁的一個(gè)頁面元素對(duì)應(yīng)所述HTML DOM樹的一個(gè)節(jié)點(diǎn);
[0069]HTML DOM樹可以理解為網(wǎng)頁的應(yīng)用程序編程接口,HTML DOM樹將網(wǎng)頁中的各個(gè)元素都看作一個(gè)個(gè)對(duì)象,從而使網(wǎng)頁中的元素也可以被計(jì)算機(jī)語言獲取或編輯。
[0070]子步驟1002,依據(jù)所述HTML DOM樹的節(jié)點(diǎn)對(duì)應(yīng)的頁面元素生成中間件變量,其中,所述頁面元素的屬性信息作為所述中間件變量的屬性集。
[0071]具體地,HTML DOM樹的一個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)頁面元素,一個(gè)頁面元素對(duì)應(yīng)生成一個(gè)中間件變量。
[0072]本實(shí)施例中所述頁面元素的屬性信息具體可以包括以下任意一項(xiàng)或幾項(xiàng):所在網(wǎng)頁的地址信息、頁面元素的類別、頁面元素的名稱,頁面元素的id和頁面元素的值,以及DOM樹中該頁面元素的其它屬性。例如,所在網(wǎng)頁的地址信息(如URL)可以為Alibaba,com、baidu.com或163.com ;頁面元素的類別可以為text (文本)、button (按鈕)或form(表格);頁面兀素的名稱可以為 e_alibaba_searchbar、e_alibaba_search_button或 e_alibaba_search_result ;頁面兀素的 id 可以為 SearchTextldx > searchsubmit、list—form。
[0073]由于將所述頁面元素的屬性信息作為所述中間件變量的屬性集,相對(duì)應(yīng)的,所述中間件變量的屬性集同樣可以包括以下任意一項(xiàng)或幾項(xiàng):所在網(wǎng)頁的地址信息、頁面元素的類別、頁面元素的名稱,頁面元素的id和頁面元素的值。
[0074]本實(shí)施例中可以根據(jù)所述中間件變量的屬性集來定義中間件變量,例如,對(duì)于有id的頁面元素,可以根據(jù)該頁面元素的類別和該頁面元素的id來定義,定義為e_#{pagename}_#{頁面元素的類別}_{頁面元素的id},可以表示為e_# {pagename}_# {type}_{id};對(duì)于有名稱的頁面元素,可以根據(jù)該頁面元素的類別和該頁面元素的名稱來定義,定義為e_# {pagename}_#{頁面元素的類別} {頁面元素的名稱},可以表不為 e_# {pagename} _# {type} _ {name}。
[0075]例如,對(duì)于搜索框,就可以生成以下三個(gè)中間件變量,分別為搜索(searchbar)中間件變量,按鈕(button)中間件變量和結(jié)果(result)中間件變量:
[0076]e_alibaba_searchbar = {urI = > Alibaba.com, text_field,(:1d, " SearchText I dx〃),(value,,,,,),(: class, xpath, parent, sibling}
[0077]e_alibaba_search_button = {urI = > Alibaba.com, button,(:1d, " searchSubmit " ), (: type, " button " ), (:hidefocus, " true ")(:value, " Search" )}
[0078]e_a I i b ab a_s e ar ch_r e su 11 = {ur I = > Alibaba.com, form,(:1d, " list-form" ),(value,,,,,),(: class,,,images-lazyload”),(:name,,,form”),xpath}
[0079]下面以上述搜索中間件變量進(jìn)行說明,在搜索中間件變量中,url => Alibaba,com為所在網(wǎng)頁的地址,text_field為頁面元素的類別,:id, " SearchTextIdx"表示頁面兀素的 id 為 “SearchTextldx”。
[0080]本實(shí)施例中還可以所述中間件變量的名稱為關(guān)鍵字,并以所述中間件變量的屬性集作為關(guān)鍵字對(duì)應(yīng)的哈希值,創(chuàng)建哈希表,這樣就建立了中間件變量的名稱和中間件變量的屬性集的映射。
[0081]例如,對(duì)于某個(gè)中間件變量創(chuàng)建一個(gè)哈希表,包含以下屬性:
[0082]URL:當(dāng)前頁面的url ;
[0083]Type:控件的類別;
[0084]其他屬性:頁面元素在html代碼里具有的其他屬性,如id、name等等。
[0085]步驟102,根據(jù)所述中間件變量生成中間件接口(DSL, Domain SpecificLanguage語目);
[0086]本實(shí)施例中所述根據(jù)中間件變量生成中間件接口具體可以包括以下子步驟:
[0087]子步驟1021,遍歷所述各中間件變量的屬性集,將所述屬性集中相同屬性的中間件變量歸為一個(gè)哈希表,并以所述相同屬性對(duì)該哈希表命名,將所述相同屬性的中間件變量歸為該哈希表的成員;
[0088]例如,將中間件變量屬性集中具有相同頁面元素類別(即相同Type)的中間件變量歸為一個(gè)哈希表,以所述頁面元素的類別命名,可以命名為Type。具體地,假設(shè)網(wǎng)頁上有多個(gè)按鈕(button)中間件變量,如 search_button、input_button 和 output_button,則將這些中間件變量歸為一個(gè)哈希表,命名為Button,同時(shí)將search_button、input_button和output_button歸為哈希表Button的成員。而且,具體變量的方法可以用“.”運(yùn)算符加屬性值直接獲取到,如Button, id可以直接獲取到id屬性值。
[0089]子步驟1022,依據(jù)所述HTML DOM樹的層級(jí)關(guān)系,將所述哈希表中具有相同父節(jié)點(diǎn)的哈希表生成一個(gè)中間件接口,所述中間件接口以父節(jié)點(diǎn)對(duì)應(yīng)的頁面元素的任一屬性信息命名。
[0090]例如,當(dāng)e_alibaba_searchbar 和 e_alibaba_search_button 同屬一個(gè)父節(jié)點(diǎn)對(duì)應(yīng)的頁面兀素 e_alibaba_Search 時(shí),將 e_alibaba_searchbar 和 e_alibaba_search_button 生成一個(gè)中間件接口,命名為 e_albaba_search。這樣,通過 e_alibaba_search.searchbar 就可以訪問到上述 e_alibaba_searchbar。
[0091]需要說明的是本實(shí)施例中也可以其他規(guī)則來生成中間件接口,本實(shí)施例對(duì)此不做限制。
[0092]需要說明的是,本步驟102中上述將所述屬性集中相同屬性的中間件變量歸為一個(gè)“哈希表”,此處的哈希表與步驟100提到的以所述中間件變量的名稱為關(guān)鍵字,并以所述中間件變量的屬性集作為關(guān)鍵字對(duì)應(yīng)的哈希值,創(chuàng)建“哈希表”,這兩個(gè)哈希表并不相同,步驟100中的哈希表的每個(gè)哈希是與HTML DOM樹的節(jié)點(diǎn)——對(duì)應(yīng)的,而本步驟是將所述屬性及中相同屬性的中間變量重新生成一個(gè)哈希表,與HTML DOM樹的節(jié)點(diǎn)沒有一一對(duì)應(yīng)的關(guān)系O
[0093]步驟104,接收待測(cè)試的頁面元素信息,并查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口;
[0094]頁面元素信息的表示方法有很多,可以用頁面元素的名稱來標(biāo)識(shí),例如Alibaba,search ;也可以用頁面元素的id來表示,只要可以標(biāo)識(shí)頁面元素的屬性都可以作為頁面元素信息,本實(shí)施例對(duì)此不作限制。
[0095]查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口的方法有很多,本實(shí)施例以通過計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度為例進(jìn)行說明。所述查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口具體可以包括以下子步驟:
[0096]子步驟1041,計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度;
[0097]所述計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度可以通過以下步驟來實(shí)現(xiàn):
[0098]步驟一,獲取所述待測(cè)試的頁面元素信息中的頁面元素名稱,并獲取所述中間件接口的名稱;
[0099]例如,待測(cè)試的頁面元素信息中頁面元素的名稱為search_bar,中間件接口的名稱分別為:Search、click 和 input。
[0100]步驟二,將所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的所有字符轉(zhuǎn)換為小與/大與字符;
[0101]需要說明的是,本實(shí)施例中所述“小寫/大寫字符”,意思是小寫字符或者大寫字符。具體地,將所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的所有字符都轉(zhuǎn)換為小寫字符,或者,將所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的所有字符都轉(zhuǎn)換為大寫字符。下面的步驟三和步驟四中也為此意。
[0102]以轉(zhuǎn)換為小寫字符為例進(jìn)行說明,待測(cè)試的頁面元素名稱為searchjDar,中間件接口的名稱分別為:search、click和input。
[0103]步驟三,計(jì)算所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的相同的小寫/大寫字符的個(gè)數(shù),記為最長(zhǎng)匹配串;
[0104]同樣以計(jì)算相同小寫字符為例進(jìn)行說明,search_bar與search的相同小寫字符個(gè)數(shù)為6個(gè),search_bar與click的相同小寫字符個(gè)數(shù)為I個(gè),search_bar與input的相同小寫字符個(gè)數(shù)為O個(gè)。
[0105]最長(zhǎng)匹配串即為具有相同的小寫字符的最多個(gè)數(shù),在本實(shí)施例中為6個(gè),也就說,6為最長(zhǎng)匹配串。
[0106]步驟四,將所述最長(zhǎng)匹配串與所述中間件接口名稱的小寫/大寫字符的個(gè)數(shù)做除法運(yùn)算,將所述除法運(yùn)算的商作為所述待測(cè)試的頁面元素信息與所述中間件接口的匹配度。
[0107]將最長(zhǎng)匹配串6和對(duì)應(yīng)的中間件接口名稱Search_bar的小寫字符search_bar的個(gè)數(shù)9做除法運(yùn)算,商為I作為待測(cè)試的頁面元素search_bar與中間件接口 Search_bar的匹配度。
[0108]子步驟1042,根據(jù)所述匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口。
[0109]本實(shí)施例中所述根據(jù)所述中間件接口的匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口具體可以通過以下步驟來實(shí)現(xiàn):
[0110]判斷所述待測(cè)試的頁面元素信息與各中間件接口的匹配度中最大匹配度是否高于或等于預(yù)設(shè)的閾值;
[0111]例如,預(yù)設(shè)的閾值可以為0.3,當(dāng)然也可以設(shè)置為其他數(shù)值,只要小于I即可。
[0112]當(dāng)所述最大匹配度高于或等于預(yù)設(shè)的閾值時(shí),將所述最大匹配度對(duì)應(yīng)的中間件接口作為所述待測(cè)試的頁面元素信息匹配得到的中間件接口 ;當(dāng)所述最大匹配度低于預(yù)設(shè)的閾值時(shí),匹配失敗。
[0113]本實(shí)施例中上述待測(cè)試的頁面元素search_bar與中間件接口 Searchr的匹配度為f,大于預(yù)設(shè)的閾值0.3,因此與待測(cè)試的頁面元素searchjDar相匹配的中間件接口為Search0
[0114]步驟106,調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
[0115]本實(shí)施例可以通過以下方式執(zhí)行測(cè)試操作:
[0116]接收針對(duì)所述待測(cè)試的頁面元素信息的測(cè)試參數(shù),將所述測(cè)試參數(shù)傳入所述匹配到的中間件接口,所述匹配到的中間件接口通過調(diào)用對(duì)應(yīng)的中間件變量對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
[0117]可以結(jié)合下面“搜索框”的例子理解上述測(cè)試操作的執(zhí)行:
[0118]首先,匹配到的中間件接口調(diào)用對(duì)應(yīng)的搜索中間件,并將所述頁面元素信息的測(cè)試參數(shù)傳遞給所述搜索中間件;[0119]中間件接口 Search將待測(cè)試頁面元素信息的測(cè)試參數(shù)mp3傳遞給對(duì)應(yīng)的搜索中間件e_alibaba_searchbar,所述搜索中間件e_alibaba_searchbar自動(dòng)執(zhí)行的操作為模擬用戶在搜索框中輸入測(cè)試參數(shù)mp3。
[0120]其次,所述搜索中間件接收所述待測(cè)試的頁面元素的測(cè)試參數(shù)后,調(diào)用所述按鈕中間件;
[0121]本實(shí)施例中按鈕中間件為e_alibaba_search_button,自動(dòng)執(zhí)行的操作為模擬用戶點(diǎn)擊按鈕控件。
[0122]再次,所述按鈕中間件執(zhí)行點(diǎn)擊按鈕操作,并將所述待測(cè)試的頁面元素對(duì)應(yīng)的搜索結(jié)果發(fā)送至結(jié)果中間件;
[0123]按鈕中間件e_alibaba_search_button執(zhí)行點(diǎn)擊按鈕操作,將搜索結(jié)果飯送至結(jié)果中間件 e_alibaba_search_result。
[0124]最后,所述結(jié)果中間件顯示所述搜索結(jié)果。
[0125]結(jié)果中間件e_alibaba_search_result自動(dòng)執(zhí)行顯示搜索結(jié)果的操作。
[0126]由上述例子可以看出,本實(shí)施例可以調(diào)用生成的中間件接口 Search自動(dòng)執(zhí)行測(cè)試操作,中間件接口 Search首先在e_alibaba_searchbar中輸入要搜索的詞“mp3”,然后調(diào)用e_alibaba_search_button自動(dòng)執(zhí)行點(diǎn)擊按鈕的操作,最后通過e_alibaba_search_result接收搜索結(jié)果,這一系列測(cè)試過程都是自動(dòng)執(zhí)行的,實(shí)現(xiàn)了自動(dòng)化測(cè)試而且不需要大量人工操作,提高了網(wǎng)站自動(dòng)化測(cè)試的效率。
[0127]綜上所述,本申請(qǐng)實(shí)施例提供的測(cè)試方法,首先對(duì)網(wǎng)頁進(jìn)行解析,針對(duì)網(wǎng)頁元素生成機(jī)器能夠直接執(zhí)行的中間件接口(DSL,Domain SpecificLanguage語言),這些中間件接口可以自動(dòng)模擬用戶操作來測(cè)試網(wǎng)頁元素;在測(cè)試過程中,測(cè)試人員可以通過查找與待測(cè)試頁面元素信息相匹配的中間件接口并調(diào)用所述中間件接口來執(zhí)行自動(dòng)化測(cè)試操作。這種測(cè)試方法可以批量調(diào)用中間件接口來自動(dòng)識(shí)別頁面元素,不需要測(cè)試人員手動(dòng)選擇頁面元素逐一進(jìn)行識(shí)別,因此提高了頁面元素的識(shí)別效率,進(jìn)而提高了自動(dòng)化測(cè)試的效率。
[0128]參照?qǐng)D2,其示出了本申請(qǐng)實(shí)施例所述一種網(wǎng)站自動(dòng)化測(cè)試方法的流程圖。本實(shí)施例具體可以包括以下步驟:
[0129]步驟200,對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量;
[0130]本實(shí)施例中具體可以首先將網(wǎng)頁解析成HTML DOM樹并遍歷所述HTML DOM樹,所述網(wǎng)頁的一個(gè)頁面元素對(duì)應(yīng)所述HTML DOM樹的一個(gè)節(jié)點(diǎn),其中HTML DOM樹可以理解為網(wǎng)頁的應(yīng)用程序編程接口,HTMLD0M樹將網(wǎng)頁中的各個(gè)元素都看作一個(gè)個(gè)對(duì)象,從而使網(wǎng)頁中的元素也可以被計(jì)算機(jī)語言獲取或編輯。
[0131]然后依據(jù)所述HTML DOM樹的節(jié)點(diǎn)對(duì)應(yīng)的頁面元素生成中間件變量,其中,所述頁面元素的屬性信息作為所述中間件變量的屬性集。
[0132]具體生成中間件變量的過程可以參照?qǐng)D1所示的實(shí)施例的相關(guān)內(nèi)容,本實(shí)施例在此不做贅述。
[0133]步驟202,根據(jù)所述中間件變量生成中間件接口 ;
[0134]本實(shí)施例中可以首先遍歷所述各中間件變量的屬性集,將所述屬性集中相同屬性的中間件變量歸為一個(gè)哈希表,并以所述相同屬性對(duì)該哈希表命名,將所述相同屬性的中間件變量歸為該哈希表的成員;然后,依據(jù)所述HTML DOM樹的層級(jí)關(guān)系,將所述哈希表中具有相同父節(jié)點(diǎn)的哈希表生成一個(gè)中間件接口,所述中間件接口以父節(jié)點(diǎn)對(duì)應(yīng)的頁面元素的任一屬性信息命名。
[0135]具體根據(jù)中間件變了生成中間件接口的例子可以參照?qǐng)D1實(shí)施例所述的相關(guān)內(nèi)容,本實(shí)施例在此不做贅述。
[0136]需要說明的是本實(shí)施例中也可以其他規(guī)則來生成中間件接口,本實(shí)施例對(duì)此不做限制。
[0137]步驟204,接收待測(cè)試的頁面元素信息,并查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口;
[0138]查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口的方法有很多,例如可以通過計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度,然后根據(jù)所述匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口。
[0139]子步驟2041,計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度;
[0140]所述計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度可以通過以下步驟來實(shí)現(xiàn):
[0141]步驟一,獲取所述待測(cè)試的頁面元素信息中的頁面元素名稱,并獲取所述中間件接口的名稱;
[0142]例如,待測(cè)試的頁面元素信息中頁面元素的名稱為search_bar,中間件接口的名稱分別為:Search、click 和 input。
[0143]步驟二,將所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的所有字符轉(zhuǎn)換為小與/大與字符;
[0144]以轉(zhuǎn)換為小寫字符為例進(jìn)行說明,待測(cè)試的頁面元素名稱為searchjDar,中間件接口的名稱分別為:search、click和input。
[0145]步驟三,計(jì)算所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的相同的小寫/大寫字符的個(gè)數(shù),記為最長(zhǎng)匹配串;
[0146]同樣以計(jì)算相同小寫字符為例進(jìn)行說明,search_bar與search的相同小寫字符個(gè)數(shù)為6個(gè),search_bar與click的相同小寫字符個(gè)數(shù)為I個(gè),search_bar與input的相同小寫字符個(gè)數(shù)為O個(gè)。
[0147]最長(zhǎng)匹配串即為具有相同的小寫字符的最多個(gè)數(shù),在本實(shí)施例中為6個(gè),也就說,6為最長(zhǎng)匹配串。
[0148]步驟四,將所述最長(zhǎng)匹配串與所述中間件接口名稱的小寫/大寫字符的個(gè)數(shù)做除法運(yùn)算,將所述除法運(yùn)算的商作為所述待測(cè)試的頁面元素信息與所述中間件接口的匹配度。
[0149]將最長(zhǎng)匹配串6和對(duì)應(yīng)的中間件接口名稱Search_bar的小寫字符search_bar的個(gè)數(shù)9做除法運(yùn)算,商為*作為待測(cè)試的頁面元素search_bar與中間件接口 Search_bar的匹配度。
[0150]子步驟2042,根據(jù)所述匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口。
[0151]本實(shí)施例中所述根據(jù)所述中間件接口的匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口具體可以通過以下步驟來實(shí)現(xiàn):
[0152]判斷所述待測(cè)試的頁面元素信息與各中間件接口的匹配度中最大匹配度是否高于或等于預(yù)設(shè)的閾值;
[0153]例如,預(yù)設(shè)的閾值可以為0.3,當(dāng)然也可以設(shè)置為其他數(shù)值,只要小于I即可。
[0154]當(dāng)所述最大匹配度高于或等于預(yù)設(shè)的閾值時(shí),將所述最大匹配度對(duì)應(yīng)的中間件接口作為所述待測(cè)試的頁面元素信息匹配得到的中間件接口 ;當(dāng)所述最大匹配度低于預(yù)設(shè)的閾值時(shí),匹配失敗。
[0155]本實(shí)施例中上述待測(cè)試的頁面元素search_bar與中間件接口 Searchr的匹配度
為I,大于預(yù)設(shè)的閾值0.3,因此與待測(cè)試的頁面元素searchjDar相匹配的中間件接口為 3
Search0
[0156]步驟206,判斷所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的
屬性集是否一致;
[0157]若所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集一致,則調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作;
[0158]若所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集不一致,則根據(jù)所述待測(cè)試的頁面元素的屬性信息對(duì)所述匹配到的中間件接口的屬性集進(jìn)行修正。
[0159]需要說明的是,只有當(dāng)待測(cè)試的頁面元素的屬性信息與匹配到的中間件接口的屬性集完全一致時(shí),才判定為一致,只要待測(cè)試的頁面元素的屬性信息與匹配到的中間件接口的屬性集中有一個(gè)屬性不一致時(shí),都判定為不一致。例如,待測(cè)試的頁面的屬性信息為{頁面元素的名稱name = e_alibaba_search,所在網(wǎng)頁的地址信息url = Alibaba, com,頁面元素的類別type = teXt_field},所匹配到的中間件接口的屬性集為{頁面元素的名稱name = e_alibaba_search,所在網(wǎng)頁的地址信息url = Alibaba, com,頁面元素的類別type = button},上述待測(cè)試的頁面的屬性信息和所匹配到的中間件接口的屬性集中,頁面元素的名稱、所在網(wǎng)頁的地址信息一致,但是頁面元素的類別不一致,此時(shí)仍判定為不一致,需要將所匹配到的中間件接口的屬性集中的頁面元素的類別修改為與待測(cè)試的頁面的屬性信息中的頁面元素的類別一致,即將“頁面元素的類別type = button”修改為“type=text_field,,。
[0160]本步驟是為了防止網(wǎng)頁布局發(fā)生變化時(shí),中間件接口對(duì)應(yīng)的屬性信息沒有及時(shí)修改,而出現(xiàn)錯(cuò)誤匹配中間件接口的情況發(fā)生。在匹配到中間件接口之后,繼續(xù)判斷所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集是否一致,可以理解為一個(gè)反驗(yàn)證過程,來保證所匹配到的中間件接口準(zhǔn)確對(duì)應(yīng)所述待測(cè)試的頁面元素。
[0161]步驟208,當(dāng)所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集一致時(shí),調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
[0162]本實(shí)施例可以通過以下方式執(zhí)行測(cè)試操作:
[0163]接收針對(duì)所述待測(cè)試的頁面元素信息的測(cè)試參數(shù),將所述測(cè)試參數(shù)傳入所述匹配到的中間件接口,所述匹配到的中間件接口通過調(diào)用對(duì)應(yīng)的中間件變量對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。[0164]綜上所述,上述加入反驗(yàn)證過程的實(shí)施例,不僅可以自動(dòng)識(shí)別頁面元素,提高了識(shí)別頁面元素和自動(dòng)化測(cè)試的效率。而且,在匹配到中間件接口之后,繼續(xù)判斷待測(cè)試的頁面元素的屬性信息與匹配到的中間件接口的屬性集是否一致,若不一致,則根據(jù)待測(cè)試的頁面元素的屬性信息對(duì)匹配到的中間件接口的屬性集進(jìn)行修正,保證了待測(cè)試頁面元素和中間件接口的準(zhǔn)確匹配。進(jìn)一步地,當(dāng)頁面元素的布局發(fā)生改變的時(shí)候,待測(cè)試的頁面元素的屬性信息與匹配到的中間件接口的屬性集不一致,根據(jù)待測(cè)試的頁面元素的屬性信息對(duì)匹配到的中間件接口的屬性集進(jìn)行修正,從而使得所匹配的中間件接口的屬性集信息與發(fā)生改變后的頁面元素的屬性信息相對(duì)應(yīng),可以動(dòng)態(tài)適應(yīng)頁面布局的變化。
[0165]需要說明的是,對(duì)于前述的方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請(qǐng)并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本申請(qǐng),某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作并不一定是本申請(qǐng)所必需的。
[0166]基于上述方法實(shí)施例的說明,本申請(qǐng)還提供了相應(yīng)的網(wǎng)站自動(dòng)化測(cè)試的系統(tǒng)實(shí)施例,來實(shí)現(xiàn)上述方法實(shí)施例所述的內(nèi)容。
[0167]參照?qǐng)D3,其示出了本申請(qǐng)實(shí)施例所述一種網(wǎng)站自動(dòng)化測(cè)試系統(tǒng)的結(jié)構(gòu)框圖,本實(shí)施例具體可以包括以下模塊:
[0168]變量生成模塊11、接口生成模塊12、匹配模塊13和測(cè)試模塊14,其中:
[0169]變量生成模塊11,用于對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量;
[0170]本實(shí)施例中變量生成模塊11具體可以包括以下子模塊:
[0171]解析子模塊111,用于將網(wǎng)頁解析成HTML DOM樹并遍歷所述HTMLD0M樹,所述網(wǎng)頁的一個(gè)頁面元素對(duì)應(yīng)所述HTML DOM樹的一個(gè)節(jié)點(diǎn);
[0172]HTML DOM樹可以理解為網(wǎng)頁的應(yīng)用程序編程接口,HTML DOM樹將網(wǎng)頁中的各個(gè)元素都看作一個(gè)個(gè)對(duì)象,從而使網(wǎng)頁中的元素也可以被計(jì)算機(jī)語言獲取或編輯。
[0173]變量子模塊112,用于依據(jù)所述HTML DOM樹的節(jié)點(diǎn)對(duì)應(yīng)的頁面元素生成中間件變量,其中,所述頁面元素的屬性信息作為所述中間件變量的屬性集。
[0174]本實(shí)施例中所述頁面元素的屬性信息具體可以包括以下任意一項(xiàng)或幾項(xiàng):所在網(wǎng)頁的地址信息、頁面元素的類別、頁面元素的名稱,頁面元素的id和頁面元素的值。例如,所在網(wǎng)頁的地址信息可以為Alibaba, com、baidu.com或163.com ;頁面兀素的類別可以為 text、button 或 form ;頁面兀素的名稱可以為 e_alibaba_searchbar、e_alibaba_search_button 或 e_alibaba_search_result ;頁面兀素的 id 可以為 SearchTextldx、searchsubmit、list-form。
[0175]由于將所述頁面元素的屬性信息作為所述中間件變量的屬性集,相對(duì)應(yīng)的,所述中間件變量的屬性集同樣可以包括以下任意一項(xiàng)或幾項(xiàng):所在網(wǎng)頁的地址信息、頁面元素的類別、頁面元素的名稱,頁面元素的id和頁面元素的值。
[0176]接口生成模塊12,用于根據(jù)所述中間件變量生成中間件接口 ;
[0177]本實(shí)施例中接口生成模塊12具體可以包括以下子模塊:
[0178]遍歷子模塊121,用于遍歷所述各中間件變量的屬性集,將所述屬性集中相同屬性的中間件變量歸為一個(gè)哈希表,并以所述相同屬性對(duì)該哈希表命名,將所述相同屬性的中間件變量歸為該哈希表的成員;
[0179]例如,遍歷子模塊121可以將中間件變量屬性集中具有相同頁面元素類別的中間件變量歸為一個(gè)哈希表,以所述頁面元素的類別命名,可以命名為Type。具體地,假設(shè)網(wǎng)頁上有多個(gè)按鈕(button)中間件變量,如 search_button、input_button 和 output_button,則將這些中間件變量歸為一個(gè)哈希表,命名為Button,同時(shí)將search_button、input_button和output_button歸為哈希表的成員。
[0180]接口子模塊122,用于依據(jù)所述HTML DOM樹的層級(jí)關(guān)系,將所述哈希表中具有相同父節(jié)點(diǎn)的哈希表生成一個(gè)中間件接口,所述中間件接口以父節(jié)點(diǎn)對(duì)應(yīng)的頁面元素的任一屬性信息命名。
[0181]例如,當(dāng)e_alibaba_searchbar 和 e_alibaba_search_button 同屬一個(gè)父節(jié)點(diǎn)對(duì)應(yīng)的頁面兀素e_alibaba_Search時(shí),接口子模塊122將e_alibaba_searchbar和e_alibaba_search_button 生成一個(gè)中間件接口,命名為 e_albaba_search。這樣,通過 e_alibaba_search.searchbar 就可以訪問至[I上述 e_alibaba_searchbar。
[0182]匹配模塊13,用于接收待測(cè)試的頁面元素信息,并查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口;
[0183]本實(shí)施例中匹配模塊13具體可以包括以下子模塊:
[0184]計(jì)算子模塊131,用于計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度;
[0185]具體地,計(jì)算子模塊131首先獲取所述待測(cè)試的頁面元素信息中的頁面元素名稱,并獲取所述中間件接口的名稱;
[0186]例如,待測(cè)試的頁面元素信息中頁面元素的名稱為search_bar,中間件接口的名稱分別為:Search、click 和 input 。
[0187]計(jì)算子模塊131其次將所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的所
有字符轉(zhuǎn)換為小寫/大寫字符;
[0188]以轉(zhuǎn)換為小寫字符為例進(jìn)行說明,待測(cè)試的頁面元素名稱為searchjDar,中間件接口的名稱分別為:search、click和input。
[0189]計(jì)算子模塊131計(jì)算所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的相同的小寫/大寫字符的個(gè)數(shù),記為最長(zhǎng)匹配串;
[0190]同樣以計(jì)算相同小寫字符為例進(jìn)行說明,search_bar與search的相同小寫字符個(gè)數(shù)為6個(gè),search_bar與click的相同小寫字符個(gè)數(shù)為I個(gè),search_bar與input的相同小寫字符個(gè)數(shù)為O個(gè)。
[0191]最長(zhǎng)匹配串即為具有相同的小寫字符的最多個(gè)數(shù),在本實(shí)施例中為6個(gè),也就說,6為最長(zhǎng)匹配串。
[0192]計(jì)算子模塊131將所述最長(zhǎng)匹配串與所述中間件接口名稱的小寫/大寫字符的個(gè)數(shù)做除法運(yùn)算,將所述除法運(yùn)算的商作為所述待測(cè)試的頁面元素信息與所述中間件接口的匹配度。
[0193]計(jì)算子模塊13將最長(zhǎng)匹配串6和對(duì)應(yīng)的中間件接口名稱Search_bar的小寫字符search_bar的個(gè)數(shù)9做除法運(yùn)算,商為?作為待測(cè)試的頁面元素search_bar與中間件接口Search_bar的匹配度。
[0194]查找子模塊132,用于根據(jù)所述匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口。
[0195]具體地,查找子模塊132判斷所述待測(cè)試的頁面元素信息與各中間件接口的匹配度中最大匹配度是否高于或等于預(yù)設(shè)的閾值;
[0196]例如,預(yù)設(shè)的閾值可以為0.3,當(dāng)然也可以設(shè)置為其他數(shù)值,只要小于I即可。
[0197]當(dāng)所述最大匹配度高于或等于預(yù)設(shè)的閾值時(shí),查找子模塊132將所述最大匹配度對(duì)應(yīng)的中間件接口作為所述待測(cè)試的頁面元素信息匹配得到的中間件接口 ;當(dāng)所述最大匹配度低于預(yù)設(shè)的閾值時(shí),匹配失敗。
[0198]本實(shí)施例中上述待測(cè)試的頁面元素search_bar與中間件接口 Searchr的匹配度為*,大于預(yù)設(shè)的閾值0.3,因此與待測(cè)試的頁面元素search_bar相匹配的中間件接口為Search0
[0199]測(cè)試模塊14,用于調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
[0200]具體地,測(cè)試模塊14可以用于接收針對(duì)所述待測(cè)試的頁面元素信息的測(cè)試參數(shù),將所述測(cè)試參數(shù)傳入所述匹配到的中間件接口,所述匹配到的中間件接口通過調(diào)用對(duì)應(yīng)的中間件變量對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
[0201]本實(shí)施例中變量生成模塊通過解析網(wǎng)頁來識(shí)別頁面元素,不需要手動(dòng)識(shí)別,而且變量生成模塊根據(jù)網(wǎng)頁中的頁面元素自動(dòng)生成中間件變量,然后接口生成模塊根據(jù)中間件變量自動(dòng)生成中間件接口,然后匹配模塊通過查找與待測(cè)試頁面元素西信息相匹配的中間件接口,測(cè)試模塊調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。因此,上述網(wǎng)站自動(dòng)化測(cè)試系統(tǒng)可以自動(dòng)識(shí)別頁面元素,不需要測(cè)試人員手動(dòng)選擇頁面元素逐一進(jìn)行識(shí)別,因此提高了頁面元素的識(shí)別效率,進(jìn)而提高了自動(dòng)化測(cè)試的效率。
[0202]對(duì)于上述網(wǎng)站自動(dòng)化測(cè)試的系統(tǒng)實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見圖1所示方法實(shí)施例的部分說明即可。
[0203]參照?qǐng)D4,其示出了本申請(qǐng)實(shí)施例所述一種網(wǎng)站自動(dòng)化測(cè)試系統(tǒng)的結(jié)構(gòu)框圖,本實(shí)施例具體可以包括以下模塊:
[0204]變量生成模塊21、接口生成模塊22、匹配模塊23、判斷模塊24、測(cè)試模塊25和修正模塊26,其中:
[0205]變量生成模塊21,用于對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量;
[0206]本實(shí)施例中變量生成模塊21具體可以將網(wǎng)頁解析成HTML DOM樹并遍歷所述HTMLDOM樹,所述網(wǎng)頁的一個(gè)頁面元素對(duì)應(yīng)所述HTML DOM樹的一個(gè)節(jié)點(diǎn),其中HTML DOM樹可以理解為網(wǎng)頁的應(yīng)用程序編程接口,HTML DOM樹將網(wǎng)頁中的各個(gè)元素都看作一個(gè)個(gè)對(duì)象,從而使網(wǎng)頁中的元素也可以被計(jì)算機(jī)語言獲取或編輯。
[0207]變量生成模塊21還可以依據(jù)所述HTML DOM樹的節(jié)點(diǎn)對(duì)應(yīng)的頁面元素生成中間件變量,其中,所述頁面元素的屬性信息作為所述中間件變量的屬性集。
[0208]變量生成模塊21具體生成中間件變量的過程可以參照?qǐng)D3所示的實(shí)施例的相關(guān)內(nèi)容,本實(shí)施例在此不做贅述。
[0209]接口生成模塊22,用于根據(jù)所述中間件變量生成中間件接口 ;
[0210]本實(shí)施例中接口生成模塊22可以首先遍歷所述各中間件變量的屬性集,將所述屬性集中相同屬性的中間件變量歸為一個(gè)哈希表,并以所述相同屬性對(duì)該哈希表命名,將所述相同屬性的中間件變量歸為該哈希表的成員;然后,接口生成模塊22依據(jù)所述HTMLDOM樹的層級(jí)關(guān)系,將所述哈希表中具有相同父節(jié)點(diǎn)的哈希表生成一個(gè)中間件接口,所述中間件接口以父節(jié)點(diǎn)對(duì)應(yīng)的頁面元素的任一屬性信息命名。
[0211]接口生成模塊22具體根據(jù)中間件變了生成中間件接口的例子可以參照?qǐng)D3實(shí)施例所述的相關(guān)內(nèi)容,本實(shí)施例在此不做贅述。
[0212]需要說明的是本實(shí)施例中接口生成模塊22也可以其他規(guī)則來生成中間件接口,本實(shí)施例對(duì)此不做限制。
[0213]匹配模塊23,用于接收待測(cè)試的頁面元素信息,并查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口;
[0214]本實(shí)施例中匹配模塊23可以用于計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度,然后根據(jù)所述匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接□。
[0215]判斷模塊24,用于判斷所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集是否一致;
[0216]判斷模塊24是為了防止網(wǎng)頁布局發(fā)生變化時(shí),中間件接口對(duì)應(yīng)的屬性信息沒有及時(shí)修改,而出現(xiàn)錯(cuò)誤匹配中間件接口的情況發(fā)生。匹配模塊23在匹配到中間件接口之后,判斷模塊24繼續(xù)判斷所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集是否一致,可以理解為一個(gè)反驗(yàn)證過程,來保證所匹配到的中間件接口準(zhǔn)確對(duì)應(yīng)所述待測(cè)試的頁面元素。
[0217]測(cè)試模塊25,用于當(dāng)所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集一致時(shí),調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作;
[0218]測(cè)試模塊25具體可以用于接收針對(duì)所述待測(cè)試的頁面元素信息的測(cè)試參數(shù),將所述測(cè)試參數(shù)傳入所述匹配到的中間件接口,所述匹配到的中間件接口通過調(diào)用對(duì)應(yīng)的中間件變量對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
[0219]修正模塊26,用于當(dāng)所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集不一致時(shí),根據(jù)所述待測(cè)試的頁面元素的屬性信息對(duì)所述匹配到的中間件接口的屬性集進(jìn)行修正。
[0220]具體地,當(dāng)所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集不一致時(shí),修正模塊26將所述匹配到的中間件接口的屬性集依據(jù)待測(cè)試的頁面元素的屬性信息進(jìn)行修正,保證匹配到的中間件接口的屬性集與所述待測(cè)試的頁面元素的屬性信
息一致。
[0221]本實(shí)施例通過變量生成模塊解析網(wǎng)頁來識(shí)別頁面元素,不需要手動(dòng)識(shí)別,而且變量生成模塊根據(jù)網(wǎng)頁中的頁面元素自動(dòng)生成中間件變量,然后接口生成模塊根據(jù)中間件變量自動(dòng)生成中間件接口,最后可以通過匹配模塊查找與待測(cè)試頁面元素西信息相匹配的中間件接口,測(cè)試模塊調(diào)用所述匹配到的中間件接口來執(zhí)行測(cè)試操作。上述網(wǎng)站自動(dòng)化測(cè)試系統(tǒng)可以自動(dòng)識(shí)別頁面元素,不需要測(cè)試人員手動(dòng)選擇頁面元素逐一進(jìn)行識(shí)別,因此提高了頁面元素的識(shí)別效率,進(jìn)而提高了自動(dòng)化測(cè)試的效率。而且,本實(shí)施例加入了修正模塊,保證了所述待測(cè)試頁面元素和所述中間件接口的準(zhǔn)確匹配,還可以動(dòng)態(tài)適應(yīng)頁面布局的變化。
[0222]對(duì)于上述網(wǎng)站自動(dòng)化測(cè)試的系統(tǒng)實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見圖2所示方法實(shí)施例的部分說明即可。
[0223]本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。
[0224]本領(lǐng)域技術(shù)人員易于想到的是:上述各個(gè)實(shí)施例的任意組合應(yīng)用都是可行的,故上述各個(gè)實(shí)施例之間的任意組合都是本申請(qǐng)的實(shí)施方案,但是由于篇幅限制,本說明書在此就不一一詳述了。
[0225]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
[0226]本申請(qǐng)是參照根據(jù)本申請(qǐng)實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
[0227]這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
[0228]這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
[0229]盡管已描述了本申請(qǐng)的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請(qǐng)范圍的所有變更和修改。
[0230]以上對(duì)本申請(qǐng)所提供的一種網(wǎng)站自動(dòng)化測(cè)試方法及自動(dòng)化測(cè)試系統(tǒng),進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。
【權(quán)利要求】
1.一種網(wǎng)站自動(dòng)化測(cè)試方法,其特征在于,包括: 對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量; 根據(jù)所述中間件變量生成中間件接口; 接收待測(cè)試的頁面元素信息,并查找與所述待測(cè)試的頁面元素信息相匹配的中間件接Π ; 調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量包括: 將網(wǎng)頁解析成HTML DOM樹并遍歷所述HTML DOM樹,所述網(wǎng)頁的一個(gè)頁面元素對(duì)應(yīng)所述HTML DOM樹的一個(gè)節(jié)點(diǎn); 依據(jù)所述HTML DOM樹的節(jié)點(diǎn)對(duì)應(yīng)的頁面元素生成中間件變量,其中,所述頁面元素的屬性信息作為所述中間件變量的屬性集。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述頁面元素的屬性信息包括以下任意一項(xiàng)或幾項(xiàng):所在網(wǎng)頁的地址信息、頁面元素的類別、頁面元素的名稱,頁面元素的id和頁面元素的值。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)中間件變量生成中間件接口包括:` 遍歷所述各中間件變量的屬性集,將所述屬性集中相同屬性的中間件變量歸為一個(gè)哈希表,并以所述相同屬性對(duì)該哈希表命名,將所述相同屬性的中間件變量歸為該哈希表的成員; 依據(jù)所述HTML DOM樹的層級(jí)關(guān)系,將所述哈希表中具有相同父節(jié)點(diǎn)的哈希表生成一個(gè)中間件接口,所述中間件接口以父節(jié)點(diǎn)對(duì)應(yīng)的頁面元素的任一屬性信息命名。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口包括: 計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度; 根據(jù)所述匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度包括: 獲取所述待測(cè)試的頁面元素信息中的頁面元素名稱,并獲取所述中間件接口的名稱;將所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的所有字符轉(zhuǎn)換為小寫/大寫字符; 計(jì)算所述待測(cè)試的頁面元素名稱和所述中間件接口名稱的相同的小寫/大寫字符的個(gè)數(shù),記為最長(zhǎng)匹配串; 將所述最長(zhǎng)匹配串與所述中間件接口名稱的小寫/大寫字符的個(gè)數(shù)做除法運(yùn)算,將所述除法運(yùn)算的商作為所述待測(cè)試的頁面元素信息與所述中間件接口的匹配度。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述根據(jù)所述中間件接口的匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口包括: 判斷所述待測(cè)試的頁面元素信息與各中間件接口的匹配度中最大匹配度是否高于或等于預(yù)設(shè)的閾值;當(dāng)所述最大匹配度高于或等于預(yù)設(shè)的閾值時(shí),將所述最大匹配度對(duì)應(yīng)的中間件接口作為所述待測(cè)試的頁面元素信息匹配得到的中間件接口; 當(dāng)所述最大匹配度低于預(yù)設(shè)的閾值時(shí),匹配失敗。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作包括: 接收針對(duì)所述待測(cè)試的頁面元素信息的測(cè)試參數(shù),將所述測(cè)試參數(shù)傳入所述匹配到的中間件接口,所述匹配到的中間件接口通過調(diào)用對(duì)應(yīng)的中間件變量對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
9.根據(jù)權(quán)利要求2所述的方法,其特征在于,還包括: 判斷所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集是否一致; 若所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集一致,則調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作; 若所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集不一致,則根據(jù)所述待測(cè)試的頁面元素的屬性信息對(duì)所述匹配到的中間件接口的屬性集進(jìn)行修正。
10.一種網(wǎng)站自動(dòng)化測(cè)試系統(tǒng),其特征在于,包括: 變量生成模塊,用于對(duì)網(wǎng)頁進(jìn)行解析,并對(duì)應(yīng)網(wǎng)頁中的頁面元素生成中間件變量; 接口生成模塊,用于根據(jù)所述中間件變量生成中間件接口 ; 匹配模塊,用于接收待測(cè)試的頁面元素信息,并查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口; 測(cè)試模塊,用于調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作。
11.根據(jù)權(quán)利要求10所述的系統(tǒng),其特征在于,所述變量生成模塊包括: 解析子模塊,用于將網(wǎng)頁解析成HTML DOM樹并遍歷所述HTML DOM樹,所述網(wǎng)頁的一個(gè)頁面元素對(duì)應(yīng)所述HTML DOM樹的一個(gè)節(jié)點(diǎn); 變量子模塊,用于依據(jù)所述HTML DOM樹的節(jié)點(diǎn)對(duì)應(yīng)的頁面元素生成中間件變量,其中,所述頁面元素的屬性信息作為所述中間件變量的屬性集。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述頁面元素的屬性信息包括以下任意一項(xiàng)或幾項(xiàng):所在網(wǎng)頁的地址信息、頁面元素的類別、頁面元素的名稱,頁面元素的id和頁面元素的值。
13.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述接口生成模塊包括: 遍歷子模塊,用于遍歷所述各中間件變量的屬性集,將所述屬性集中相同屬性的中間件變量歸為一個(gè)哈希表,并以所述相同屬性對(duì)該哈希表命名,將所述相同屬性的中間件變量歸為該哈希表的成員; 接口子模塊,用于依據(jù)所述HTML DOM樹的層級(jí)關(guān)系,將所述哈希表中具有相同父節(jié)點(diǎn)的哈希表生成一個(gè)中間件接口,所述中間件接口以父節(jié)點(diǎn)對(duì)應(yīng)的頁面元素的任一屬性信息命名。
14.根據(jù)權(quán)利要求10所述的系統(tǒng),其特征在于,所述匹配模塊包括: 計(jì)算子模塊,用于計(jì)算所述待測(cè)試的頁面元素信息與各中間件接口的匹配度; 查找子模塊,用于根據(jù)所述 匹配度查找與所述待測(cè)試的頁面元素信息相匹配的中間件接口。
15.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,還包括: 判斷模塊,用于判斷所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集是否一致; 所述測(cè)試模塊,還用于當(dāng)所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集一致時(shí),調(diào)用匹配到的中間件接口對(duì)所述待測(cè)試的頁面元素執(zhí)行測(cè)試操作; 修正模塊,用于當(dāng)所述待測(cè)試的頁面元素的屬性信息與所述匹配到的中間件接口的屬性集不一致時(shí),根據(jù)所述待測(cè)試的頁面元素的屬性信息對(duì)所述匹配到的中間件接口的屬性集進(jìn)行修正。`
【文檔編號(hào)】H04L12/26GK103873318SQ201210553732
【公開日】2014年6月18日 申請(qǐng)日期:2012年12月18日 優(yōu)先權(quán)日:2012年12月18日
【發(fā)明者】栗志果 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1