亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Appium的Android應(yīng)用自動(dòng)化測(cè)試框架的研究

        2018-11-17 02:35:22古銳肖璞
        現(xiàn)代計(jì)算機(jī) 2018年29期
        關(guān)鍵詞:環(huán)境變量測(cè)試人員測(cè)試用例

        古銳,肖璞

        (三江學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院,南京 210012)

        0 引言

        近些年,手機(jī)端的自動(dòng)化測(cè)試工具和框架逐漸增加,但是它們也存在著一些問(wèn)題。Appium是手機(jī)端的自動(dòng)化測(cè)試的一個(gè)開源框架,它可以針對(duì)原生的應(yīng)用和Web應(yīng)用甚至是兩種混合的應(yīng)用進(jìn)行自動(dòng)化測(cè)試[1]。

        本課題的研究目的在于通過(guò)基于Appium的Android應(yīng)用自動(dòng)化測(cè)試框架的研究,在針對(duì)同一款A(yù)ndroid應(yīng)用(可能會(huì)進(jìn)行版本迭代或更新)進(jìn)行測(cè)試時(shí),能夠?qū)⒁恍┤藶榈氖止y(cè)試中效率較低且容易出錯(cuò)[2]的基本操作,例如安裝啟動(dòng)應(yīng)用、注冊(cè)登錄、進(jìn)行點(diǎn)擊查看、頁(yè)面滑動(dòng)和文本輸入等,通過(guò)Appium自動(dòng)化測(cè)試框架編寫自動(dòng)化的測(cè)試用例腳本來(lái)執(zhí)行對(duì)這些機(jī)械重復(fù)的測(cè)試用例的測(cè)試,從而提高測(cè)試效率。

        本論文從自動(dòng)化測(cè)試技術(shù)、Appium工具簡(jiǎn)介和Appium設(shè)計(jì)理念入手,自主搭建自動(dòng)化測(cè)試所需要的Android環(huán)境和Appium環(huán)境并進(jìn)行了相應(yīng)的配置,通過(guò)Eclipse工具編寫符合所測(cè)試的Android手機(jī)App的測(cè)試用例。

        1 自動(dòng)化測(cè)試技術(shù)

        自動(dòng)化測(cè)試指的是針對(duì)軟件測(cè)試的一種自動(dòng)實(shí)現(xiàn),為了讓人力降低,時(shí)間得到保證,并減少一定成本,提高測(cè)試的效率,便有了自動(dòng)化測(cè)試這個(gè)概念。

        自動(dòng)化測(cè)試和手工測(cè)試是相輔相成的,在實(shí)際生活中,只有在滿足必要的前提條件的情況下我們才能去執(zhí)行自動(dòng)化測(cè)試??梢苑忠韵聨追N情況,首先這個(gè)項(xiàng)目的測(cè)試周期一定要足夠長(zhǎng),因?yàn)橥瓿勺詣?dòng)化測(cè)試的可行性分析,對(duì)測(cè)試框架進(jìn)行選擇、設(shè)計(jì)、編碼和調(diào)試測(cè)試腳本等都需要一定的時(shí)間和技術(shù)支持。另外,針對(duì)某個(gè)具體軟件或系統(tǒng),它的需求也不能變動(dòng)地太頻繁,因?yàn)樾枨笞兓?,測(cè)試用例和測(cè)試腳本都需要做出相應(yīng)的調(diào)整,這個(gè)時(shí)候項(xiàng)目的成本便會(huì)提高。還有值得一提的是,編寫的自動(dòng)化測(cè)試腳本最好能夠?qū)崿F(xiàn)很好的復(fù)用,否則自動(dòng)化測(cè)試便不能產(chǎn)生真正意義上的效益。

        2 Appium簡(jiǎn)介和設(shè)計(jì)理念

        Appium是支持自動(dòng)化測(cè)試的一個(gè)工具,也是支持自動(dòng)化測(cè)試的一個(gè)開源框架。Appium支持對(duì)iOS平臺(tái)和Android平臺(tái)上的原生應(yīng)用、Web應(yīng)用和混合應(yīng)用的測(cè)試,iOS和Android應(yīng)用是通過(guò)Web Driver協(xié)議來(lái)驅(qū)動(dòng)的[3]。另外,Appium支持跨平臺(tái),測(cè)試人員可以通過(guò)它使用相同的API在不同的平臺(tái)上來(lái)編寫自動(dòng)化測(cè)試代碼,這樣可以讓代碼反復(fù)使用。

        Appium的核心其實(shí)是一個(gè)Web服務(wù)器,它負(fù)責(zé)接收發(fā)自客戶端的連接,監(jiān)聽(tīng)這些命令并通過(guò)不同框架轉(zhuǎn)變成可以交互的代碼再在測(cè)試手機(jī)上執(zhí)行它,然后返回至Appium服務(wù)器運(yùn)行的結(jié)果,最后再返還HTTP響應(yīng)給客戶端。在這種情形下,實(shí)際上我們就可以直接使用帶HTTP客戶端的API的任何語(yǔ)言來(lái)寫我們自己的測(cè)試代碼。我們可以將服務(wù)器端放置在與測(cè)試機(jī)不同的機(jī)器上,只編寫測(cè)試代碼,然后使用遠(yuǎn)程云服務(wù)來(lái)接收和解釋命令。

        Appium Server是通過(guò)Node.js寫的,我們可以用源碼編譯的方式或者直接通過(guò)NPM($npm install-g appium$appium)命令安裝[3]。Appium還提供了很多基于 WebDriver協(xié)議擴(kuò)展的 C#、PHP、Python、Ruby、JavaScript和Java語(yǔ)言的客戶端庫(kù)[3]。這里的WebDriver可以說(shuō)是用來(lái)進(jìn)行自動(dòng)化測(cè)試的一個(gè)東西,它提供了一些比如對(duì)應(yīng)用中的界面元素進(jìn)行定位和模擬用戶行為等的API,使用Json經(jīng)由HTTP與服務(wù)器進(jìn)行底層的交互。當(dāng)使用Appium時(shí),測(cè)試人員可以使用它們來(lái)代替常規(guī)的的WebDriver庫(kù)。這里我們還需要對(duì)Bootstrap.jar有一個(gè)了解,首先它是一個(gè)UiAutomator測(cè)試腳本,由Appium提供,在Android測(cè)試機(jī)上運(yùn)行。它能夠在測(cè)試機(jī)上打開一個(gè)名為Socket的服務(wù)器,負(fù)責(zé)將Appium從電腦端傳過(guò)來(lái)的指令發(fā)送到手機(jī)端上,然后通過(guò)UiAutomator來(lái)執(zhí)行命令和操作。

        Appium的工作原理圖和Appium架構(gòu)圖如圖1和圖2所示。

        圖1 Appium原理圖

        圖2 Appium架構(gòu)圖

        Appium的設(shè)計(jì)理念可以說(shuō)是依據(jù)下面幾個(gè)方面進(jìn)行描述的,首先,由于在所有的平臺(tái)上Appium都是使用標(biāo)準(zhǔn)的自動(dòng)化API的特性,測(cè)試人員不需要為了自動(dòng)化測(cè)試而去重新編譯應(yīng)用(App)或者對(duì)測(cè)試App進(jìn)行修改[3]。Appium使用了client-server的設(shè)計(jì)模式,而且它的客戶端可以是用不同語(yǔ)言編寫的,也就是說(shuō),測(cè)試人員可以使用自己常用的開發(fā)工具、開發(fā)語(yǔ)言和測(cè)試框架去編寫自動(dòng)化測(cè)試腳本代碼,而不會(huì)被限制在某種特定語(yǔ)言或者特定的框架上[3]。而且對(duì)于測(cè)試人員來(lái)說(shuō),不再需要為了自動(dòng)化測(cè)試而特地去再重寫一套API,因?yàn)閃ebdriver協(xié)議里的API已經(jīng)相當(dāng)完善,只需要借鑒并且修改完善一下就可以使用了。最后,對(duì)于移動(dòng)端的自動(dòng)化測(cè)試來(lái)說(shuō),它應(yīng)該是開源的。

        3 環(huán)境搭建

        本次測(cè)試的環(huán)境搭建主要分為兩個(gè)部分:一是Android環(huán)境,主要用來(lái)給模擬器連接和真機(jī)連接提供支持,二是Appium環(huán)境,用來(lái)提供測(cè)試所需要的工具和環(huán)境。

        3.1 Android環(huán)境

        首先我們需要配置Java開發(fā)的環(huán)境變量,這里我們選擇安裝jdk1.8(win10 64位),可以從官網(wǎng)下載壓縮包,解壓按照步驟運(yùn)行。安裝在指定位置好了之后,我們需要進(jìn)行簡(jiǎn)單的環(huán)境配置,如下所示:

        1、新建變量名:JAVA_HOME

        變量值:C∶Program Files(x86)Javajdk1.8.0_31

        2、新建變量名:classpath

        變量值:

        .;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;

        3、編輯變量:PATH

        變量值:.;%JAVA_HOME%in;

        4、檢查是否配置成功

        cmd命令符輸入:java–version。

        接下來(lái),我們需要一個(gè)能連接電腦的Android手機(jī)或者是Android模擬器來(lái)執(zhí)行Android移動(dòng)端應(yīng)用的自動(dòng)化測(cè)試。這時(shí)我們需要安裝Android SDK并配置環(huán)境變量。

        從官網(wǎng)下載解壓好之后就可以設(shè)置Android環(huán)境變量,配置方法與上述java環(huán)境變量類似(以本機(jī)為例):

        1、新建變量名:ANDROID_HOME

        變 量 值 :F∶AppiumDesignandroid-sdk_r23.0.2-windowsandroid-sdk-windows

        2、編輯變量名:PATH

        變量值:

        ;%ANDROID_HOME%platform-tools;%ANDROID_HOME% ools;

        3、找到本機(jī)SDK應(yīng)用程序并啟動(dòng)它,這里我們還需要安裝一些不同Android版本的模擬器。

        3.2 Appium環(huán)境

        在Appium的官網(wǎng)下載與自身操作系統(tǒng)(Win10)對(duì)應(yīng)的Appium版本:

        將AppiumForWindows_1.4.16.1.zip解壓,然后通過(guò)內(nèi)部默認(rèn)安裝程序進(jìn)行安裝。cmd命令輸入“appiumdoctor”,如果Appium所需要的各項(xiàng)環(huán)境都已準(zhǔn)備完成,將出現(xiàn)如圖3所示的提示。

        圖3 環(huán)境部署成功圖

        3.3 測(cè)試設(shè)備信息

        下面列舉出本次自動(dòng)化測(cè)試工作中涉及到的測(cè)試設(shè)備信息,如表1所示。

        表1 測(cè)試設(shè)備信息表

        4 連接測(cè)試

        本文基于Appium的Android應(yīng)用自動(dòng)化測(cè)試框架的研究,在此針對(duì)Android真機(jī)作了連接測(cè)試。

        真機(jī)連接測(cè)試和模擬器連接測(cè)試類似,這里我們首先需要打開Android測(cè)試機(jī)的USB調(diào)試模式,通過(guò)一個(gè)數(shù)據(jù)線連接至測(cè)試電腦,接著在cmd命令中輸入adb devices查看是否連接成功,在這里需要記錄連接的設(shè)備編號(hào)(ef5862e9),如圖4所示。

        圖4 真機(jī)連接成功

        接下來(lái)我們需要在該Android測(cè)試機(jī)上安裝需要測(cè)試的一款A(yù)pp(新華社客戶端),這里可以通過(guò)代碼實(shí)現(xiàn),另外我們需要獲取一些相關(guān)的配置信息(被測(cè)App的package和activity名稱)。在此我們要用到之前安裝的SDK內(nèi)置的一個(gè)叫做aapt的工具,它位于SDK的工具目錄文件夾下,我們通過(guò)cmd命令輸入:

        aapt dump badging

        F∶AppiumDesignappium-workspaceappiumtestAppium_demoappsxhs.apk

        (以xhs.apk為例,這里填寫待測(cè)apk的存放路徑),等待運(yùn)行結(jié)束查看:

        package∶name='net.xinhuamm.mainclient'

        launchable-activity∶name='net.xinhuamm.mainclient.activity.sysconfig.FirstActivity'

        這里就是我們需要記錄的package和activity信息,在接下來(lái)的代碼中需要填寫,結(jié)果如圖5和圖6所示。

        圖5 package運(yùn)行結(jié)果查看圖

        這里我們需要初始化一個(gè)Appiumdriver,并在she-zhi()中進(jìn)行一系列的配置,包括需要安裝的測(cè)試apk的路徑、包名以及Android的設(shè)備信息等。在tuichu()中我們需要退出driver,如果不退出的話,在下次進(jìn)行測(cè)試時(shí),連接服務(wù)器就會(huì)受到影響也就是產(chǎn)生錯(cuò)誤信息。

        這里使用@Before和@After兩個(gè)方法,它們是Junit4的注解。@Before是一個(gè)初始化方法,在每一個(gè)測(cè)試方法執(zhí)行之前運(yùn)行一次,而@After則是釋放資源,在每一個(gè)測(cè)試方法執(zhí)行之后都要運(yùn)行一次。

        真機(jī)連接測(cè)試的核心代碼如下:

        File pathlujing=new File(System.getProperty("user.dir"));

        File applujing=new File(pathlujing,"/apps");//設(shè)置存放路徑

        File app=new File(applujing,"xhs.apk");//待測(cè) apk

        DesiredCapabilities sz=new DesiredCapabilities();

        sz.setCapability("deviceName","ef5862e9");//測(cè)試機(jī)設(shè)備名

        sz.setCapability("platformVersion","4.3");//Android4.3 版本

        sz.setCapability("app",app.getAbsolutePath());//獲取路徑

        //填寫之前獲取的包名和activity名稱

        sz.setCapability("appPackage","net.xinhuamm.mainclient");

        sz.setCapability("appActivity","net.xinhuamm.mainclient.activi

        ty.sysconfig.FirstActivity");//activity名稱

        driver=new AndroidDriver<>(new URL("http∶//127.0.0.1∶4723/wd/hub"),sz);//默認(rèn)端口 4723

        System.out.println("App 已經(jīng)安裝!");//輸出 app 成功安裝的提示信息

        執(zhí)行成功后在測(cè)試機(jī)上會(huì)發(fā)現(xiàn)自動(dòng)安裝了三個(gè)東西分別是 xhs.apk、AppiumSetting以及 Unlock。(每次運(yùn)行都會(huì)自動(dòng)安裝Unlock以及AppiumSetting)

        實(shí)際效果如圖7所示。

        圖7 連接真機(jī)

        5 測(cè)試用例設(shè)計(jì)

        針對(duì)本次Android應(yīng)用App自動(dòng)化測(cè)試,進(jìn)行了如表2所示的測(cè)試用例的設(shè)計(jì)。

        表2 自動(dòng)化測(cè)試用例設(shè)計(jì)

        在測(cè)試用例實(shí)現(xiàn)的前期,我們還需要進(jìn)行一些準(zhǔn)備工作,確保我們可以對(duì)測(cè)試機(jī)上的待測(cè)應(yīng)用進(jìn)行簡(jiǎn)單的點(diǎn)擊操作。

        下面通過(guò)連接測(cè)試機(jī),自動(dòng)安裝待測(cè)的xhs.apk,針對(duì)xhs.apk內(nèi)部頁(yè)面進(jìn)行部分控件的點(diǎn)擊(click)操作。首先需要通過(guò)Android平臺(tái)的UIAutomator[4],也就是android-sdk的一個(gè)工具uiautomatorviewer.bat,用它來(lái)對(duì)測(cè)試app的元素(button、text Field等)進(jìn)行抓取,比如通過(guò)id、class和text等來(lái)確定具體的元素(測(cè)試機(jī)需要聯(lián)網(wǎng),否則無(wú)法加載頁(yè)面內(nèi)容)。

        本次測(cè)試主要用了獲取name或者id的方式定位到具體的元素,這里以頁(yè)面的“學(xué)習(xí)”元素為例,在窗口左邊頁(yè)面點(diǎn)擊“學(xué)習(xí)”,右側(cè)會(huì)顯示該元素的具體信息,如圖8所示。

        6 測(cè)試用例實(shí)現(xiàn)

        本次自動(dòng)化測(cè)試的核心模塊為:注冊(cè)登錄、頁(yè)面滑動(dòng)、中英文輸入搜索、屏幕錄制和并行測(cè)試。

        (1)這里給出左滑的測(cè)試代碼,需要調(diào)用下面的方法:

        swipeToLeft(driver,1000,2);

        核心實(shí)現(xiàn)代碼如下:

        public static void swipeToLeft

        (AppiumDriverdriver,int during,int nm)

        {

        int w=driver.manage().window().getSize().width;

        int h=driver.manage().window().getSize().height;

        for(int i=0;i

        {

        driver.swipe(w*6/7,h/2,w/7,h/2,during);

        try{Thread.sleep(2000);}

        catch(InterruptedException e)

        {e.printStackTrace();}

        }

        }

        (2)在中英文搜索模塊,需要設(shè)置一些參數(shù):

        //支持中文輸入

        sz.setCapability("unicodeboard","true");

        //重置為默認(rèn)輸入法

        sz.setCapability("resetKeyboard","true");

        由于輸入測(cè)試有時(shí)需要輸入中英文等字符,不同Android手機(jī)可能自帶輸入法或者安裝了不同的輸入法,這里我們統(tǒng)一安裝并調(diào)用默認(rèn)的輸入法(Appium unicodeKeyboard)去執(zhí)行操作,具體方法為:

        excuteAdbShell("adb shell ime set io.appium.android.ime/.UnicodeIME");

        (3)屏幕錄制和指定位置截圖,我們使用jilu()和jietu()方法去實(shí)現(xiàn):

        public void jilu()throws IOException

        {

        Runtime ss=Runtime.getRuntime();

        ss.exec("cmd.exe/C adb shell screenrecord/sdcard/test.mp4");//版本>4.4

        }

        public static void jietu(TakesScreenshot drivername,String fname)

        {

        String cPath=System.getProperty("user.dir");//獲取路徑

        File rcrFile=drivername.getScreenshotAs(OutputType.FILE);

        try

        {

        System.out.println("截圖保存的路徑是∶"+current-Path+"/"+filename);

        FileUtils.copyFile(rcrFile,new File(cPath+"\"+fname));

        }catch(IOException e)

        {

        System.out.println("不能保存截圖");

        e.printStackTrace();

        }finally

        {

        System.out.println("截圖已經(jīng)完成,它位于 "+cPath+"folder");

        }

        }

        (4)并行測(cè)試[5]是指針對(duì)兩個(gè)不同型號(hào)不同版本的Android手機(jī)進(jìn)行自動(dòng)化測(cè)試,這里我們選取Android版本為4.3的vivo手機(jī)和Android版本為6.0的華為手機(jī)作為測(cè)試機(jī),這里我們需要打開兩個(gè)Appium窗口并設(shè)置不同的連接端口為4723(默認(rèn))和4722。

        7 環(huán)境搭建問(wèn)題與解決方法

        (1)在一切相關(guān)環(huán)境變量都配置好了之后,打開cmd窗口,輸入appium-doctor,可能會(huì)報(bào)錯(cuò),如圖9所示。

        圖9 檢查配置失敗圖

        遇到這種情況的解決辦法是將Appium安裝目錄中的.bin添加到環(huán)境變量Path中,以本機(jī)為例就是在Path變量中新增如下信息:

        F∶AppiumDesignAppiumAppium ode_modules.bin

        再次輸入appium-doctor,就會(huì)發(fā)現(xiàn)運(yùn)行成功,顯示所有環(huán)境已經(jīng)配置完畢。

        (2)上面我們提到在每次啟動(dòng)Appium跑測(cè)試用例時(shí)都會(huì)自動(dòng)默認(rèn)安裝Unlock以及AppiumSetting,這里有個(gè)辦法可以解決這個(gè)問(wèn)題:找到Appium的安裝目錄,用記事本打開android.js文件,注釋掉自動(dòng)安裝unlock和setting兩個(gè)app的代碼:

        F∶AppiumDesignAppiumAppium ode_modulesappi -umlibdevicesandroid

        如圖10所示。

        圖10 修改配置文件圖

        注釋其中的幾行:

        this.pushSettingsApp.bind(this),

        this.pushUnlock.bind(this),

        this.unlock.bind(this),

        (3)在我們自動(dòng)化測(cè)試的時(shí)候,一定要在用例中的相應(yīng)位置添加一些等待界面元素加載或響應(yīng)的等待時(shí)間,如果運(yùn)行報(bào)錯(cuò),一般情況是找不到元素或者未設(shè)置等待時(shí)間,此時(shí)可以使用下面的方法避免這個(gè)問(wèn)題:

        try{Thread.sleep(3000);}//設(shè)置一定的秒數(shù)等待

        catch(InterruptedException a)

        {a.printStackTrace();}

        (4)常見(jiàn)的報(bào)錯(cuò)問(wèn)題∶Failed to start an Appium session.Error∶Requested a new session but one was in progress.

        解決辦法:關(guān)掉正在運(yùn)次的Appium服務(wù),在Appium界面的General Settings中勾選Override Existing Session,然后重啟Appium。

        8 結(jié)語(yǔ)

        本文主要研究了Appium自動(dòng)化測(cè)試框架,同時(shí)結(jié)合Android手機(jī)應(yīng)用,針對(duì)App進(jìn)行自動(dòng)化的一個(gè)測(cè)試。Appium提供的平臺(tái)等特性能夠?qū)⒆詣?dòng)化測(cè)試Android手機(jī)的功能很好的實(shí)現(xiàn),在配置好環(huán)境等一切相關(guān)信息之后,通過(guò)執(zhí)行用例(可使用不同語(yǔ)言)就能快速地執(zhí)行對(duì)測(cè)試機(jī)的操作,這無(wú)疑讓本次測(cè)試工作的效率也得到了一定的提升。

        最后,雖然本次自動(dòng)化測(cè)試工作的研究還算有一定的進(jìn)展,但是也遇到和存在著很多的問(wèn)題,例如運(yùn)行報(bào)錯(cuò),功能能夠成功實(shí)現(xiàn)或者失敗的驗(yàn)證邏輯也可以做一個(gè)更深的探討與完善等。

        猜你喜歡
        環(huán)境變量測(cè)試人員測(cè)試用例
        基于最大熵模型的云南思茅松潛在分布區(qū)
        移動(dòng)應(yīng)用眾包測(cè)試人員信譽(yù)度復(fù)合計(jì)算模型研究
        基于SmartUnit的安全通信系統(tǒng)單元測(cè)試用例自動(dòng)生成
        從桌面右鍵菜單調(diào)用環(huán)境變量選項(xiàng)
        徹底弄懂Windows 10環(huán)境變量
        基于混合遺傳算法的回歸測(cè)試用例集最小化研究
        高校分析測(cè)試中心測(cè)試隊(duì)伍建設(shè)方案初探
        山東化工(2018年20期)2018-04-02 16:30:53
        淺析軟件測(cè)試中的心理學(xué)應(yīng)用
        基于三階段DEA—Malmquist模型的中國(guó)省域城鎮(zhèn)化效率測(cè)度及其收斂分析
        基于依賴結(jié)構(gòu)的測(cè)試用例優(yōu)先級(jí)技術(shù)
        区二区欧美性插b在线视频网站| 中文字幕一区二区av| 亚洲av无码成人精品国产| 精品欧洲av无码一区二区| 最近日韩激情中文字幕| 亚洲va成无码人在线观看| 水蜜桃视频在线观看入口 | 97精品人人妻人人| 久久久精品人妻一区二区三区| 91性视频| 国产精品自拍视频免费看| 久草青青91在线播放| 看全色黄大色大片免费久久| 精品一区二区av天堂| 日本一区二区高清视频| 久久99精品久久久久麻豆| 精品国产sm捆绑最大网免费站 | 91色区在线免费观看国产| 在线观看成人无码中文av天堂| 99久久久无码国产精品9| 日本女优一区二区在线免费观看| 国产精品成人自拍在线观看| 国产肉体xxxx裸体784大胆| 无码少妇一级AV便在线观看| 久草国产手机视频在线观看| 日韩精品在线视频一二三| 风韵多水的老熟妇| 国产精品爆乳在线播放| 91久久国产精品综合| 精人妻无码一区二区三区| 亚洲中文字幕无码mv| 91久国产在线观看| 开心五月激情五月五月天| 国产午夜精品一区二区三区嫩草| 亚洲AV无码成人精品区网页| 日本精品少妇一区二区| 中文字幕日韩欧美一区二区三区 | 99精品国产丝袜在线拍国语| AV有码在线免费看| 蜜臀一区二区av天堂| 久久久久久自慰出白浆|