午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 使用Ruby實現簡單的事物驅動的web應用的教程

使用Ruby實現簡單的事物驅動的web應用的教程

熱門標簽:滴滴外呼系統 常德電銷平臺外呼系統軟件價格 湖州u友防封電銷卡 徐州網絡外呼系統哪個好 高德地圖標注客服 白銀外呼paas系統 百度地圖標注自定義圖片 電銷機器人廠商代理 地圖標注賺錢項目注冊

簡介

對 Web 應用程序來講,自動化的集成測試是一個非常重要的部分, 然而由于這些測試用例太依賴具體的 Web 頁面的實現細節,這就給編寫和維護帶來的很大的挑戰。 通常來講有兩種方法可以生成 Web 應用程序測試用例。

    手工編寫腳本:測試人員需要知道 Web 頁面上有哪些表單、輸入框、選擇框、按鈕等,以及這些表單元素的名稱,ID 等屬性,然后才能利用一些工具來編寫測試用例。
    通過工具錄制生成:比如 IBM Rational Functional Tester 就提供了錄制用戶在 Web 界面的操作,自動生成測試用例的功能。

方法 1 需要測試人員了解太多的 Web 頁面細節,這就使得測試人員不能把精力集中在業務邏輯上,一旦 Web 頁面發生變化,將不得不花費大量精力更新腳本。方法 2 能夠自動生成測試腳本,但是這些腳本的可讀性很差,導致很難維護。同樣如果 Web 頁面發生變化,測試人員也需要重新錄制所有的腳本。

那么有沒有辦法克服上述問題,讓工作更加輕松一點呢?答案是肯定的!

例如一個在線的電子書店,對于用戶購書的場景,我們可以用下面的腳本來進行集成測試 :

login 'test@test.com','pass4you'     // 登錄
list_books                           // 列出書籍
add_to_shop_cart  '誰說大象不能跳舞'  // 把《誰說大象不能跳舞》這本書加入到購物車中

讀者可以看到, "login" , "list_books", "add_to_shop_cart" 這些術語已經完全脫離了具體的頁面細節,將不會受到頁面變化的影響, 它們是完全面向業務的,準確的體現了應用的業務邏輯,容易理解、易于維護,并且還能拿來和業務人員進行交流,甚至業務人員自己都能編寫測試腳本。 有這么多的優點,那么如何實現它們呢?這正是本文要介紹的重點:利用動態語言 Ruby 來實現“業務驅動”的 Web 應用測試。
Ruby 介紹

Ruby,中文意思為紅寶石,但是在計算機領域,它代表一種相當優秀的面向對象的腳本程序語言。它誕生于 1993 年,近年來隨著 Ruby on Rails 這個“Killer application”在 Web 開發領域迅速躥紅。Ruby 在最初設計時吸收了很多別的語言的精華,例如 perl 語言的文本處理能力,Python 語言的簡單性和可讀性,以及方便的擴展能力和強大的可移植能力,Smalltalk 語言的純面向對象語法思想,這就使它具備了很多其他語言的優點。Ruby 的設計理念是盡量減少編程時不必要的瑣碎工作,讓程序員在完成任務的同時充分的享受編程的樂趣。

Ruby 的特點如下:

    面向對象:在 Ruby 中,一切皆是對象,包括其他語言中的基本數據類型,比如整數。

    例如在 Java 中,對一個數求絕對值用 Math.abs(-20), 但在 Ruby 中一切皆對象,-20 這個數也是對象,所以可以這么做 -20.abs , 是不是更加形象和直觀?
    解釋型腳本語言:無需編譯,直接執行,開發周期短,調試方便。
    動態性:已經定義的類可以在運行時修改。

本文的重點不是介紹 Ruby 語言本身,有興趣的讀者可以參見 參考資源 部分。
案例分析
51book

為了展示如何使用 Ruby 進行業務驅動的測試,同時又不讓讀者陷入到過多細節中,本文假想了一個簡單的在線購書應用 ( 簡稱 51book),這個應用支持如下主要功能:

    1.登錄 : 用戶必須登錄才能購買書籍。
    圖 1. 登錄

    2.瀏覽書籍:包括按標題搜索書籍。
圖 2. 瀏覽和搜索書籍

3.把書籍添加到購物車中,參見 圖 2 中的“Add to cart”鏈接。
4.改變購物車中書籍的數量,并且重新計算。

業務操作

