欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于jvm的測試覆蓋率統(tǒng)計方法及系統(tǒng)的制作方法

文檔序號:6492674閱讀:132來源:國知局
基于jvm的測試覆蓋率統(tǒng)計方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及軟件測試【技術領域】,提供了一種基于JVM的測試覆蓋率統(tǒng)計方法及系統(tǒng)。該方法包括步驟:S1.在JVM啟動的同時將需要統(tǒng)計的類名作為參數(shù)傳入;S2.判斷虛擬機載入的類是否需要注入,若需要則執(zhí)行步驟S3,否則直接執(zhí)行步驟S4;S3.對需要統(tǒng)計的類進行字節(jié)碼操作并回寫入虛擬機;S4.虛擬機正常執(zhí)行類操作,自動記錄執(zhí)行中的統(tǒng)計信息;S5.在虛擬機退出時,根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果。本發(fā)明在不改變原有程序結(jié)構的基礎上進行字節(jié)碼注入,以黑盒測試的方式即可獲得代碼行級別的測試覆蓋率,可對軟件代碼的測試覆蓋度進行量化評估,為測試的充分性及測試用例的執(zhí)行效率提供了有力的參考指標。
【專利說明】基于JVM的測試覆蓋率統(tǒng)計方法及系統(tǒng)
【技術領域】
[0001]本發(fā)明涉及軟件測試【技術領域】,特別涉及一種基于JVM的測試覆蓋率統(tǒng)計方法及系統(tǒng)。
【背景技術】
[0002]計算機軟件程序主要由人工開發(fā)完成,通常還會由多名開發(fā)人員共同完成,不可避免地會存在各類意想不到的錯誤。因此,軟件產(chǎn)品在正式發(fā)布前要經(jīng)過多次測試和修改,軟件測試的最根本目的就是在軟件產(chǎn)品發(fā)布前盡可能多地發(fā)現(xiàn)軟件中的缺陷,以保證正式產(chǎn)品的質(zhì)量。其中黑盒測試是從用戶角度出發(fā),把程序看作一個不能打開的黑盒子,在完全不考慮程序內(nèi)部結(jié)構和內(nèi)部特性的情況下,對程序的輸入輸出進行測試,黑盒測試主要針對軟件界面和軟件功能進行測試,是最實用的軟件測試方式之一。
[0003]現(xiàn)有的軟件測試理論已經(jīng)基本成熟,絕大多數(shù)測試方式均可以通過自動手段來實現(xiàn)測試過程,對于黑盒測試來說,如果能為每個測試過程選擇適當?shù)臏y試用例,可有效地設計出高效的自動測試過程。但是,隨著待測試軟件系統(tǒng)的日益龐大,測試的工作量呈指數(shù)級增長,給軟件黑盒測試工作帶來了很多新的問題。由于黑盒測試只針對需求創(chuàng)建測試用例做外部的覆蓋測試,在需求不詳細的情況下,有極大可能測試用例無法涵蓋全部軟件代碼,造成測試不完備。在測試不完備的情況下,極易漏檢系統(tǒng)BUG,給產(chǎn)品質(zhì)量帶來許多不確定性的隱患。要保證測試的充分性和完備性,只有采取各種措施提高測試用例的代碼覆蓋率。
[0004]但現(xiàn)有技術中,黑盒測試并不考慮程序內(nèi)部結(jié)構和內(nèi)部特性,無法像白盒測試一樣直接針對源代碼級別進行處理,只能在測試之后根據(jù)收集的結(jié)果數(shù)據(jù)進行后驗的結(jié)果推算,難以直接獲得測試的代碼覆蓋率數(shù)據(jù),推算結(jié)果也經(jīng)常存在較大偏差。沒有代碼覆蓋率數(shù)據(jù)的情況下顯然不可能正確評估測試的充分性和完備性,更談不上對其進行改進。而如果放棄黑盒測試只依賴于白盒測試,又會使測試成本過于昂貴,效率低下。

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

