• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      面向服務(wù)器集群的自動化測試監(jiān)控平臺的研究和實現(xiàn)

      2014-10-14 09:28:50黃志球
      計算機(jī)與現(xiàn)代化 2014年9期
      關(guān)鍵詞:測試環(huán)境結(jié)點部署

      汪 旺,夏 鳳,陳 哲,黃志球

      (1.南京航空航天大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 南京 210016;2.阿里巴巴(中國)網(wǎng)絡(luò)技術(shù)有限公司,浙江 杭州 310099)

      0 引言

      隨著測試流程的不斷規(guī)范以及軟件測試技術(shù)[1]的進(jìn)一步細(xì)化,軟件測試自動化[2,18,20]已經(jīng)日益成為一種不可忽視的技術(shù)。能否借助該技術(shù)以及如何借助它規(guī)范測試流程,提高特定測試活動的效率,是一個需要研究的重要問題。

      軟件自動化測試使用機(jī)器自動進(jìn)行測試執(zhí)行[3]和測試結(jié)果判斷,其特點是在測試中部分使用了程序或是機(jī)器的能力,目的在于減少資源消耗、擴(kuò)大測試范圍和充分利用機(jī)器與程序的能力。軟件自動化測試技術(shù)的出現(xiàn)顯著提高了測試工作[4]的效率。

      目前,軟件測試自動化[5]的研究領(lǐng)域主要集中在軟件測試流程的自動化管理[6]以及動態(tài)測試[7]的自動化(如單元測試、功能測試以及性能測試方面)。與手工測試相比,測試自動化的優(yōu)勢明顯。首先,自動化測試可以提高測試效率,測試人員更加專注于新的測試模塊的建立和開發(fā),從而提高測試覆蓋率;其次,自動化測試更便于測試資產(chǎn)的數(shù)字化管理,在整個測試生命周期內(nèi)可以復(fù)用測試資產(chǎn),這個特點在功能測試和回歸測試中尤其具有意義;此外,測試流程自動化管理可以使機(jī)構(gòu)的測試活動開展更加過程化。

      但是在服務(wù)器集群的環(huán)境下,自動化測試[8]相對脆弱,維護(hù)比較困難。以阿里巴巴旗下網(wǎng)站的開發(fā)測試平臺為例,目前的自動化測試環(huán)境管理存在諸多問題,嚴(yán)重制約了自動化測試效率的提升。因此,如何有效地對自動化測試進(jìn)行監(jiān)控管理,是一個重要而未被很好解決的問題。研究面向自動化測試的服務(wù)器管理監(jiān)控平臺能夠加強(qiáng)對大規(guī)模集群測試服務(wù)器的統(tǒng)一管理和監(jiān)控,提高發(fā)現(xiàn)測試服務(wù)器問題的及時性和處理效率,增加出現(xiàn)問題后的自我恢復(fù)能力,從而釋放了大量的人力資源,大幅提升了工作效率。

      本文基于控制系統(tǒng)理論[19,21],結(jié)合軟件自動化測試的需求背景和Web開發(fā)框架[9]的原理及相關(guān)技術(shù),介紹阿里巴巴中文站的自動化研發(fā)協(xié)作平臺,在分析總結(jié)現(xiàn)有工作的基礎(chǔ)上,給出面向服務(wù)器集群的自動化測試監(jiān)控平臺的模塊設(shè)計和實現(xiàn),最后指出該平臺目前存在的問題,并對以后的研究工作進(jìn)行展望。

      1 阿里巴巴自動化研發(fā)協(xié)作平臺及測試環(huán)境

      AONE是阿里巴巴自動化研發(fā)協(xié)作平臺,系統(tǒng)地管理整個研發(fā)過程中的各項活動。在該平臺上,項目經(jīng)理創(chuàng)建項目并分配資源,開發(fā)人員提交代碼、編譯審計及打包,完成后公司內(nèi)部即時聊天工具阿里旺旺會發(fā)消息提醒測試人員接手測試,測試后進(jìn)行發(fā)布。倚天測試環(huán)境平臺是測試服務(wù)器管理與申請平臺,通過它可以申請需要的測試服務(wù)器。而通過守護(hù)神平臺則可以執(zhí)行自動化腳本并生成測試質(zhì)量報告。

      AONE上應(yīng)用編譯通過后會生成一個新的RPM(Red Hat Package Manager)包,是Red Hat的軟件包管理。RPM包里面包含可執(zhí)行的二進(jìn)制程序,該程序和Windows的軟件包中的.exe文件類似,是可執(zhí)行的。包中還包括程序運行時所需要的文件,并放到FTP(File Transfer Protocol)服務(wù)器上,根據(jù)AONE發(fā)出的消息,這個消息包括應(yīng)用名稱、發(fā)布需求的ID、生成的RPM包地址等,會在倚天測試環(huán)境平臺上申請測試服務(wù)器,搭建和部署相應(yīng)的測試環(huán)境,搭建完成后,就可以在守護(hù)神平臺上請求執(zhí)行自動化腳本,直至完成。

      運行自動化腳本[10]之前首先要部署好服務(wù)器,即在測試機(jī)上搭建測試環(huán)境。服務(wù)器部署方法經(jīng)歷從手動部署到一鍵部署腳本,再到watchdog監(jiān)控程序的過程。

      手動部署要求用戶手動輸入一系列的命令。首先要獲取應(yīng)用RPM包的FTP地址,然后申請一套測試服務(wù)器,并登錄測試服務(wù)器,獲取RPM包和最新的配置文件antx.properties,該配置文件存儲了測試服務(wù)器所需的配置項,將配置項注入RPM包,最后執(zhí)行啟動操作。這種方法比較耗時費力,效率低下。

      一鍵部署腳本可以在Linux測試服務(wù)器下自動獲取應(yīng)用的分支或RPM包,獲取最新的antx.properties(也可以選擇不更新),可以一鍵自動化部署和重啟。但也存在一些缺點,比如不支持中文提示,不檢查應(yīng)用名正確性,也不能夠正確處理某些異常情況。

      watchdog監(jiān)控程序是一款自動化測試服務(wù)器管理程序,通過HTTP請求來完成各種功能,但是目前這僅僅是一個維持基本功能的版本,有許多可以優(yōu)化的地方。它還沒有可視化的UI界面,如更新RPM包地址需要SQL語句來完成,除此之外,添加測試環(huán)境或更改配置都需要修改代碼,重新打包來完成,不夠方便。

      目前阿里巴巴三大測試的公共環(huán)境維護(hù)狀況如下:

      1)RPM包地址由watchdog監(jiān)控程序更新;

      2)自動化環(huán)境由watchdog監(jiān)控程序根據(jù)AONE發(fā)布情況部署;

      3)公共環(huán)境由one-click.sh(一鍵部署腳本)定時更新,依賴watchdog監(jiān)控程序數(shù)據(jù)庫;

      4)性能環(huán)境手動管理,不定期更新;

      5)機(jī)器由dragoon監(jiān)控,它是阿里巴巴自主研發(fā)的高性能、大并發(fā)的通用監(jiān)控系統(tǒng),主要是系統(tǒng)監(jiān)控,包括各種操作系統(tǒng),如 Linux、Solaris、Aix、Windows。它由運維中心進(jìn)行運營管理,只能監(jiān)控環(huán)境的性能指標(biāo)和系統(tǒng)關(guān)鍵信息。

      分析目前的測試環(huán)境,發(fā)現(xiàn)存在性能測試環(huán)境不能實現(xiàn)自動更新,主干RPM包管理機(jī)制不夠透明等問題。今后AONE實施自主發(fā)布,自動化環(huán)境需要實現(xiàn)大規(guī)模測試服務(wù)器群的部署,watchdog監(jiān)控程序在測試機(jī)上搭建測試環(huán)境已經(jīng)不能滿足需求,因此亟待對已有的服務(wù)器部署功能進(jìn)行擴(kuò)展,引入面向服務(wù)器集群的自動化測試監(jiān)控平臺,對自動化環(huán)境、公共環(huán)境、性能環(huán)境進(jìn)行統(tǒng)一的管理和監(jiān)控,并實現(xiàn)一定的環(huán)境自我恢復(fù)能力。

      2 面向服務(wù)器集群的自動化測試監(jiān)控平臺設(shè)計與實現(xiàn)

      2.1 系統(tǒng)整體設(shè)計

      面向服務(wù)器集群的自動化測試[11]監(jiān)控平臺主要有2方面的功能,即部署測試環(huán)境和監(jiān)控測試服務(wù)器。開發(fā)人員提交測試后,測試人員需要在大規(guī)模測試服務(wù)器群上安裝開發(fā)提供的RPM包,即部署測試環(huán)境,然后才能驗證所提交代碼的正確性。用戶在自己的計算機(jī)上通過瀏覽器訪問該測試監(jiān)控平臺,進(jìn)行申請測試服務(wù)器和部署環(huán)境等一系列操作。平臺服務(wù)器收到命令后會在相應(yīng)的測試服務(wù)器上部署環(huán)境,并返回部署狀態(tài)等監(jiān)控信息,從而使用戶通過瀏覽器就可以監(jiān)控和查看測試服務(wù)器的狀態(tài),系統(tǒng)功能如圖1所示。

      圖1 系統(tǒng)功能示意圖

      AONE上應(yīng)用編譯通過后會生成一個新的RPM包并放到FTP服務(wù)器上,然后AONE會觸發(fā)部署操作。部署控制模塊在相應(yīng)的測試服務(wù)器傳送和安裝Agent軟件。Agent的信號處理器收到部署環(huán)境的信號,就會調(diào)用one-click.sh腳本進(jìn)行環(huán)境部署。該腳本在每個執(zhí)行模塊運行到最后(成功或失敗)時,返回部署狀態(tài)和相關(guān)消息。部署狀態(tài)(成功、失敗或超時)會通過Agent的狀態(tài)提取器存儲在緩存中。環(huán)境監(jiān)控模塊則會獲取該狀態(tài),傳達(dá)給告警中心。如果部署失敗,監(jiān)控模塊會告訴部署控制模塊進(jìn)行重置。其中部署控制模塊是通過部署分發(fā)模塊來分配部署工作,該模塊包括一個應(yīng)用部署信息查詢列表,會周期性進(jìn)行刷新。

      部署測試環(huán)境時,首先會有調(diào)度中心按序?qū)γ恳粋€環(huán)境生成部署線程,其次通過部署計劃表查詢依賴順序,監(jiān)聽前置依賴的就緒狀態(tài),然后線程會給Agent下達(dá)部署命令,Agent會及時將部署狀態(tài)和消息反饋到調(diào)度中心,從而更新部署計劃列表中的環(huán)境部署狀態(tài)。環(huán)境部署模塊設(shè)計包括分發(fā)環(huán)境部署計劃、生成臨時部署計劃、應(yīng)用依賴關(guān)系管理、部署計劃列表和配置部署計劃設(shè)置。

      環(huán)境監(jiān)控模塊有查看環(huán)境監(jiān)控信息、配置環(huán)境監(jiān)控設(shè)置、環(huán)境監(jiān)控調(diào)度和環(huán)境監(jiān)控查詢遠(yuǎn)程服務(wù)4個部分。

      2.2 難點和解決方案

      2.2.1 環(huán)境監(jiān)控調(diào)度

      環(huán)境監(jiān)控調(diào)度是環(huán)境監(jiān)控模塊在獲取部署狀態(tài)后傳達(dá)給告警中心,如果部署失敗,監(jiān)控模塊會告訴部署控制模塊進(jìn)行重置的過程。

      在環(huán)境監(jiān)控調(diào)度中,新建或修改環(huán)境的健康度檢查配置并確認(rèn)保存時,監(jiān)聽服務(wù)立即被觸發(fā)。觸發(fā)監(jiān)聽服務(wù)的過程如圖2所示。

      圖2 激發(fā)監(jiān)聽服務(wù)的過程圖

      圖2中部署狀態(tài)是指環(huán)境部署計劃中的部署狀態(tài)正處于大于等于“安裝進(jìn)行中”,小于“啟動失敗”、“啟動成功”或“啟動超時”的中間狀態(tài)。

      觸發(fā)以后,監(jiān)聽器會給Agent發(fā)送健康檢查命令。Agent首先解析JSON(JavaScript Object Notation,一種輕量級的數(shù)據(jù)交換格式),解析檢查內(nèi)容,逐個執(zhí)行檢查內(nèi)容中的command內(nèi)容。然后,如果是進(jìn)程檢查,直接組裝檢查結(jié)果,并發(fā)送到Redis(一個key-value存儲系統(tǒng));如果是URL檢查,請求URL并對返回內(nèi)容進(jìn)行校驗,將校驗結(jié)果發(fā)送到Redis;如果是Service檢查,則直接執(zhí)行檢查命令啟動Service檢查程序,但要將監(jiān)控系統(tǒng)中心發(fā)送過來的JSON參數(shù)追加在命令后面,由Service檢查程序組裝檢查結(jié)果并發(fā)送到Redis。這里假設(shè)是Service檢查。

      接下來,Agent會周期性地調(diào)用Service檢查。對于用戶自定義的Service檢查,只要繼承AbstractServiceHealthChecker類,然后實現(xiàn)setRedisHost和check方法。打包成jar包后連二方庫(即所引用的公司內(nèi)部其他項目的代碼包)一起上傳到SVN(Subversion,是一個免費的、開放源碼的版本控制系統(tǒng))。圖3是Service檢查定制框類類圖[7]。

      圖3 Service檢查定制框類

      Service檢查完,將檢查結(jié)果存入Redis。監(jiān)聽器維護(hù)一個定時器,它會啟動一個定時任務(wù)用于周期性提取存儲在Redis中的環(huán)境檢查結(jié)果數(shù)據(jù),并將結(jié)果存入數(shù)據(jù)庫,如果部署失敗,會觸發(fā)失敗重新部署,環(huán)境監(jiān)控調(diào)度如圖4所示。

      圖4 環(huán)境監(jiān)控調(diào)度總體示意圖

      2.2.2 應(yīng)用搭建算法

      應(yīng)用搭建是指部署一套環(huán)境時可能需要搭建幾個應(yīng)用,而應(yīng)用之間存在一定的依賴關(guān)系,一旦一個應(yīng)用搭建不成功,就會影響到對它依賴的其他應(yīng)用。

      應(yīng)用依賴搭建算法描述如圖5所示。

      圖5 應(yīng)用依賴搭建方案

      該算法采用的是并行搭建,運用按層級關(guān)系搭建應(yīng)用的思想,避免了絕對的串行搭建會影響環(huán)境部署效率的問題。

      每個應(yīng)用搭建完成后發(fā)送觸發(fā)信息??偟拇罱〞r間為有向圖中最長路徑上每個應(yīng)用的搭建時間之和。每一組搭建應(yīng)用過程采用設(shè)定超時時間方式。

      應(yīng)用依賴搭建算法中,會對一個有向無環(huán)圖(Directed Acyclic Graph,DAG)進(jìn)行拓?fù)渑判颍?](Topological Sort)。拓?fù)渑判蚴菍⒂邢驘o環(huán)圖G中所有頂點排成一個線性序列,使得對圖中任意一對頂點u和v,若<u,v>∈E(G),則u在線性序列中出現(xiàn)在v之前。

      拓?fù)渑判蛩惴ǖ拿恳徊骄禽敵霎?dāng)前無后繼(即出度為0)的結(jié)點。對于一個DAG,按此方法輸出的序列是逆拓?fù)浯涡?。因此設(shè)置一個棧(或向量)T來保存輸出的結(jié)點序列,即可得到拓?fù)湫蛄?。若T是棧,則每當(dāng)輸出結(jié)點時,只需做入棧操作,排序完成時將棧中結(jié)點依次出棧即可得拓?fù)湫蛄小H鬞是向量,則將輸出的結(jié)點從T[n-1]開始依次從后往前存放,即可保證T中存儲的結(jié)點是拓?fù)湫蛄小?/p>

      拓?fù)渑判蛑饕a如下:

      函數(shù)topo()調(diào)用函數(shù)noSuccessors(),如果返回值為-1,表明該有向圖有環(huán),給出錯誤提示;否則,把返回的沒有后繼的結(jié)點保存到數(shù)組sortedArray中,并調(diào)用函數(shù)deleteVertex(int delVert)刪去該結(jié)點,并刪去從該結(jié)點發(fā)出的全部有向邊。

      重復(fù)以上步驟,直到有向圖中不存在沒有后繼的結(jié)點為止。最后輸出拓?fù)湫蛄小?/p>

      其中,函數(shù) noSuccessors()和函數(shù) deleteVertex(int delVert)代碼如下:

      函數(shù)noSuccessors()用于返回沒有后繼的結(jié)點。對有向圖中的每個結(jié)點檢查從該結(jié)點出發(fā)是否有邊,如果從某結(jié)點出發(fā)沒有邊,表明該結(jié)點沒有后繼,函數(shù)返回該結(jié)點;如果檢查完有向圖發(fā)現(xiàn)圖中每個結(jié)點都有邊,表明該有向圖中有環(huán),函數(shù)返回-1。

      函數(shù)deleteVertex(int delVert)用于刪去有向無環(huán)圖中沒有后繼的結(jié)點,并刪去從該結(jié)點發(fā)出的全部有向邊。

      3 結(jié)束語

      隨著測試流程的不斷規(guī)范以及軟件測試技術(shù)的進(jìn)一步細(xì)化,軟件測試自動化[12]日益成為一種不可忽視的技術(shù)。但目前自動化測試相對比較脆弱,維護(hù)起來比較困難,如何有效地對自動化測試進(jìn)行監(jiān)控管理[22-25],是一個重要問題。

      本文結(jié)合軟件自動化測試[13]的需求背景,對自動化測試[14]環(huán)境的服務(wù)器管理監(jiān)控進(jìn)行了初步的研究分析。筆者基于Web開發(fā)框架,在Eclipse平臺[15]上,開發(fā)出了一個面向自動化環(huán)境的服務(wù)器管理監(jiān)控平臺。該平臺主要有部署和監(jiān)控測試環(huán)境2大功能,加強(qiáng)了對測試服務(wù)器的統(tǒng)一管理和監(jiān)控。

      該平臺在阿里巴巴的實踐證明,它可以提高發(fā)現(xiàn)大規(guī)模集群測試服務(wù)器問題的及時性和處理效率,增加出現(xiàn)問題后的自我恢復(fù)能力,大幅提升測試[16]效率,并為進(jìn)一步設(shè)計有效的自動化管理方法提供了基礎(chǔ)。

      目前所做的工作中仍存在許多不足之處,在下一步的工作中,將對系統(tǒng)的高級功能,比如環(huán)境出錯自動重啟、按部署計劃定時搭建環(huán)境、全部重搭自化[17]環(huán)境等進(jìn)行充分的驗證。

      [1]Myers G J,Sandler C,Badgett T.The Art of Software Testing[M].John Wiley& Sons,2011.

      [2]李鵬,楊永艷.基于業(yè)務(wù)數(shù)據(jù)的大型企業(yè)SOA測試方法[J].計算機(jī)工程,2012,38(4):60-62.

      [3]宋波,張忠能.基于系統(tǒng)功能測試的軟件自動化測試可行性分析[J].計算機(jī)應(yīng)用與軟件,2006,22(12):31-33.

      [4]顏炯,王戟,陳火旺.基于模型的軟件測試綜述[J].計算機(jī)科學(xué),2004,31(2):184-187.

      [5]單錦輝,姜瑛,孫萍.軟件測試研究進(jìn)展[J].北京大學(xué)學(xué)報(自然科學(xué)版),2005,41(1):134-145.

      [6]楊文,黃文濤.通用自動測試系統(tǒng)的軟件設(shè)計與實現(xiàn)[J].工業(yè)控制計算機(jī),2012(1):79-80.

      [7]王先平,齊逸.面向服務(wù)計算中Web服務(wù)動態(tài)綁定模型研究[J].計算機(jī)工程與設(shè)計,2010(19):4165-4167.

      [8]李瑋.軟件自動化測試混合框架的研究與實現(xiàn)[J].北京交通大學(xué)學(xué)報,2007(4):27-31.

      [9]楊寧,劉丹軍.基于JFinal框架的Java Web應(yīng)用開發(fā)研究[J].電腦知識與技術(shù),2014(7):74-76.

      [10]史永莉,陳元琰,羅曉曙,等.軟件自動化測試方案的效益分析[J].微計算機(jī)信息,2010(6):218-219.

      [11]汪邦慧,徐從來.軟件自動化測試框架設(shè)計與實踐[J].衛(wèi)星電視與寬帶多媒體,2013(11):57-61.

      [12]張坤.基于業(yè)務(wù)流程驅(qū)動自動化測試研究與實現(xiàn)[J].計算機(jī)光盤軟件與應(yīng)用,2013(5):268-269.

      [13]馬春燕,朱怡安,陸偉.Web服務(wù)自動化測試技術(shù)[J].計算機(jī)科學(xué),2012,39(2):162-169.

      [14]邢翠芳,杜晶,趙海冰.軟件自動化測試技術(shù)研究[J].電腦知識與技術(shù),2013(12):61-62.

      [15]Eckel B.Thinking in Java[M].3rd Edition.Prentice Hall,2013.

      [16]牟永敏,姜宇,張志華.軟件自動化測試中熱點路徑的研究[J].計算機(jī)工程與科學(xué),2011,33(6):79-83.

      [17]聶長海.關(guān)于軟件測試的幾點思考[J].計算機(jī)科學(xué),2011,38(2):1-3.

      [18]Chen Zhe,Gu Yi,Huang Zhiqiu,et al.Model Checking Aircraft Controller Software:A Case Study[DB/OL].http://onlinelibrary.wiley.com/doi/10.1002/spe.2242/abstract,2013-11-21.

      [19]Chen Zhe.Control Systems on Automata and Grammars[J/OL]. http://comjnl.oxfordjournals.org/content/early/2013/10/25/comjnl.bxt125,2013-10-25.

      [20]Chen Zhe,Zhang Daqiang,Zhu Rongbo,et al.A review of automated formal verification of Ad Hoc routing protocols for wireless sensor networks[J].Sensor Letters,2013,11(5):752-764.

      [21]Chen Zhe.On the generative power of ω-grammars and ωautomata[J].Fundamenta Informaticae,2011,111(2):119-145.

      [22]Chen Zhe,Gilles Motet.Towards better support for the evolution of safety requirements via the model monitoring approach[C]//Proceedings of the ACM/IEEE 32nd International Conference on Software Engineering(ICSE 2010).2010:219-222.

      [23]Chen Zhe,Gilles Motet.Nevertrace claims for model checking[C]//Proceedings of the 17th International SPIN Workshop on Model Checking of Software(SPIN 2010).2010:162-179.

      [24]Chen Zhe,Gilles Motet.System safety requirements as control structures[C]//Proceedings of the 33rd Annual IEEE International Computer Software and Applications Conference(COMPSAC 2009).2009:324-331.

      [25]Chen Zhe,Gilles Motet.A language-theoretic view on guidelines and consistency rules of UML[C]//Proceedings of the 5th European Conference on Model Driven Architecture-Foundations and Applications(ECMDA-FA 2009).2009:66-81.

      猜你喜歡
      測試環(huán)境結(jié)點部署
      一種基于Kubernetes的Web應(yīng)用部署與配置系統(tǒng)
      晉城:安排部署 統(tǒng)防統(tǒng)治
      全數(shù)字仿真測試環(huán)境在航天軟件測試中的應(yīng)用研究
      部署
      雷達(dá)航跡處理測試環(huán)境構(gòu)建方法研究
      科技視界(2019年10期)2019-09-02 03:22:27
      網(wǎng)絡(luò)設(shè)備自動化測試設(shè)計與實現(xiàn)
      Ladyzhenskaya流體力學(xué)方程組的確定模與確定結(jié)點個數(shù)估計
      部署“薩德”意欲何為?
      太空探索(2016年9期)2016-07-12 10:00:02
      負(fù)離子紡織品檢測方法分析
      中國纖檢(2015年4期)2015-03-13 18:25:35
      基于Raspberry PI為結(jié)點的天氣云測量網(wǎng)絡(luò)實現(xiàn)
      基隆市| 新龙县| 安塞县| 鹤峰县| 陈巴尔虎旗| 杂多县| 博罗县| 定州市| 长岛县| 吉木乃县| 当阳市| 黔南| 呼和浩特市| 华坪县| 台南县| 浮山县| 铁力市| 平远县| 花垣县| 紫云| 仁怀市| 江油市| 彭阳县| 灵丘县| 武鸣县| 北海市| 上饶县| 翁源县| 博白县| 阳山县| 威远县| 长乐市| 明光市| 临城县| 民乐县| 米林县| 马山县| 凤城市| 板桥市| 宁国市| 沽源县|