通過上面的介紹,讀者應該對 51book 有了一個簡單的了解,接下來我們考慮如何進行業務驅動的測試,首先需要定義面向業務的操作,這樣才能在測試用例中使用它們。 簡單起見,我們定義如下業務操作:
表 1. 業務操作

領域專用語言 (Domain Specific Language)

所謂領域專用語言(domain specific language / DSL),其基本思想是“求專不求全”,不像通用目的語言那樣目標范圍涵蓋一切軟件問題, 而是專門針對某一特定問題的計算機語言。正如它的名稱所宣稱的那樣,這種語言并不是通用的,只是專注于某個特定的“領域”, 例如 SQL 語言就是數據庫的 DSL,使用 SQL 可以完成各種各樣數據的操作,而不用關心底層的具體數據庫實現。由于“領域專用”,你想用 SQL 來開發一個桌面應用程序是不可能的。

我們在上一節定義的 login , add_to_shop_cart , change_quantity 就是針對 51book 在線書店的 DSL。

Martin Fowler 把 DSL 分為兩大類:外部 DSL 和內部 DSL。對外部 DSL 來講,構建它需要做的是:(1) 定義面向領域的全新的語法。(2) 用某種語言編寫解釋器或編譯器 ,由于這種語言是全新的,我們有很多工作需要做;那么對于內部 DSL 來說,我們可以選定一種靈活的語言,選取它一個語法的子集,并且利用這種語言的動態特性進行定制,這樣就避免了重新打造一個全新語言的龐大工作量。

Ruby 語言具備非常豐富的語法和異常靈活的動態特征,非常適合創建動態 DSL。本文就是利用 Ruby 來創建 51book 面向測試的 DSL。

用 Ruby DSL 實現業務操作
原理

由于 Ruby 是一種動態腳本語言,是解釋執行的,它提供了對一段文本進行 “evaluate”執行的方法。也就是說,我們可以提供一段文本(不必是完整的程序),Ruby 就可以在一個特定的上下文中執行它,當然這段文本需要符合 Ruby 的語法。

比如我們有一個文件 bookshop.txt,它包含了如下文本 : login "andy", "pass4you" , 那么怎么執行它呢?首先需要一個上下文,我們可以定義一個類來表示:
清單 1. BookshopDSLBuilder

class BookshopDSLBuilder  
  def self.execute( dsl) 
    builder=new 
    builder.instance_eval(File.read(dsl), dsl)  
  end 
  def login(user=nil,pwd=nil) 
    print user 
    print pwd 
  end 
end

上面的代碼非常簡單,需要關注的是靜態方法 execute, 當把 bookshop.txt 作為參數來調用它時,會有什么情況發生呢 ? 聰明的讀者可能已經猜到了,那就是 user 和 pwd 的值會被打印出來。這段代碼展示了 Ruby 語言的兩個重要特點 :

    instance_eval 方法會把一段文本當做代碼來執行。執行的上下文就是對象 BookshopDSLBuilder。 所以當它碰到文本 "login" 時,會自動調用真正的方法 login。
    在調用一個方法時,可以不加括號。這就是為什么 Ruby 會把文本 login "andy","pass4you" 當做一個方法調用的原因。

這兩個特點就給我們搭了一座“橋”,使得我們可以把那個面向業務測試的文本諸如“login”,“add_to_cart”,“search_book”等轉化為對特定方法的調用了。我們就可以在這些方法中實現某些邏輯。
Watir

我們現在已經能夠把業務測試的腳本和 Ruby 的對象 / 方法連接起來,可是還需要第二座橋把 Ruby 和 Web 應用程序連接起來,這樣才能使業務測試的腳本驅動 Web 頁面進行測試。我們希望能有一個軟件或工具可以像人一樣來驅動瀏覽器的操作,例如點擊鏈接,填充表單,點擊按鈕等等。當然它也可以檢查頁面的結果,例如期待的文本是否出現等。

開源工具 Watir 就是這樣一個工具,除了具備上述功能外,它和 Ruby 語言還能進行無縫的集成,并且對瀏覽器尤其是 IE 有超強的控制能力。所以我們選取它作為第二座橋。

下面是一個使用 watir 的簡單例子,它進入 Google 的首頁,在搜索框中鍵入 "bookshop", 然后點擊"搜索"按鈕。 Watir 充分繼承了 Ruby 語言簡單明了的特點,讀者可以看到使用 Watir 的腳本是相當直觀,相當容易的。
清單 2. Watir 例子

require "watir"
ie = Watir::IE.new 
ie.goto "http://www.google.com"    
ie.text_field(:name, "q").set "bookshop"
ie.button(:name, "btnG").click