[0005](一)要解決的技術問題
[0006]為了解決現(xiàn)有技術中無法直接獲得黑盒測試代碼覆蓋率數(shù)據(jù)的問題,本發(fā)明提供了一種基于JVM的測試覆蓋率統(tǒng)計方法及系統(tǒng)。
[0007](二)技術方案
[0008]為解決上述技術問題,本發(fā)明采用如下的技術方案實施:
[0009]首先,本發(fā)明提供一種基于JVM的測試覆蓋率統(tǒng)計方法,所述方法包括步驟:
[0010]SI,在JVM啟動的同時將需要統(tǒng)計的類名作為參數(shù)傳入;
[0011]S2,判斷虛擬機載入的類是否需要注入,若需要則執(zhí)行步驟S3,否則直接執(zhí)行步驟S4;
[0012]S3,對需要統(tǒng)計的類進行字節(jié)碼操作并回寫入虛擬機;
[0013]S4,虛擬機正常執(zhí)行類操作,自動記錄執(zhí)行中的統(tǒng)計信息;[0014]S5,在虛擬機退出時,根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果。
[0015]優(yōu)選地,步驟S5中,如果有多次執(zhí)行結(jié)果,則合并計算多次執(zhí)行結(jié)果后輸出。
[0016]優(yōu)選地,步驟SI中,所述需要統(tǒng)計的類名以正則表達式的形式作為參數(shù)傳入。
[0017]優(yōu)選地,步驟S2中,通過類名進行比較,判斷載入的類是否需要進行字節(jié)碼操作。
[0018]優(yōu)選地,步驟S3中,所述字節(jié)碼操作包括:對字節(jié)碼進行解析、注入處理;獲得包、類、方法直接的結(jié)構關系記錄在系統(tǒng)內(nèi)存中。
[0019]優(yōu)選地,所述對字節(jié)碼進行解析處理包括:識別類文件字節(jié)碼中的可執(zhí)行代碼,將代碼以行為單位區(qū)分;
[0020]所述對字節(jié)碼進行注入處理包括:在識別出的可執(zhí)行代碼的每一行之后插入統(tǒng)計該行代碼被執(zhí)行狀況的代碼。
[0021]優(yōu)選地,步驟S5中,所述根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果的方法為:根據(jù)步驟S4記錄的統(tǒng)計信息和步驟S3獲得的結(jié)構關系進行計算,得到覆蓋率數(shù)據(jù)并輸出結(jié)果。
[0022]優(yōu)選地,步驟S4中,在自動記錄執(zhí)行中的統(tǒng)計信息之后,該方法還包括:將執(zhí)行信息按包、類、方法分層統(tǒng)計記錄。
[0023]另一方面,本發(fā)明還同時提供一種基于JVM的測試覆蓋率統(tǒng)計系統(tǒng),所述系統(tǒng)包括:
[0024]傳入模塊,用于在JVM啟動的同時將需要統(tǒng)計的類名作為參數(shù)傳入;
[0025]注入判斷模塊,用于判斷虛擬機載入的類是否需要注入,若需要則交由字節(jié)碼操作模塊處理,否則直接交由執(zhí)行模塊處理;
[0026]字節(jié)碼操作模塊,用于對需要統(tǒng)計的類進行字節(jié)碼操作并回寫入虛擬機;
[0027]執(zhí)行模塊,用于使虛擬機正常執(zhí)行類操作,自動記錄執(zhí)行中的統(tǒng)計信息;
[0028]計算輸出模塊,用于在虛擬機退出時,根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果。
[0029]優(yōu)選地,所述計算輸出模塊中還包括:合并計算模塊,用于在有多次執(zhí)行結(jié)果時,合并計算多次執(zhí)行結(jié)果后輸出。
[0030](三)有益效果
[0031]在本發(fā)明的技術方案中,在不改變原有程序結(jié)構的基礎上進行字節(jié)碼注入,執(zhí)行過程中進行動態(tài)統(tǒng)計,以黑盒測試的方式即可獲得代碼行級別的測試覆蓋率,因而可對軟件每個版本及整體代碼的測試覆蓋度進行量化評估,為測試的充分性及測試用例的執(zhí)行效率提供了有力的參考指標。
【專利附圖】