實現 Login

有了上面的兩座“橋”,具體的實現就簡單多了,對于每一個業務操作,我們需要做的是 :

(1) 在一個 Ruby 對象中 (BookshopDSLBuilder) 實現一個同名的方法

(2) 在方法實現中,利用 watir 來操作界面元素。當然前提是我們需要知道界面上有哪些元素。

先來看一看 Login 的實現:
清單 3. Login

class BookshopDSLBuilder 
 include Test::Unit::Assertions #include ruby unit 的 Assertion 
 def self.execute( dsl) 
  builder=new 
  builder.instance_eval(File.read(dsl), dsl) 
  builder 
 end 
 def initialize 
  @login_url = 'http://localhost:3000/bookshop/login'  #51Book 的入口
  #creat a ie instance 
  @ie= Watir::IE.new               # 創建一個 Watir 的實例
 end 
 def login(user=nil,pwd=nil) 
  @ie.goto @login_url 
  @ie.text_field(:id,"user_name").set(user)   # 設置用戶名
  @ie.text_field(:id,"user_password").set(pwd)  # 設置密碼
  @ie.button(:type,"submit").click        # 點擊提交按鈕
 end 
end

實現 add_to_shop_cart

把書籍添加的購物車中這個操作相對復雜,因為它接收的參數是一個書籍的標題,而在界面上"Add to Cart"卻是一個只包含 book id, 不包含標題的鏈接,所以無法直接定位。
清單 4. Add to Cart

 table width='100%' class='book'> 
  tr> 
    td>title:/td> 
    td>Agile development/td> # 標題在這里
  /tr> 
  tr> 
    td>description:/td> 
    td>The book of agile development/td> 
  /tr> 
  tr> 
    td>price:/td> 
    td>30.0/td> 
  /tr> 
  tr> 
    td colspan="2"> #Add_To_Cart Link 卻在這里
      a href='/bookshop/add_to_cart/1' >Add to Cart/a> 
    /td> 
  /tr>  
 /table>

這種情況下就可以利用 Watir 對 xpath 強大的支持,先找到標題,在從標題找到鏈接,最后點擊鏈接即可。
清單 5. 使用 XPath

def add_to_cart(title)    
  table = @ie.table(:xpath, 
     "http://table[@class='book']/tbody/tr/td[text()='"+title+"']/../../../") 
  if table[1][2].text == title 
    href = table[4][1].links[1].href 
    @ie.link(:href,href).click 
  end 
end

對于其他的業務操作,具體的實現方式也是大同小異,這里不再一一介紹,有興趣的讀者可以參見 附件 中的代碼,最后我們來看一個面向業務的 Web 頁面測試例子:
清單 6. 一個完整的例子

 login 'andy','pass4you' 

 add_to_cart 'Agile development'
 add_to_cart 'Savor Blue'
 add_to_cart 'Programming Ruby' 

 change_quantity 'Agile development',10 
 change_quantity 'Savor Blue',10 
 change_quantity 'Programming Ruby',10 

 recalculate_cart 
 assert_total_price_is 900 

 search_book 'Ant cookbook'
 add_to_cart 'Ant cookbook'
 assert_total_price_is 910

總結

到目前為止,我們已經通過 Ruby 完整的實現了“業務驅動” 的 Web 應用測試,實際上我們通過 Ruby 實現了一個面向業務的抽象層,利用 Watir 把業務操作映射到了對 Html 頁面的操作。這樣當 Html 頁面發生了變化的時候,只需要調整映射,而不需要更改業務層的操作。同時由于它們是完全面向業務的,就使得開發人員或測試人員能把精力集中到業務邏輯的測試上,而不用陷入實現的細節。

掌握了該方法以后,讀者可以應用到自己的程序中,可以使得自己的測試編寫簡單,容易理解,易于維護。將會極大的提供 Web 應用的測試效率。

您可能感興趣的文章:
  • 幾個加速Ruby on Rails的編程技巧
  • 利用RJB在Ruby on Rails中使用Java代碼的教程
  • Ruby中數組的一些相關使用方法

標簽:遼寧 張家界 荊門 公主嶺 永州 梧州 普洱 三沙

巨人網絡通訊聲明:本文標題《使用Ruby實現簡單的事物驅動的web應用的教程》,本文關鍵詞  使用,Ruby,實現,簡單,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用Ruby實現簡單的事物驅動的web應用的教程》相關的同類信息!
  • 本頁收集關于使用Ruby實現簡單的事物驅動的web應用的教程的相關信息資訊供網民參考!
  • 推薦文章
    欧美一乱一性一交一视频| 国产精品久久77777| 在线观看区一区二| 91在线精品一区二区三区| 青青操视频在线播放| 9999在线观看| 成人激情视频在线播放| 青椒成人免费视频| 欧美黑人又粗又大又爽免费| 国产一区二区三区奇米久涩| 中文字幕av一区二区| 精品国产精品自拍| 成人免费av资源| 欧美熟妇乱码在线一区| jizz18女人高潮| 北条麻妃在线视频| 日韩欧美激情一区二区| 精品国产一区二区三区久久| 制服丝袜在线91| 93久久精品日日躁夜夜躁欧美| 欧美性受xxxx狂喷水| 天天综合天天干| 少妇高潮惨叫久久久久| 国产九九九视频| 国产美女三级视频| 国产精品久久久影院| 国产精品r级在线| 久久久久久久久久久黄色| 久久久久亚洲天堂| 国产原创精品在线| 欧美性大战久久久久| 国产欧美精品一区二区三区-老狼| 九色精品美女在线| 在线亚洲男人天堂| 亚洲第一色在线| 日韩欧美亚洲另类制服综合在线| 日本一区二区免费在线观看视频| 亚洲AV无码成人片在线观看 | 97免费视频在线| 精品久久久久久久久久久久久久久 | 在线播放第一页| 91av免费观看| 一女被多男玩喷潮视频| 人妻夜夜爽天天爽| 亚洲高清视频在线观看| 精品中文字幕人| 精品国产91乱高清在线观看 | 欧美日韩 一区二区三区| 日韩男人的天堂| 精品国产一区二区三区四| 国产伦精品一区二区三区视频我| 天干夜夜爽爽日日日日| 一区二区三区免费在线| 精品黑人一区二区三区在线观看 | 夜夜嗨av一区二区三区四季av | 国产aaa一级片| 久久久久国产免费| 四虎国产成人精品免费一女五男| 麻豆专区一区二区三区四区五区| 国产亚洲色婷婷久久| 正在播放精油久久| 久久福利一区二区| 欧美丰满熟妇xxxxx| 黄色手机在线视频| jizz欧美性20| 久久久久久久久久久久久久免费看| 四季av综合网站| 中文字幕av久久爽av| 久久久久无码国产精品不卡| 亚洲18在线看污www麻豆| 免费看91视频| 俄罗斯毛片基地| 六月丁香婷婷综合| 国产视频在线免费观看| 久久中文欧美| 欧美国产乱子伦 | 美女性感视频久久久| 色与欲影视天天看综合网| 国产精品伦子伦免费视频| 污污视频网站在线| 90岁老太婆乱淫| 日韩欧美亚洲日产国| 一区二区三区一级片| 中国丰满人妻videoshd| 男人的天堂99| 日韩va亚洲va欧美va清高| 日韩vs国产vs欧美| 亚洲丰满少妇videoshd| 精品国产一区二区三区久久狼5月| 欧美在线欧美在线| 91精品国产综合久久香蕉的用户体验 | 99国产精品国产精品毛片| 亚洲男人天堂一区| 7799精品视频| 欧美黑人巨大xxx极品| 国产精品v欧美精品v日韩| 日本精品免费在线观看| 婷婷综合在线视频| 午夜精品小视频| 国产精品少妇自拍| 精品在线不卡| 57pao精品| 久久久综合香蕉尹人综合网| 国产黄色一区二区三区| 日本三级中文字幕| 97人妻一区二区精品视频| 国产熟女一区二区三区五月婷| 国产伦理精品不卡| 欧美三级电影网| 97精品一区二区视频在线观看| 国产伦精品一区二区三区在线| 国产真人无码作爱视频免费| 中文字幕激情小说| 国产精品一区二区久久精品爱涩 | 亚洲人成电影网站| 国产精品视频久久| 国产精品亚洲a| 久久国产精品免费看| 99久久精品国产毛片| 亚洲高清一二三区| 国产嫩草一区二区三区在线观看| 中文av字幕在线观看| 国产成人精品一区二三区四区五区 | 亚洲黄色小说视频| 午夜视频在线播放| 欧美日韩亚洲系列| 韩国美女主播一区| 乱人伦xxxx国语对白| 麻豆一区二区三区精品视频| 国产精品一区二区在线看| 欧美亚洲综合久久| 日韩一区二区电影| 亚洲电影一区二区| 久久国产精品网站| 国产午夜精品在线| 中文字幕在线亚洲三区| 国内精品久久久久久久久久| 欧洲亚洲免费在线| 国产精彩精品视频| 日本丰满少妇xxxx| 中文字幕一区二区三区精华液| 超碰在线人人干| 国产精品欧美极品| 成人1区2区3区| 福利一区在线观看| 中文在线不卡视频| 亚洲欧美丝袜| 男女做爰猛烈刺激| 国产成人三级一区二区在线观看一| 欧美国产禁国产网站cc| 色综合天天狠天天透天天伊人 | 日本毛片在线免费观看| 乱子伦一区二区三区| 欧美色欧美亚洲高清在线视频| 性欧美视频videos6一9| 天堂av2020| 日韩国产欧美一区二区三区| 亚洲福利视频二区| 国产欧美日韩小视频| 中文在线字幕av| 在线欧美日韩精品| 欧美日韩日本网| 国产亚洲小视频| 亚洲黄色免费网站| 成人h猎奇视频网站| 成人在线手机视频| 久久精品人人做人人爽人人| 日韩av免费在线看| 欧美wwwwwww| 九九热精品视频在线| 99热精品一区二区| 69视频在线免费观看| 精品熟女一区二区三区| 不卡高清视频专区| 午夜精品免费视频| 美女扒开腿免费视频| 国产成人精品亚洲777人妖| 伊人一区二区三区久久精品| 精品国产成人av在线免| 日韩国产高清在线| 色777狠狠综合秋免鲁丝| 久久久精品高清| 国产成人精品网址| 欧美在线性视频| 免费一级黄色录像| 夜色激情一区二区| 日韩av一区二区三区在线| 一级黄色免费片| 亚洲精品在线观看网站| 欧美黄网在线观看| 狠狠综合久久av一区二区| 国产精品久久免费看| 色伦专区97中文字幕| 日韩av手机在线看| www在线观看免费视频| 国产精品私房写真福利视频| 国产日韩精品一区二区| 青青草手机视频在线观看| 日韩人在线观看| 蜜臀在线免费观看| 天天操天天干天天操| 成人免费视频视频在线观看免费| 日韩午夜av一区| 蜜桃免费在线视频| 久久在线免费观看| 国产一区二区在线观看免费播放| 97人人爽人人爽人人爽| 日韩在线观看精品| 三上悠亚ssⅰn939无码播放| 欧美性xxxxx| 春日野结衣av| 亚洲综合色网站| 久久综合给合久久狠狠色| 国产精品老熟女一区二区| 久久人人爽人人| 日韩免费av一区| 欧美日韩精品一区二区三区四区| 国产综合免费视频| 久久久久99精品一区| 狠狠色噜噜狠狠狠狠色吗综合| 成 人片 黄 色 大 片| 国内精品久久久| 超碰中文字幕在线| 国产亚洲日本欧美韩国| 日本污视频网站| 4438亚洲最大| 国产欧美日韩综合精品| 男生和女生一起差差差视频| 一级女性全黄久久生活片免费| 女同性恋一区二区| 99国产精品国产精品久久| 国产区一区二区| 精品一区二区影视| 成人av网站观看| 奇米一区二区三区| 青青草成人网| 丰满人妻一区二区三区四区53| 欧美黑人巨大xxx极品| 久久午夜色播影院免费高清| 色综合久久悠悠| 人人草在线观看| 在线观看久久av| 国内偷拍精品视频| 亚洲视频999| 国产一级在线播放| 视频直播国产精品| 亚洲黄网在线观看| 欧美洲成人男女午夜视频| 成人黄色免费网| 国色天香2019中文字幕在线观看| www五月天com| 国自产精品手机在线观看视频| 1024手机在线视频| 伊人av综合网| www.av88| 国产精品久久久久久久一区探花| 刘亦菲久久免费一区二区| 91最新国产视频| 在线观看免费中文字幕| 国产精品福利在线| 99久久精品国产成人一区二区| 久久亚洲春色中文字幕| 最近中文字幕免费观看| 午夜精品99久久免费| 蜜桃在线一区二区| 一区二区三区欧美久久| 日韩av一二三四区| 日本道精品一区二区三区| 免费看裸体网站| 久久精品视频一| 99久久精品国产成人一区二区| 91精品综合久久久久久五月天| 国产在线精品一区二区三区不卡| 欧美日韩在线观看一区二区三区| 国产嫩草影院久久久久| 欧美wwwwwww| 欧美揉bbbbb揉bbbbb| 91杏吧porn蝌蚪| 欧美二区在线播放| 无码精品在线观看| 亚洲欧洲日韩精品| 一区二区三区欧美| 国产黄色三级网站| 亚洲精品久久久久久久久久久| 国产一区二区三区中文字幕| 国产在线精品一区免费香蕉| 91色porny蝌蚪| 人妻互换一二三区激情视频| 欧美大片国产精品| 欧美日韩一级在线观看| 欧美一区二区色| 不卡av在线免费观看| 国产精品久久久久久久美男| 欧美成人一区二区视频| 99久久自偷自偷国产精品不卡| 91视频免费看| 国产精品嫩草av| 久久青草福利网站| 东方aⅴ免费观看久久av| 特级丰满少妇一级| 国产亚洲精品久久久久久| 无码精品黑人一区二区三区| 日本老太婆做爰视频| 亚洲动漫第一页| 欧美激情国产精品免费| 欧美在线国产精品| 粉嫩在线一区二区三区视频| 亚洲成人福利视频| 欧美第一淫aaasss性| 国产成人精品免费| avtt香蕉久久| 人人澡人人澡人人看欧美| 国产成人av自拍| 蜜桃精品一区二区| 美女性感视频久久久| 国产成人午夜视频| 18禁男女爽爽爽午夜网站免费| 亚洲国产精品人人做人人爽| 亚洲黄色免费视频| 成人黄色av网站| 夜夜精品浪潮av一区二区三区| 黄色一级片国产| 一区二区三区国产豹纹内裤在线| 久久国产乱子伦精品| 精品欧美日韩| 欧美高清视频www夜色资源网| 欧美在线精品一区二区三区| 国产激情在线观看视频| 韩国视频理论视频久久| 久久精品亚洲精品国产欧美| 免费成人深夜蜜桃视频| 久久久久久久久久久久久久一区| 在线影视一区二区三区| 中文字幕一区2区3区| 国产精品久久久久9999爆乳| 亚洲国产精品资源| 肉肉av福利一精品导航| 亚洲av无一区二区三区久久| 欧美另类精品xxxx孕妇| 久久久777精品电影网影网| 欧美日韩中文字幕在线观看| 国产精品久久久久久久久久久久冷| 疯狂蹂躏欧美一区二区精品| 视频在线观看国产精品| 在线看的黄色网址| 国产精品igao视频| 中文字幕亚洲成人| 免费a级黄色片| www.成人av.com| 7799精品视频| 国产在线精品一区二区夜色| 毛片网站免费观看| 中文字幕欧美一区| 久久久久黄色片| 成年人视频网站免费| 九色精品免费永久在线| 精品视频在线免费观看| 亚洲欧洲视频在线观看| 日本一卡二卡在线| 精品国产免费人成电影在线观...| 精品国产一区a| 成人免费三级在线| 日本系列第一页| 国产av天堂无码一区二区三区| 2024亚洲男人天堂| 日本久久电影网| 日韩欧美一区二区三区在线| 国产宾馆实践打屁股91| 亚洲中文无码av在线| 欧美日韩在线不卡视频| 久久中文字幕一区| 国产精品欧美综合在线| 老司机福利在线观看| 精品日韩美女的视频高清| 天天干天天做天天操| 大胸美女被爆操| 精品黑人一区二区三区观看时间| 欧美色图另类小说| 无码人妻精品一区二区蜜桃网站| 亚洲精品一区二| 免费亚洲一区二区| 久久精品午夜一区二区福利| 99在线观看视频网站| 国产精品一区二区av| 福利视频一区二区三区| 99re资源| 在线观看成人黄色| 亚洲一区在线免费观看| 国产精品99久| 国产一区啦啦啦在线观看| 国产一区日韩二区欧美三区| 国产一区中文字幕| 岛国一区二区在线观看| 国产激情91久久精品导航 | 男人的天堂日韩| 91黄色激情网站| 久久久久青草大香线综合精品| 成人a区在线观看| 久久久精品天堂| 国产精品久久久久久久蜜臀| 一区二区三区中文字幕精品精品| 亚洲女与黑人做爰| 天天影视涩香欲综合网| 欧美视频一区二区在线观看| 中文乱码人妻一区二区三区视频| 美女av免费观看| 国产综合色香蕉精品| 久久精品视频在线| 四虎成人精品永久免费av| 精品嫩模一区二区三区|