【附圖說明】
[0032]圖1為本發(fā)明中基于JVM的測試覆蓋率統(tǒng)計方法的流程示意圖;
[0033]圖2為本發(fā)明的一個實施例中java示例的類代碼;
[0034]圖3為本發(fā)明的一個實施例中虛擬機執(zhí)行情況示意圖;
[0035]圖4為本發(fā)明的一個實施例中XML格式記錄的輸出結(jié)果示意圖;
[0036]圖5為本發(fā)明的一個實施例中輸出結(jié)果的HTML文檔展示內(nèi)容示意圖。
【具體實施方式】
[0037]下面將結(jié)合各附圖對本發(fā)明實施例中的技術方案進行清楚、完整的描述,顯然,所描述的實施例是本發(fā)明的一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0038]黑盒測試由于自動化程度高,無需人工閱讀分析源代碼,加上其從用戶角度出發(fā)進行測試,是相當高效、易理解和實用的測試方式,因而是目前軟件測試中必不可少的一種測試方式。但如上所述,黑盒測試也存在著一些明顯的缺陷,比如無法獲知測試代碼覆蓋率,不能保證測試的充分性和完備性,在需求不詳細的情況下極易漏檢系統(tǒng)BUG,更無法有針對性地調(diào)整測試用例以提高測試完備性。
[0039]鑒于上述問題的根源在于現(xiàn)有技術中不存在用于黑盒測試的代碼覆蓋率統(tǒng)計方案,本發(fā)明的首要目的就是提供一種測試覆蓋率統(tǒng)計方法,更進一步地,該方法是基于JVM(java虛擬機,在本發(fā)明中簡稱為“虛擬機”)的測試覆蓋率統(tǒng)計方法。在本發(fā)明的實施例中,如圖1所示,該方法具體包括步驟:
[0040]SI,在JVM啟動的同時將需要統(tǒng)計的類名作為參數(shù)傳入;
[0041]S2,判斷虛擬機載入的類是否需要注入,若需要則執(zhí)行步驟S3,否則直接執(zhí)行步驟S4;
[0042]S3,對需要統(tǒng)計的類進行字節(jié)碼操作并回寫入虛擬機;
[0043]該步驟中,需要統(tǒng)計的類即為步驟S2中的判斷結(jié)果為需要注入的類。
[0044]S4,虛擬機正常執(zhí)行類操作,自動記錄執(zhí)行中的統(tǒng)計信息;
[0045]S5,在虛擬機退出時,根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果。
[0046]其中,在上述方法的步驟S5中,如果有多次執(zhí)行結(jié)果,即步驟S4中虛擬機正常執(zhí)行類操作時多次執(zhí)行某些代碼,則在步驟S5中要合并計算多次執(zhí)行結(jié)果后輸出。輸出結(jié)果可以采用XML格式保存,最終的結(jié)果以HTML或XML文檔形式展示給測試人員。測試人員根據(jù)該結(jié)果可以對測試效果有一個全局的把控,因而能準確了解測試是否完備,并根據(jù)情況進行衡量,判斷是否適當補充部分測試用例以改善測試。
[0047]下面更進一步地以一段java程序為例具體說明本發(fā)明方法的各個步驟是如何實現(xiàn)的。如圖2所示的是一個基本的HelloWorld類,其中定義了一個布爾值,利用if語句,判斷為真的執(zhí)行一次,判斷為假的沒有執(zhí)行;同時采用for語句循環(huán)10次。
[0048]具體地,步驟SI中,本發(fā)明提供的方法隨JVM —同啟動,將需要統(tǒng)計的類名(即上述HelloWorld類)以正則表達式的形式作為參數(shù)傳入。
[0049]步驟S2中,判斷虛擬機載入的類是否需要注入的方法為:從虛擬機接口獲得載入的類,通過類名進行比較,判斷虛擬機載入的類是否需要注入,即判斷載入的類是否需要進行字節(jié)碼操作。具體地,依據(jù)待測試產(chǎn)品的包名進行判斷,來區(qū)分是java系統(tǒng)包還是待測試包,如果是待測試包,則其中的載入類需要進行字節(jié)碼操作,執(zhí)行步驟S3 ;如果是java系統(tǒng)包,則其中的載入類無需進行字節(jié)碼操作,直接執(zhí)行步驟S4。圖2示例的類屬于testpackage包,是待測試包,因而需要進行字節(jié)碼操作。
[0050]步驟S3中,對需要統(tǒng)計的類所進行的字節(jié)碼操作包括:獲得載入類的字節(jié)碼;對字節(jié)碼進行解析、注入處理;獲得包、類、方法直接的結(jié)構關系記錄在系統(tǒng)內(nèi)存中。上述的對字節(jié)碼進行解析、注入處理與獲得包、類、方法直接的結(jié)構關系記錄在系統(tǒng)內(nèi)存中這兩種字節(jié)碼操作可以同時執(zhí)行,也可以先后執(zhí)行。然后,將處理好的字節(jié)傳回虛擬機。[0051]具體地,對字節(jié)碼進行解析處理包括:識別類文件字節(jié)碼中的可執(zhí)行代碼;將代碼以行為單位區(qū)分。解析處理可以采用現(xiàn)有的字節(jié)碼解析工具實現(xiàn),比如通過對字節(jié)碼的反編譯獲得代碼的行號。而對字節(jié)碼進行注入處理則包括:在識別出的可執(zhí)行代碼的每行之后插入統(tǒng)計該行代碼被執(zhí)行狀況的代碼,比如插入一段計數(shù)器代碼,在對應的該行代碼被執(zhí)行一次的同時執(zhí)行該計數(shù)器代碼,以計數(shù)器的累加值來統(tǒng)計該行代碼的被執(zhí)行次數(shù)。
[0052]仍以圖2的代碼為例,當該類的main方法中System, out.println ( “helloworld”)這一行代碼被反編譯后識別出其行號為14時,在其后立刻插入一個預定義的計數(shù)器方法_runs,比如_rUns(14,main,O V);該方法第一個參數(shù)是識別的代碼的原行號,第二個是方法名,第三個是形參加返回值。在插入方法代碼的同時系統(tǒng)會生成一個數(shù)據(jù)結(jié)構,這樣在上述第14行代碼(即System, out.println (“hello world”);)被執(zhí)行的同時該方法也會被調(diào)用執(zhí)行,而每被調(diào)用執(zhí)行一次計數(shù)器值加一,同時會自動向數(shù)據(jù)結(jié)構中記錄對應的行號、被執(zhí)行次數(shù)和方法名等,便于后續(xù)的分層統(tǒng)計。由于這樣的代碼具有很強的通用性,測試人員只需預先定義需要統(tǒng)計的類,隨后在每一行可執(zhí)行代碼后進行自動注入上述計數(shù)器方法即可,大大提高了統(tǒng)計效率和測試的自動化程度。
[0053]步驟S4中,虛擬機正常執(zhí)行類操作,使程序以原有方式正常運行,在自動記錄執(zhí)行中的統(tǒng)計信息之后,由于測試包的載入類中注入了字節(jié)碼,在執(zhí)行字節(jié)碼時就可以獲得代碼執(zhí)行情況的相關信息,即獲得執(zhí)行信息,因此,該步驟還包括:將獲得的執(zhí)行信息按包、類、方法分層統(tǒng)計記錄。執(zhí)行情況的一個示例如圖3所示。
[0054]步驟S5中,在虛擬機退出時,要根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果,這里,根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果的方法可以為:根據(jù)步驟S4記錄的統(tǒng)計信息和步驟S3獲得的結(jié)構關系進行計算,得到覆蓋率數(shù)據(jù)并輸出結(jié)果。更進一步地,代碼的結(jié)構關系通常邏輯分層為包一類一方法一行,即一個包中有不同的類文件,類文件由方法組成,方法由代碼行組成;這樣,計算的方法覆蓋率即等于方法執(zhí)行的行/方法總行數(shù),類覆蓋率即等于類中所有方法執(zhí)行的行之和/類中所有方法總行數(shù),包覆蓋率即等于包中所有類執(zhí)行的行之和/包中所有類的總行數(shù)。
[0055]XML格式的一個輸出結(jié)果示例如圖4所示,其中,coverage項中,line-rate表示覆蓋度、lines-covered表示執(zhí)行的行數(shù)、lines-valid表示有效行、version表示工具版本、timestamp表不生成時間;package項中,name表不包名、line-rate表不覆蓋度;class項中,name表示類名、filename表示類所處的文件名、line-rate表示覆蓋度;method項中,name表示方法名、signature表示形參加返回值(一個方法的唯一'I"生方法名、形參共同決定)、line-rate表示覆蓋度;line項中,number表示文件中的行號、run表示執(zhí)行的次數(shù)。根據(jù)圖4的結(jié)果,生產(chǎn)的HTML文檔的展示示例如圖5所示,根據(jù)該展示,測試人員可以直觀地得到測試覆蓋率和代碼執(zhí)行情況,從而可以有針對性地進行調(diào)整以保證測試的完備性。
[0056]此外,本領域普通技術人員可以理解,實現(xiàn)上述實施例方法中的全部或部分步驟是可以通過程序來指令相關的硬件來完成,所述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,包括上述實施例方法的各步驟,而所述的存儲介質(zhì)可以是:R0M/RAM、磁碟、光盤、存儲卡等。因此,與本發(fā)明的方法相對應的,本發(fā)明還同時包括一種基于JVM的測試覆蓋率統(tǒng)計系統(tǒng),該系統(tǒng)包括:
[0057]傳入模塊,用于在JVM啟動的同時將需要統(tǒng)計的類名作為參數(shù)傳入;[0058]注入判斷模塊,用于判斷虛擬機載入的類是否需要注入,若需要則交由字節(jié)碼操作模塊處理,否則直接交由執(zhí)行模塊處理;
[0059]字節(jié)碼操作模塊,用于對需要統(tǒng)計的類進行字節(jié)碼操作并回寫入虛擬機;
[0060]執(zhí)行模塊,用于使虛擬機正常執(zhí)行類操作,自動記錄執(zhí)行中的統(tǒng)計信息;
[0061]計算輸出模塊,用于在虛擬機退出時,根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果。
[0062]在本發(fā)明提出的基于JVM的測試覆蓋率統(tǒng)計系統(tǒng)中,計算輸出模塊中還可以包括合并計算模塊,該合并計算模塊用于在有多次執(zhí)行結(jié)果時,合并計算多次執(zhí)行結(jié)果后輸出。
[0063]綜上所述,在本發(fā)明的技術方案中,在不改變原有程序結(jié)構的基礎上進行字節(jié)碼注入,執(zhí)行過程中進行動態(tài)統(tǒng)計,以黑盒測試的方式即可獲得代碼行級別的測試覆蓋率,因而可對軟件每個版本及整體代碼的測試覆蓋度進行量化評估,為測試的充分性及測試用例的執(zhí)行效率提供了有力的參考指標。此外,本發(fā)明對系統(tǒng)的性能影響小,幾乎不影響正常測試過程;由于版本更替時不需要做任何額外操作,部署極為方便,具有很強的實用性。
[0064]以上實施方式僅用于說明本發(fā)明,而并非對本發(fā)明的限制,有關【技術領域】的普通技術人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護范圍應由權利要求限定。
【權利要求】
1.一種基于JVM的測試覆蓋率統(tǒng)計方法,其特征在于,所述方法包括步驟: SI,在JVM啟動的同時將需要統(tǒng)計的類名作為參數(shù)傳入; S2,判斷虛擬機載入的類是否需要注入,若需要則執(zhí)行步驟S3,否則直接執(zhí)行步驟S4 ; S3,對需要統(tǒng)計的類進行字節(jié)碼操作并回寫入虛擬機; S4,虛擬機正常執(zhí)行類操作,自動記錄執(zhí)行中的統(tǒng)計信息; S5,在虛擬機退出時,根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果。
2.根據(jù)權利要求1所述的方法,其特征在于,步驟S5中,如果有多次執(zhí)行結(jié)果,則合并計算多次執(zhí)行結(jié)果后輸出。
3.根據(jù)權利要求1所述的方法,其特征在于,步驟SI中,所述需要統(tǒng)計的類名以正則表達式的形式作為參數(shù)傳入。
4.根據(jù)權利要求1所述的方法,其特征在于,步驟S2中,通過類名進行比較,判斷載入的類是否需要進行字節(jié)碼操作。
5.根據(jù)權利要求1所述的方法,其特征在于,步驟S3中,所述字節(jié)碼操作包括:對字節(jié)碼進行解析、注入處理;獲得包、類、方法直接的結(jié)構關系記錄在系統(tǒng)內(nèi)存中。
6.根據(jù)權利要求5所述的方法,其特征在于, 所述對字節(jié)碼進行解析處理包括:識別類文件字節(jié)碼中的可執(zhí)行代碼,將代碼以行為單位區(qū)分; 所述對字節(jié)碼進行注入處理包括:在識別出的可執(zhí)行代碼的每一行之后插入統(tǒng)計該行代碼被執(zhí)行狀況的代碼。
7.根據(jù)權利要求5所述的方法,其特征在于,步驟S5中,所述根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果的方法為:根據(jù)步驟S4記錄的統(tǒng)計信息和步驟S3獲得的結(jié)構關系進行計算,得到覆蓋率數(shù)據(jù)并輸出結(jié)果。
8.根據(jù)權利要求1所述的方法,其特征在于,步驟S4中,在自動記錄執(zhí)行中的統(tǒng)計信息之后,該方法還包括:將執(zhí)行信息按包、類、方法分層統(tǒng)計記錄。
9.一種基于JVM的測試覆蓋率統(tǒng)計系統(tǒng),其特征在于,所述系統(tǒng)包括: 傳入模塊,用于在JVM啟動的同時將需要統(tǒng)計的類名作為參數(shù)傳入; 注入判斷模塊,用于判斷虛擬機載入的類是否需要注入,若需要則交由字節(jié)碼操作模塊處理,否則直接交由執(zhí)行模塊處理; 字節(jié)碼操作模塊,用于對需要統(tǒng)計的類進行字節(jié)碼操作并回寫入虛擬機; 執(zhí)行模塊,用于使虛擬機正常執(zhí)行類操作,自動記錄執(zhí)行中的統(tǒng)計信息; 計算輸出模塊,用于在虛擬機退出時,根據(jù)統(tǒng)計信息計算覆蓋率并輸出結(jié)果。
10.根據(jù)權利要求9所述的系統(tǒng),其特征在于,所述計算輸出模塊中還包括:合并計算模塊,用于在有多次執(zhí)行結(jié)果時,合并計算多次執(zhí)行結(jié)果后輸出。
【文檔編號】G06F11/36GK103870383SQ201210532089
【公開日】2014年6月18日 申請日期:2012年12月11日 優(yōu)先權日:2012年12月11日
【發(fā)明者】吳旭, 胡驥 申請人:航天信息股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
兰溪市| 九寨沟县| 东乡县| 含山县| 博罗县| 塔河县| 嵩明县| 阳春市| 泸西县| 周宁县| 尖扎县| 乌鲁木齐县| 灯塔市| 浙江省| 武陟县| 莱州市| 石台县| 平罗县| 江川县| 阿瓦提县| 长汀县| 托克托县| 绍兴县| 长泰县| 诸城市| 昭平县| 淮阳县| 西城区| 镇坪县| 夹江县| 兴国县| 手游| 丹棱县| 水富县| 六安市| 保靖县| 台中市| 青龙| 墨脱县| 大兴区| 株洲市|