日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Diango博客--23.单元测试:测试 blog 应用

發布時間:2023/12/20 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Diango博客--23.单元测试:测试 blog 应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1. 前言
  • 2. 搭建測試環境
  • 3. 測試模型
  • 4. 測試視圖
  • 5. 測試模板標簽
  • 6. 測試輔助方法和類

1. 前言

我們博客功能越來越來完善了,但這也帶來了一個問題,我們不敢輕易地修改已有功能的代碼了!

我們怎么知道代碼修改后帶來了預期的效果?萬一改錯了,不僅新功能沒有用,原來已有的功能都可能被破壞。此前我們開發一個新的功能,都是手工運行開發服務器去驗證,不僅費時,而且極有可能驗證不充分。

如何不用每次開發了新的功能或者修改了已有代碼都得去人工驗證呢?解決方案就是編寫自動化測試,將人工驗證的邏輯編寫成腳本,每次新增或修改代碼后運行一遍測試腳本,腳本自動幫我們完成全部測試工作。

接下來我們將進行兩種類型的測試,一種是單元測試,一種是集成測試。

單元測試是一種比較底層的測試,它將一個功能邏輯的代碼塊視為一個單元(例如一個函數、方法、或者一個 if 語句塊等,單元應該盡可能小,這樣測試就會更加充分),程序員編寫測試代碼去測試這個單元,確保這個單元的邏輯代碼按照預期的方式執行了。通常來說我們一般將一個函數或者方法視為一個單元,對其進行測試。

集成測試則是一種更加高層的測試,它站在系統角度,測試由各個已經經過充分的單元測試的模塊組成的系統,其功能是否符合預期。

我們首先來進行單元測試,確保各個單元的邏輯都沒問題后,然后進行集成測試,測試整個博客系統的可用性。

Python 一般使用標準庫 unittest 提供單元測試,django 拓展了單元測試,提供了一系列類,用于不同的測試場合。其中最常用到的就是 django.test.TestCase 類,博客應用的單元測試,主要就是和這個類打交道。這個類和 Python 標準庫的 unittest.TestCase 類似,只是拓展了以下功能:

1)提供了一個 client 屬性,這個 client 是 Client 的實例。可以把 Client 看做一個發起 HTTP 請求的功能庫(類似于 requests),這樣我們可以方便地使用這個類測試視圖函數。

2)運行測試前自動創建數據庫,測試運行完畢后自動銷毀數據庫。我們肯定不希望自動生成的測試數據影響到真實的數據。

django 應用的單元測試包括:

1)測試 model,model 的方法是否返回了預期的數據,對數據庫的操作是否正確。

2)測試表單,數據驗證邏輯是否符合預期

3)測試視圖,針對特定類型的請求,是否返回了預期的響應

4)其它的一些輔助方法或者類等

接下來我們就逐一地來測試上述內容。

2. 搭建測試環境

測試寫在 tests.py 里(應用創建時就會自動創建這個文件),首先來個冒煙測試,用于驗證測試功能是否正常,在 blog\tests.py 文件寫入如下代碼:

from django.test import TestCaseclass SmokeTestCase(TestCase):def test_smoke(self):self.assertEqual(1 + 1, 2)

使用 manage.py 的 test 命令將自動發現 django 應用下的 tests 文件或者模塊,并且自動執行以 test_ 開頭的方法。運行:

pipenv run python manage.py test


OK 表明我們的測試運行成功。

不過,如果需要測試的代碼比較多,把全部測試邏輯一股腦塞入 tests.py,這個模塊就會變得十分臃腫,不利于維護,所以我們把 tests.py 文件升級為一個包,不同的單元測試寫到包下對應的模塊中,這樣便于模塊化地維護和管理。

刪除 blog\tests.py 文件,然后在 blog 應用下創建一個 tests 包,再創建各個單元測試模塊:

test_models.py 存放和模型有關的單元測試
test_views.py 測試視圖函數
test_templatetags.py 測試自定義的模板標簽
test_utils.py 測試一些輔助方法和類等

注意:tests 包中的各個模塊必須以 test_ 開頭,否則 django 無法發現這些測試文件的存在,從而不會運行里面的測試用例。

3. 測試模型

模型需要測試的不多,因為基本上都是使用了 django 基類 models.Model 的特性,自己的邏輯很少。拿最為復雜的 Post 模型舉例,它包括的邏輯功能主要有:

1)str 方法,返回 title 用于模型實例的字符表示
2)save 方法中設置文章創建時間(created_time)和摘要(exerpt)
3) get_absolute_url 返回文章詳情視圖對應的 url 路徑
4) increase_views 將 views 字段的值 +1

單元測試就是要測試這些方法執行后的確返回了上面預期的結果,我們在 test_models.py 中新增一個類,叫做 PostModelTestCase,在這個類中編寫上述單元測試的用例。

from django.apps import appsclass PostModelTestCase(TestCase):def setUp(self):# 斷開 haystack 的 signal,測試生成的文章無需生成索引apps.get_app_config('haystack').signal_processor.teardown()user = User.objects.create_superuser(username='admin', email='admin@hellogithub.com', password='admin')cate = Category.objects.create(name='測試')self.post = Post.objects.create(title='測試標題',body='測試內容',category=cate,author=user,)def test_str_representation(self):self.assertEqual(self.post.__str__(), self.post.title)def test_auto_populate_modified_time(self):self.assertIsNotNone(self.post.modified_time)old_post_modified_time = self.post.modified_timeself.post.body = '新的測試內容'self.post.save()self.post.refresh_from_db()self.assertTrue(self.post.modified_time > old_post_modified_time)def test_auto_populate_excerpt(self):self.assertIsNotNone(self.post.excerpt)self.assertTrue(0 < len(self.post.excerpt) <= 54)def test_get_absolute_url(self):expected_url = reverse('blog:detail', kwargs={'pk': self.post.pk})self.assertEqual(self.post.get_absolute_url(), expected_url)def test_increase_views(self):self.post.increase_views()self.post.refresh_from_db()self.assertEqual(self.post.views, 1)self.post.increase_views()self.post.refresh_from_db()self.assertEqual(self.post.views, 2)
  • 這里代碼雖然比較多,但做的事情很明確。setUp 方法會在每一個測試案例運行前執行,這里做的事情是在數據庫中創建一篇文章,用于測試。

  • 接下來的各個 test_* 方法就是對于各個功能單元的測試,以 test_auto_populate_modified_time 為例,這里我們要測試文章保存到數據庫后,modifited_time 被正確設置了值(期待的值應該是文章保存時的時間)。

  • self.assertIsNotNone(self.post.modified_time) 斷言文章的 modified_time 不為空,說明的確設置了值。TestCase 類提供了系列 assert* 方法用于斷言測試單元的邏輯結果是否和預期相符,一般從方法的命名中就可以讀出其功能,比如這里 assertIsNotNone 就是斷言被測試的變量值不為 None。接著我們嘗試通過:

    self.post.body = '新的測試內容' self.post.save()

    修改文章內容,并重新保存數據庫。預期的結果應該是,文章保存后,modifited_time 的值也被更新為修改文章時的時間,接下來的代碼就是對這個預期結果的斷言:

    self.post.refresh_from_db() self.assertTrue(self.post.modified_time > old_post_modified_time)

    這個 refresh_from_db 方法將刷新對象 self.post 的值為數據庫中的最新值,然后我們斷言數據庫中 modified_time 記錄的最新時間比原來的時間晚,如果斷言通過,說明我們更新文章后,modified_time 的值也進行了相應更新來記錄修改時間,結果符合預期,測試通過。

  • 其它的測試方法都是做著類似的事情,這里不再一一講解,請自行看代碼分析。
  • 4. 測試視圖

    視圖函數測試的基本思路是,向某個視圖對應的 URL 發起請求,視圖函數被調用并返回預期的響應,包括正確的 HTTP 響應碼和 HTML 內容。

    我們的博客應用包括以下類型的視圖需要進行測試:

    1)首頁視圖 IndexView,訪問它將返回全部文章列表。
    2)標簽視圖,訪問它將返回某個標簽下的文章列表。如果訪問的標簽不存在,返回 404 響應。
    3)分類視圖,訪問它將返回某個分類下的文章列表。如果訪問的分類不存在,返回 404 響應。
    4)歸檔視圖,訪問它將返回某個月份下的全部文章列表。
    5)詳情視圖,訪問它將返回某篇文章的詳情,如果訪問的文章不存在,返回 404。
    5)自定義的 admin,添加文章后自動填充 author 字段的值。
    6)RSS,返回全部文章的 RSS 內容。

    首頁視圖、標簽視圖、分類視圖、歸檔視圖都是同一類型的視圖,他們預期的行為應該是:

    1)返回正確的響應碼,成功返回200,不存在則返回404。
    2) 沒有文章時正確地提示暫無文章。
    3) 渲染了正確的 html 模板。
    4) 包含關鍵的模板變量,例如文章列表,分頁變量等。

    我們首先來測試這幾個視圖。為了給測試用例生成合適的數據,我們首先定義一個基類,預先定義好博客的數據內容,其它視圖函數測試用例繼承這個基類,就不需要每次測試時都創建數據了。我們創建的測試數據如下:

  • 分類一、分類二
  • 標簽一、標簽二
  • 文章一,屬于分類一和標簽一,文章二,屬于分類二,沒有標簽
  • class BlogDataTestCase(TestCase):def setUp(self):apps.get_app_config('haystack').signal_processor.teardown()# Userself.user = User.objects.create_superuser(username='admin',email='admin@hellogithub.com',password='admin')# 分類self.cate1 = Category.objects.create(name='測試分類一')self.cate2 = Category.objects.create(name='測試分類二')# 標簽self.tag1 = Tag.objects.create(name='測試標簽一')self.tag2 = Tag.objects.create(name='測試標簽二')# 文章self.post1 = Post.objects.create(title='測試標題一',body='測試內容一',category=self.cate1,author=self.user,)self.post1.tags.add(self.tag1)self.post1.save()self.post2 = Post.objects.create(title='測試標題二',body='測試內容二',category=self.cate2,author=self.user,created_time=timezone.now() - timedelta(days=100))

    以 CategoryViewTestCase 為例

    class CategoryViewTestCase(BlogDataTestCase):def setUp(self):super().setUp()self.url = reverse('blog:category', kwargs={'pk': self.cate1.pk})self.url2 = reverse('blog:category', kwargs={'pk': self.cate2.pk})def test_visit_a_nonexistent_category(self):url = reverse('blog:category', kwargs={'pk': 100})response = self.client.get(url)self.assertEqual(response.status_code, 404)def test_without_any_post(self):Post.objects.all().delete()response = self.client.get(self.url2)self.assertEqual(response.status_code, 200)self.assertTemplateUsed('blog/index.html')self.assertContains(response, '暫時還沒有發布的文章!')def test_with_posts(self):response = self.client.get(self.url)self.assertEqual(response.status_code, 200)self.assertTemplateUsed('blog/index.html')self.assertContains(response, self.post1.title)self.assertIn('post_list', response.context)self.assertIn('is_paginated', response.context)self.assertIn('page_obj', response.context)self.assertEqual(response.context['post_list'].count(), 1)expected_qs = self.cate1.post_set.all().order_by('-created_time')self.assertQuerysetEqual(response.context['post_list'], [repr(p) for p in expected_qs])

    這個類首先繼承自 BlogDataTestCase,setUp 方法別忘了調用父類的 stepUp 方法,以便在每個測試案例運行時,設置好博客測試數據。

    然后就是進行了3個案例測試:

  • 訪問一個不存在的分類,預期返回 404 響應碼。

  • 沒有文章的分類,返回200,但提示暫時還沒有發布的文章!渲染的模板為 index.html

  • 訪問的分類有文章,則響應中應該包含系列關鍵的模板變量,post_list、is_paginated、page_obj,post_list 文章數量為1,因為我們的測試數據中這個分類下只有一篇文章,post_list 是一個 queryset,預期是該分類下的全部文章,時間倒序排序。

  • 其它的 TagViewTestCase 等測試類似,請自行參照代碼分析。

    博客文章詳情視圖的邏輯更加復雜一點,所以測試用例也更多,主要需要測試的點有:

  • 訪問不存在文章,返回404。
  • 文章每被訪問一次,訪問量 views 加一。
  • 文章內容被 markdown 渲染,并生成了目錄。
  • 測試代碼如下:

    class PostDetailViewTestCase(BlogDataTestCase):def setUp(self):super().setUp()self.md_post = Post.objects.create(title='Markdown 測試標題',body='# 標題',category=self.cate1,author=self.user,)self.url = reverse('blog:detail', kwargs={'pk': self.md_post.pk})def test_good_view(self):response = self.client.get(self.url)self.assertEqual(response.status_code, 200)self.assertTemplateUsed('blog/detail.html')self.assertContains(response, self.md_post.title)self.assertIn('post', response.context)def test_visit_a_nonexistent_post(self):url = reverse('blog:detail', kwargs={'pk': 100})response = self.client.get(url)self.assertEqual(response.status_code, 404)def test_increase_views(self):self.client.get(self.url)self.md_post.refresh_from_db()self.assertEqual(self.md_post.views, 1)self.client.get(self.url)self.md_post.refresh_from_db()self.assertEqual(self.md_post.views, 2)def test_markdownify_post_body_and_set_toc(self):response = self.client.get(self.url)self.assertContains(response, '文章目錄')self.assertContains(response, self.md_post.title)post_template_var = response.context['post']self.assertHTMLEqual(post_template_var.body_html, "<h1 id='標題'>標題</h1>")self.assertHTMLEqual(post_template_var.toc, '<li><a href="#標題">標題</li>')

    接下來是測試 admin 添加文章和 rss 訂閱內容,這一塊比較簡單,因為大部分都是 django 的邏輯,django 已經為我們進行了測試,我們需要測試的只是自定義的部分,確保自定義的邏輯按照預期的定義運行,并且得到了預期的結果。

    對于 admin,預期的結果就是發布文章后,的確自動填充了 author:

    class AdminTestCase(BlogDataTestCase):def setUp(self):super().setUp()self.url = reverse('admin:blog_post_add')def test_set_author_after_publishing_the_post(self):data = {'title': '測試標題','body': '測試內容','category': self.cate1.pk,}self.client.login(username=self.user.username, password='admin')response = self.client.post(self.url, data=data)self.assertEqual(response.status_code, 302)post = Post.objects.all().latest('created_time')self.assertEqual(post.author, self.user)self.assertEqual(post.title, data.get('title'))self.assertEqual(post.category, self.cate1)
  • reverse(‘admin:blog_post_add’) 獲取 admin 管理添加博客文章的 URL,django admin 添加文章的視圖函數名admin:blog_post_add,一般 admin 后臺操作模型的視圖函數命名規則是 <app_label>_<model_name> _<action。
  • self.client.login(username=self.user.username, password=‘admin’) 登錄用戶,相當于后臺登錄管理員賬戶。
  • self.client.post(self.url, data=data) ,向添加文章的 url 發起 post 請求,post 的數據為需要發布的文章內容,只指定了 title,body和分類。
  • 接著我們進行一系列斷言,確認是否正確創建了文章。

    RSS 測試也類似,我們期待的是,它返回的內容中的確包含了全部文章的內容:

    class RSSTestCase(BlogDataTestCase):def setUp(self):super().setUp()self.url = reverse('rss')def test_rss_subscription_content(self):response = self.client.get(self.url)self.assertContains(response, AllPostsRssFeed.title)self.assertContains(response, AllPostsRssFeed.description)self.assertContains(response, self.post1.title)self.assertContains(response, self.post2.title)self.assertContains(response, '[%s] %s' % (self.post1.category, self.post1.title))self.assertContains(response, '[%s] %s' % (self.post2.category, self.post2.title))self.assertContains(response, self.post1.body)self.assertContains(response, self.post2.body)

    5. 測試模板標簽

    全部模板引擎的測試套路都是一樣,構造需要的上下文,構造模板,使用上下文渲染模板,斷言渲染的模板內容符合預期。以為例:

    def test_show_recent_posts_with_posts(self):post = Post.objects.create(title='測試標題',body='測試內容',category=self.cate,author=self.user,)context = Context(show_recent_posts(self.ctx))template = Template('{% load blog_extras %}''{% show_recent_posts %}')expected_html = template.render(context)self.assertInHTML('<h3 class="widget-title">最新文章</h3>', expected_html)self.assertInHTML('<a href="{}">{}</a>'.format(post.get_absolute_url(), post.title), expected_html)

    這個模板標簽對應側邊欄的最新文章版塊。我們進行了2處關鍵性的內容斷言。一個是包含最新文章版塊標題,一個是內容中含有文章標題的超鏈接。

    這里測試的核心內容是,模板中 {% templatetag %} 被渲染成了正確的 HTML 內容。你可以看到測試代碼中對應的代碼:

    context = Context(show_recent_posts(self.ctx)) template = Template('{% load blog_extras %}''{% show_recent_posts %}' ) expected_html = template.render(context)

    注意模板標簽本質上是一個 Python 函數,第一句代碼中我們直接調用了這個函數,由于它需要接受一個 Context 類型的標量,因此我們構造了一個空的 context 給它,調用它將返回需要的上下文變量,然后我們構造了一個需要的上下文變量。

    接著我們構造了一個模板對象。

    最后我們使用構造的上下文去渲染了這個模板。

    我們調用了模板引擎的底層 API 來渲染模板,視圖函數會渲染模板,返回響應,但是我們沒有看到這個過程,是因為 django 幫我們在背后的調用了這個過程。

    6. 測試輔助方法和類

    我們的博客中只自定義了關鍵詞高亮的一個邏輯。

    class HighlighterTestCase(TestCase):def test_highlight(self):document = "這是一個比較長的標題,用于測試關鍵詞高亮但不被截斷。"highlighter = Highlighter("標題")expected = '這是一個比較長的<span class="highlighted">標題</span>,用于測試關鍵詞高亮但不被截斷。'self.assertEqual(highlighter.highlight(document), expected)highlighter = Highlighter("關鍵詞高亮")expected = '這是一個比較長的標題,用于測試<span class="highlighted">關鍵詞高亮</span>但不被截斷。'self.assertEqual(highlighter.highlight(document), expected)

    這里 Highlighter 實例化時接收搜索關鍵詞作為參數,然后 highlight 將搜索結果中關鍵詞包裹上 span 標簽。

    Highlighter 事實上 haystack 為我們提供的類,我們只是定義了 highlight 方法的邏輯。我們又是如何知道 highlight 方法的邏輯呢?如何進行測試呢?

    我是看源碼,大致了解了 Highlighter 類的實現邏輯,然后我從 haystack 的測試用例中找到了 highlight 的測試方法。

    所以,有時候不要懼怕去看源代碼,Python 世界里一切都是開源的,源代碼也沒有什么神秘的地方,都是人寫的,別人能寫出來,你學習后也一樣能寫出來。單元測試的代碼一般比較冗長重復,但目的也十分明確,而且大都以順序邏輯組織,代碼自成文檔,非常好讀。

    單純看文章中的講解你可能仍有迷惑,但是好好讀一遍示例項目中測試部分的源代碼,你一定會對單元測試有一個更加清晰的認識,然后依葫蘆畫瓢,寫出對自己項目代碼的單元測試。

    總結

    以上是生活随笔為你收集整理的Diango博客--23.单元测试:测试 blog 应用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    人人爽爽人人 | 在线观看免费 | 91成人精品在线 | 国产精品美女免费视频 | 欧美日韩不卡一区二区 | 四虎成人精品永久免费av | 中文字幕视频一区 | 国产免费高清视频 | 免费精品视频在线 | 欧美另类网站 | 国产黄色免费观看 | 日本3级在线观看 | 免费看的黄色录像 | 日日夜夜狠狠 | 久久亚洲热 | 久草资源在线观看 | 91高清免费在线观看 | 欧美日韩久久不卡 | 日韩免费在线播放 | 国产在线va | 国产无吗一区二区三区在线欢 | 亚洲欧洲日韩在线观看 | 久久精品美女视频 | 成年人视频在线免费播放 | 国产永久免费观看 | 中文字幕一区二区三区在线观看 | 91自拍91 | 亚洲美女精品区人人人人 | 四虎国产永久在线精品 | 日韩1级片 | 伊人久久国产精品 | 色成人亚洲网 | 免费视频xnxx com | 国产伦理剧 | 午夜视频导航 | 久久精品这里精品 | 久久久99精品免费观看app | 97超碰在线资源 | 国产精品久久久久久久久久久杏吧 | 成人a级免费视频 | 国产99久久九九精品免费 | 国产中文字幕在线 | 亚洲一二区视频 | 亚洲国产97在线精品一区 | 色无五月 | 亚洲日本黄色 | 成人香蕉视频 | 久久艹国产| 一本一道波多野毛片中文在线 | 国产一级一级国产 | 91精品麻豆 | 色婷婷国产精品一区在线观看 | 日韩精品久久久久久中文字幕8 | 精品视频久久久久久 | 99久久久久国产精品免费 | 国产精品女主播一区二区三区 | 欧美成人精品欧美一级乱 | 高清av免费一区中文字幕 | 人人澡人人草 | 成人app在线免费观看 | 日批网站在线观看 | 午夜黄色影院 | 国产精品亚洲人在线观看 | 久久免费视频99 | 午夜久草| 久久久69 | 色婷婷色 | 久久精品爱爱视频 | 一区二区三区免费在线播放 | 免费观看成人网 | 亚洲成 人精品 | 精产嫩模国品一二三区 | 久久久精品 | 欧美黄色成人 | 超碰在线cao | 国产激情久久久 | 免费视频你懂得 | 国产 日韩 欧美 中文 在线播放 | 在线观看一区二区视频 | 国产精品剧情在线亚洲 | 国产精品成人一区二区 | 人人揉人人揉人人揉人人揉97 | 国产精品久久久区三区天天噜 | 成人免费电影 | 免费av高清 | 97在线观看免费高清完整版在线观看 | 免费观看一级一片 | 在线观看日韩中文字幕 | av在线免费播放网站 | 一本大道久久精品懂色aⅴ 五月婷社区 | 日日射天天射 | 欧美激情xxxx| 国产小视频免费在线观看 | 99这里只有久久精品视频 | 午夜久草 | 草久久久 | 亚洲欧美在线观看视频 | 91一区啪爱嗯打偷拍欧美 | 日韩欧美国产视频 | 久久国产色 | 精品免费久久久久久 | www.久久久久 | 又黄又爽又无遮挡免费的网站 | 午夜色影院 | 久久视频在线观看免费 | 精品一区在线看 | 国产青青青 | 国产 日韩 欧美 中文 在线播放 | 国内精品久久久久国产 | 久久怡红院| 五月婷婷一级片 | 亚洲综合国产精品 | 最近中文字幕在线中文高清版 | 久久综合久久综合这里只有精品 | 91久久精品一区二区二区 | 国产成人精品网站 | 久久高清免费观看 | 色综合网在线 | 国产精品2区 | 成人中心免费视频 | 亚洲精品视频一 | 国产精品福利在线观看 | 91免费看黄色 | 国产高清日韩欧美 | 久久草av | 国产精品免费不卡 | www.888av| 91大神精品视频 | 亚洲午夜精品电影 | 婷婷综合国产 | 中文字幕在线观看的网站 | 久久综合免费视频影院 | 日本h在线播放 | 91福利社区在线观看 | 91精品国产91久久久久福利 | 国产黄色在线网站 | 丁香免费视频 | 国产亚洲精品综合一区91 | 精品亚洲一区二区三区 | 四虎成人av | 免费一级特黄毛大片 | 欧美尹人 | 亚洲成年人在线播放 | 日韩在线视频网址 | 亚洲精品国产拍在线 | 久久精品一二三区白丝高潮 | 国产精品初高中精品久久 | 国产精品午夜免费福利视频 | 麻豆免费在线播放 | 久久爽久久爽久久av东京爽 | 狠狠色丁香婷婷综合久小说久 | 国产成人精品一区二区三区网站观看 | 精品国产区在线 | 日本aaa在线观看 | 久久在现视频 | 日韩在线观看你懂得 | 亚洲精品在线一区二区三区 | 成 人 a v天堂 | 成人在线视频观看 | 91精品在线免费观看视频 | www.午夜| 国产福利91精品一区 | 国产高清一区二区 | 亚洲 欧美 91 | 一区二区三区免费在线观看视频 | 在线观看91| 黄色软件大全网站 | 激情偷乱人伦小说视频在线观看 | 69精品在线观看 | 热久久国产 | 国产中文字幕av | 中文日韩在线视频 | 精品国产伦一区二区三区观看方式 | wwxxxx日本| 在线成人中文字幕 | 成人免费视频播放 | 久久热首页 | 日韩免费电影网站 | 日韩在线 一区二区 | 日日摸日日添夜夜爽97 | 中文字幕在线观看播放 | 992tv在线 | 在线观看av的网站 | 91精品视频一区 | 国产成人在线免费观看 | www操操操 | 成人亚洲精品国产www | 国产美女久久久 | 九热精品 | www黄色| 又爽又黄又刺激的视频 | 欧美日韩国产在线观看 | av天天澡天天爽天天av | 精品免费视频123区 午夜久久成人 | 国色天香在线观看 | 国产精品久久久久三级 | 免费av在线网| 91视频传媒 | 久久午夜精品视频 | 国产第一页福利影院 | 天天爽夜夜爽精品视频婷婷 | av中文天堂在线 | 久久伦理 | 天天狠狠 | www.成人sex| 久久精品一区二区三区四区 | 免费视频三区 | 九九在线视频 | 日本中文字幕电影在线免费观看 | 97人人澡人人爽人人模亚洲 | 亚洲少妇自拍 | 天天操天天操天天操天天操天天操天天操 | 久久久在线 | 片网站| 久久激情电影 | 国产爽妇网| 日三级在线 | 色综合天天天天做夜夜夜夜做 | 国产日韩精品在线 | 成人片在线播放 | 亚洲精品小区久久久久久 | 亚洲一区天堂 | 超碰公开97 | 视频一区二区免费 | 日韩专区在线观看 | 婷婷丁香久久五月婷婷 | 国产一级不卡视频 | 国产精品成人国产乱 | 一级理论片在线观看 | 国产精品国产三级国产aⅴ9色 | 色成人亚洲网 | 在线观看激情av | 午夜视频一区二区 | 最近高清中文在线字幕在线观看 | www..com黄色片 | 欧美大片在线观看一区 | 啪啪小视频网站 | 午夜免费久久看 | 99国产一区二区三精品乱码 | 首页中文字幕 | 国产精品久久久久一区二区国产 | 久久综合狠狠综合 | 天天拍天天操 | 国产免费三级在线观看 | 99国产视频| 国产伦理剧 | 欧洲视频一区 | 午夜在线观看影院 | 中文字幕在线观看视频一区二区三区 | 91桃色在线播放 | 人人舔人人爱 | 日韩爱爱片| 欧美黑人性爽 | 色香天天 | 国产精品igao视频网网址 | 国内精品一区二区 | 欧美色图p | 免费观看一区二区三区视频 | 国产伦精品一区二区三区免费 | 91热| 亚洲免费不卡 | 五月天婷亚洲天综合网精品偷 | 视频在线一区二区三区 | 国产夫妻性生活自拍 | 日本午夜免费福利视频 | 国产成人a v电影 | 麻豆免费视频观看 | 免费在线色视频 | 久草在线久草在线2 | 久久99网 | 国产精品福利无圣光在线一区 | 国产精品九九久久久久久久 | 99一级片 | 日韩欧美视频一区 | 欧美精品一区二区免费 | 麻豆视频免费 | 狠狠干网址 | 国产精品系列在线观看 | 97日日| 精品久久久久久久久久岛国gif | 婷婷激情网站 | 久久亚洲电影 | 国产五十路毛片 | 99国产精品一区 | 五月激情六月丁香 | 亚洲日本精品 | 婷婷在线资源 | 国产亚洲精品久久久久久移动网络 | 日韩一二区在线 | 在线观看中文字幕亚洲 | 色橹橹欧美在线观看视频高清 | 国产精品美女久久久久久久 | 国产精品久久久久久久久毛片 | av一本久道久久波多野结衣 | 精品黄色在线 | 日韩在线免费观看视频 | 色播五月激情综合网 | 色福利网站 | 国产艹b视频 | 亚洲精品一区二区18漫画 | 欧美成年黄网站色视频 | 久久久久综合精品福利啪啪 | 亚洲视频免费视频 | 免费看一级片 | 国产高清不卡一区二区三区 | 久久国产精品99久久久久 | 综合铜03 | 黄a网站 | 91大神电影| 黄色电影在线免费观看 | 97av视频在线 | va视频在线观看 | 一区二区三区免费在线播放 | 午夜精品久久久久久久99水蜜桃 | 成人av在线影院 | 九九免费观看视频 | 亚洲成人免费在线观看 | 中文字幕永久在线 | 91亚洲精品视频 | 国产一级黄色免费看 | 黄色特一级片 | 国产一区视频在线播放 | 91视频最新网址 | 日韩视频欧美视频 | 国产成人黄色网址 | 久久久久成人精品亚洲国产 | 日韩成人邪恶影片 | 丁香视频免费观看 | 正在播放一区 | 中文字幕亚洲欧美日韩 | 韩国精品在线 | 精品欧美日韩 | 日韩视频免费在线 | 夜添久久精品亚洲国产精品 | 欧美另类成人 | 日韩动态视频 | 亚洲精品一区二区三区高潮 | 在线国产精品视频 | 黄污视频大全 | 在线观看黄色av | 久久综合久久88 | 天天综合91 | 色婷婷精品大在线视频 | 91大神电影 | 中文字幕一区二区三 | 国产精品电影一区二区 | 中文字幕网站 | 国产小视频在线播放 | 久久人人爽人人片 | 99久在线精品99re8热视频 | 久久久久国产成人免费精品免费 | 天天综合天天综合 | 欧美日本一二三 | 国产亚洲精品成人av久久影院 | 精品福利在线 | 99视频在线免费看 | 国产精品久久久久久吹潮天美传媒 | 天天色官网 | 国产一级淫片在线观看 | 国产91aaa| 免费黄色av片 | 精品国产乱码一区二 | 久久久久久影视 | 免费看黄色小说的网站 | 亚洲国产日韩精品 | 日韩动漫免费观看高清完整版在线观看 | 最新婷婷色 | 在线欧美a | 免费av在线网站 | 91丨九色丨丝袜 | 天天干视频在线 | 四虎影视成人永久免费观看视频 | 伊人一级| 久久九九久久精品 | 97成人在线视频 | 精品久久久999 | 久久伦理 | 三级小视频在线观看 | 一区二区三区在线影院 | 中文字幕123区 | 久草久| 天天综合色天天综合 | 久久久久久毛片精品免费不卡 | 亚洲国产欧洲综合997久久, | 成人免费视频视频在线观看 免费 | 天堂网中文在线 | 成人中心免费视频 | 99久久精品免费看国产一区二区三区 | 国产视频久久久久 | 在线天堂亚洲 | av免费看av| av免费在线播放 | 超碰97国产在线 | 亚洲欧美在线观看视频 | 精品一区电影 | 人人插人人插 | 丝袜美女视频网站 | 91亚洲精品国产 | 国产高清视频免费在线观看 | 国产免费av一区二区三区 | 久久成人高清 | 激情黄色av | 久久不射网站 | 亚洲国产三级在线 | 亚洲免费公开视频 | 99精品欧美一区二区三区黑人哦 | 久久久精品 | 国产精品久久久久久久久久新婚 | 亚洲精品电影在线 | 久久国产视屏 | 日韩素人在线观看 | 日日日视频 | 国产精品一区二区麻豆 | 午夜精品电影一区二区在线 | 国产成人精品午夜在线播放 | 永久免费精品视频网站 | 在线韩国电影免费观影完整版 | 精品一区二区三区久久久 | 福利片视频区 | 国产精品视频免费 | 不卡电影一区二区三区 | 超碰在线色 | 99久久精品国产亚洲 | 五月婷婷综合在线观看 | 在线观看亚洲国产精品 | 综合网天天射 | 国产伦精品一区二区三区照片91 | 久久一区二区三区日韩 | 国产一二区精品 | 日韩一区二区三 | 国产精品99蜜臀久久不卡二区 | 久久久午夜精品理论片中文字幕 | 国产香蕉视频在线播放 | 久久视频这里有精品 | 99一级片| 狠狠五月婷婷 | 国产麻豆传媒 | 国产h在线播放 | 99热在线免费观看 | 亚洲涩涩色 | 日本乱码在线 | 亚洲精品2区| 丝袜美腿亚洲综合 | 97在线观看免费高清完整版在线观看 | 日韩在线视频网站 | 又黄又刺激视频 | 久av在线 | 欧美精品国产综合久久 | 久久久久久久久福利 | 久草剧场 | 天天搞天天干天天色 | 国产精品久免费的黄网站 | 麻豆视频一区二区 | 日韩av电影免费在线观看 | 国产成人一二片 | 在线播放91 | 婷婷色吧 | 天天天在线综合网 | 久草视频精品 | 亚洲精品欧美成人 | 五月婷婷狠狠 | 日日操天天爽 | 婷婷国产一区二区三区 | 日日操天天操夜夜操 | 中文字幕av最新更新 | 六月丁香社区 | 久久国产精品区 | 伊人婷婷 | 三级动图| 国产女教师精品久久av | 国产理论在线 | 免费碰碰| 欧美日韩1区 | 日韩在线观看视频中文字幕 | 国产精品一区二区中文字幕 | 精品国产一区二区三区久久久蜜臀 | 久久久久久国产精品久久 | 六月丁香婷婷网 | 久久婷亚洲五月一区天天躁 | 免费h视频 | 日批网站免费观看 | 91麻豆精品 | 在线观看网站av | 久章草在线 | 国产一区精品在线 | 性色av香蕉一区二区 | 美女在线国产 | www.com.日本一级 | 亚洲视频分类 | 91综合久久一区二区 | 欧美成a人片在线观看久 | 精品国产一区二区三区不卡 | 国产在线精品一区二区 | 成 人 黄 色 视频 免费观看 | 国产 日韩 欧美 中文 在线播放 | www免费视频com━ | 精品一区二区在线观看 | 99色人| 亚洲精品av在线 | 色婷婷国产在线 | 久久久久二区 | 成人免费视频免费观看 | 精品久久久久久久久久 | 91成人免费看片 | 亚洲欧美日韩一区二区三区在线观看 | 欧美精品三级 | 超碰在线98 | www.国产在线 | 人人搞人人搞 | 色偷偷88888欧美精品久久 | 国产二区av | 精品国产伦一区二区三区观看方式 | 99免费观看视频 | 国产少妇在线观看 | 亚洲精品在线观看视频 | 91成人午夜| 国产伦精品一区二区三区免费 | 成人福利在线观看 | av超碰在线| 欧美亚洲免费在线一区 | 久久免费视频精品 | 色婷婷综合久久久久中文字幕1 | 免费观看www小视频的软件 | 久久久黄视频 | 六月久久婷婷 | 国产精品久久一卡二卡 | 国产一区二区视频在线 | 国产精品99久久久久久久久久久久 | 日韩视频1 | 天干啦夜天干天干在线线 | 亚洲综合黄色 | 日本在线成人 | 国产私拍在线 | 视频一区二区视频 | 日韩成人精品一区二区三区 | 青青河边草观看完整版高清 | 三三级黄色片之日韩 | 国内外成人在线 | 午夜资源站 | 四虎永久网站 | 久久a v视频 | 看v片 | 波多野结衣视频一区 | 91桃花视频 | 中文字幕色婷婷在线视频 | 亚洲欧美综合 | 丁香六月婷婷激情 | 久久精品人 | 在线午夜 | 国产视频一区二区三区在线 | 国产麻豆视频在线观看 | 成片免费观看视频999 | 国产精品日韩在线观看 | 欧美视频xxx | 99精品视频一区二区 | 欧美性大战久久久久 | 五月婷婷网站 | 在线观看深夜视频 | 亚洲在线精品 | 天天躁日日躁狠狠躁 | 亚洲精品久 | 国产精品门事件 | 欧美日比视频 | 六月丁香伊人 | 超碰在线97国产 | 国产一级一片免费播放放 | 日韩大片免费观看 | 成人黄色在线观看视频 | 中文字幕精品一区久久久久 | 嫩草av在线 | 欧美激情精品久久久久久免费印度 | 91精品啪| 国产一区二区三区高清播放 | 国产一区二区在线免费播放 | 99视频在线观看视频 | 91精品国产电影 | 天天操天天色天天射 | 激情在线网站 | 日本精品久久久久中文字幕 | 日韩精品免费一区二区三区 | 黄色资源在线 | www国产一区| 欧美少妇xxx | 九热精品 | 精品国产一区二区久久 | 国产精品九九九 | 91看片淫黄大片一级在线观看 | 天天操天天怕 | 国产一级淫片免费看 | 免费能看的av | 91传媒在线观看 | 91禁在线看 | 91九色九色 | 精品产品国产在线不卡 | 丁香久久五月 | a亚洲视频 | 九九视频网 | 国产成人a亚洲精品v | 亚洲激情av | 91九色porny在线 | 99视频精品在线 | 能在线观看的日韩av | 久久美女高清视频 | 中文不卡视频在线 | 亚洲国产三级在线 | 国产黄色av影视 | 黄色软件在线看 | 午夜成人免费电影 | 国产精品videossex国产高清 | 成人一区不卡 | 久久无码av一区二区三区电影网 | 国产三级av在线 | 久热色超碰 | av看片网| 国产成人精品久久久久蜜臀 | 天天干天天操av | 欧美日韩精品网站 | 视频一区亚洲 | 国产丝袜 | 99精品在线观看 | 天天干天天做 | 国产婷婷vvvv激情久 | 91激情视频在线 | 欧美日韩中文视频 | 在线免费日韩 | 97人人人人 | 亚洲精品国精品久久99热一 | 亚洲综合精品在线 | 又黄又爽又无遮挡免费的网站 | 96久久欧美麻豆网站 | 国产免费大片 | av高清一区| 国产视频一区二区在线观看 | 久久99精品久久久久久久久久久久 | 热久久99这里有精品 | 开心激情网五月天 | avav片| 久久久久久久久免费视频 | 国产a级精品 | 国产91在| 日日爽| 亚洲视频99 | 久久免费高清视频 | 国产精品视频你懂的 | 亚洲精品国产高清 | 天天插天天爱 | 欧美黄色特级片 | 国产黑丝一区二区 | 亚洲三级在线播放 | 日韩av在线小说 | 亚洲精品国产精品乱码不99热 | 亚洲免费av一区二区 | 亚洲一级国产 | 免费一级片视频 | 毛片网站免费 | 特黄色大片 | 亚洲精品九九 | 欧美一级久久久 | www.天天干 | 国产成人一区三区 | 夜夜爽88888免费视频4848 | 久久伊99综合婷婷久久伊 | 天天草天天插 | 黄色a一级片 | 一区二区三区韩国免费中文网站 | 日韩视频一区二区三区在线播放免费观看 | 久久伊99综合婷婷久久伊 | 久久久久免费精品国产 | 亚洲免费婷婷 | 91高清视频 | 日韩免费观看视频 | 午夜丁香视频在线观看 | 九九久久久久久久久激情 | 欧美三人交| 俺要去色综合狠狠 | 日本一区二区高清不卡 | 青春草国产视频 | 欧美一区二区三区四区夜夜大片 | 西西大胆啪啪 | 久久久久久片 | 日日骑| 999精品 | 9ⅰ精品久久久久久久久中文字幕 | 99久久精品免费看国产 | 亚洲 欧洲av | 激情久久影院 | 国产高清在线永久 | 99精品国产一区二区三区不卡 | 500部大龄熟乱视频使用方法 | 精品黄色视 | 天天躁日日躁狠狠躁av麻豆 | wwwww.国产| 18久久久久 | 精品视频99| 色综合狠狠干 | 欧美一级性生活视频 | 国产视频精品久久 | 精品美女在线视频 | 久久久久久久久久久久国产精品 | 日日干夜夜操视频 | 久久精品视频18 | 久久久久久久久久影视 | 日本一区二区三区视频在线播放 | 热久久99这里有精品 | 久久久久高清 | 黄色大全视频 | 99精品欧美一区二区蜜桃免费 | 99久久精品免费一区 | 综合国产视频 | 成人毛片一区 | 欧美人交a欧美精品 | 欧美精品亚洲精品日韩精品 | 一区二区三区动漫 | 国产成人精品女人久久久 | 日韩有码在线播放 | 五月天综合网站 | 一区二区三区免费在线播放 | 一区二区观看 | 福利一区在线 | 国产剧情av在线播放 | 国产69精品久久久久99尤 | 亚洲国产精品一区二区久久hs | 国产精品亚州 | 欧美大片在线观看一区 | 欧美日韩在线精品一区二区 | 日韩中文字幕免费在线观看 | 夜夜躁日日躁狠狠久久av | 少妇精品久久久一区二区免费 | 国产精品第一页在线观看 | 亚洲综合狠狠干 | 国产欧美综合在线观看 | 欧美日韩高清免费 | 久久九九免费 | 国产美女在线精品免费观看 | 久久国产视频网 | 中文字幕刺激在线 | 精品久久久久久久久久久院品网 | 日精品 | 日韩 精品 一区 国产 麻豆 | 91免费看片黄 | av亚洲产国偷v产偷v自拍小说 | 成人av网页| 国产一级一级国产 | 久久久久久久久久久久久9999 | 一二三区在线 | 美女黄色网在线播放 | 黄av资源| 亚洲黄色片在线 | 免费福利片2019潦草影视午夜 | 在线观看成人毛片 | 超碰成人免费电影 | 97狠狠操 | 欧美在线视频精品 | 亚洲人成在线电影 | 精品一二三四在线 | 久久国产精品免费一区 | 亚洲高清视频在线观看 | 日韩免费av片| 在线观看不卡视频 | 精品福利在线视频 | 久久久久激情视频 | 精品免费久久久久久 | 中文字幕免费观看全部电影 | 天天操天天操天天操天天操天天操 | 正在播放 国产精品 | 狠狠色伊人亚洲综合网站色 | 92av视频 | 国内免费久久久久久久久久久 | 黄网站免费看 | 久久福利国产 | 在线观看一区视频 | 久久手机在线视频 | 婷婷精品国产一区二区三区日韩 | 天天综合操 | 日韩色视频在线观看 | 97手机电影网 | 免费亚洲黄色 | 国产无限资源在线观看 | 欧美精品乱码久久久久久按摩 | 久久99热这里只有精品国产 | 99久久99热这里只有精品 | 日韩在线看片 | 久草电影免费在线观看 | 婷婷99 | 欧洲一区精品 | 9999亚洲| 成人免费在线播放视频 | 91香蕉视频在线 | 黄色网址在线播放 | av在线播放亚洲 | 国产999精品久久久影片官网 | 永久免费视频国产 | 在线观看一区二区视频 | 麻豆免费在线视频 | 久久经典国产视频 | 国产系列 在线观看 | 精品国产亚洲日本 | 国产 欧美 日本 | 久久久久久久久影视 | 在线精品视频免费观看 | 欧美日韩免费在线视频 | 九九在线免费视频 | 日韩精品专区在线影院重磅 | 二区视频在线观看 | 亚洲色图激情文学 | 日本mv大片欧洲mv大片 | 欧美另类v | 亚洲精品66 | 午夜电影久久久 | 国产福利电影网址 | 欧美另类z0zx | 五月综合色婷婷 | 韩日精品在线 | 超碰在97 | 欧美在一区 | 91日韩免费 | 国产黄色成人av | 麻豆精品视频在线观看免费 | 免费三级大片 | 国产美女精彩久久 | 午夜视频在线观看一区 | 青青草国产免费 | 91看片网址 | 国产午夜精品av一区二区 | 日韩精品一区二区三区视频播放 | 日韩欧美在线第一页 | 免费在线播放黄色 | 国内免费久久久久久久久久久 | 久久久久久久久久网站 | 午夜视频在线观看一区二区 | 久久99国产精品二区护士 | 日韩,中文字幕 | 日韩av一卡二卡三卡 | 日本中文字幕在线看 | 99精品国产在热久久下载 | 久久国产免费 | 免费黄色a级毛片 | 亚洲国产精品传媒在线观看 | 天堂在线视频免费观看 | 亚洲精品国产精品99久久 | 在线看不卡av| 人人舔人人插 | 国产视频资源 | 四虎8848免费高清在线观看 | 国产一区成人在线 | 97超碰人人 | 婷婷在线网站 | 国产精品美女网站 | 91网免费观看 | 国产一区视频免费在线观看 | 在线精品视频免费播放 | 天天干天天做天天爱 | 久草精品资源 | 国产美腿白丝袜足在线av | 天天综合久久综合 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 伊人成人精品 | 国产精品男女视频 | 黄色成年网站 | 久久99国产精品 | 日韩免费一区二区在线观看 | 伊人天天干 | 九九九国产 | 五月天丁香 | 狠狠色噜噜狠狠 | 国产欧美综合视频 | 中国成人一区 | 久久国际影院 | 国产精品电影一区二区 | 久久96国产精品久久99漫画 | 亚洲经典视频在线观看 | 91精品国产高清自在线观看 | 久久久久女人精品毛片九一 | 久久精品视频网址 | a午夜在线 | 亚洲人成人天堂h久久 | 天天射天天添 | 成人资源在线观看 | 91久久黄色 | 日韩有码中文字幕在线 | 日韩av专区 | 日韩免费久久 | 国产国产人免费人成免费视频 | 欧美色图视频一区 | 在线观看你懂的网站 | 精品一区二区三区在线播放 | 国产视频一 | 丁香五月亚洲综合在线 | 日本九九视频 | 麻豆av电影 | www久久| 久久97精品 | 精品高清美女精品国产区 | 日韩成人一级大片 | 国产成人福利在线 | 在线观看小视频 | 最新超碰| 狂野欧美激情性xxxx | 狠狠狠色丁香婷婷综合久久88 | 久久高清av | 九九九热 | 亚洲综合色丁香婷婷六月图片 | 久久久久亚洲精品成人网小说 | 精品视频久久久 | 国产精品亚洲综合久久 | 91综合视频在线观看 | 伊人网综合在线观看 | 2022久久国产露脸精品国产 | av成人免费网站 | 狠狠操.com | 97人人模人人爽人人喊网 | 国产精品黄网站在线观看 | 香蕉在线观看视频 | 国产九九精品 | 欧美性大战 | av福利免费| 日韩久久久久久久久 | 日本黄色免费看 | 日韩av有码在线 | 色在线免费观看 | 成人 亚洲 欧美 | 国产色网| 久久一级电影 | 日韩精品一区二区三区水蜜桃 | 中文一区在线 | www.狠狠插.com| 波多野结衣久久精品 | 91成人精品一区在线播放69 | 天天操天天摸天天射 | 婷婷六月久久 | 日韩久久久久久久久久久久 | 精品人妖videos欧美人妖 | 激情av五月婷婷 | 精品一区二区在线观看 | 久久久久久久久久久影视 | 日韩精品首页 | 亚洲精品永久免费视频 | 黄色日本免费 | 精品国产一区二区三区不卡 | 精品在线观看一区二区 | 六月丁香伊人 | 天天干,天天插 | 麻豆视频成人 | 久久久久亚洲精品国产 | 国产一级二级三级在线观看 | 99re热精品视频 | 涩涩爱夜夜爱 | 中文字幕 婷婷 | 美女网站在线播放 | 成人a视频在线观看 | 久久精品国产一区二区三区 | 91精品免费在线视频 | 国产精品免费久久久久久久久久中文 | 日韩久久在线 | 国内久久久久 | 美女黄网久久 | www色com | 国产伦精品一区二区三区… | 久久久久久久久久亚洲精品 | 久久久久久久久毛片 | 亚洲丁香日韩 | 欧美片一区二区三区 | 日韩mv欧美mv国产精品 | 久久久久免费精品视频 | 99亚洲精品在线 | 亚洲美女视频网 | 在线草 | 美女黄久久 | 久久久精品网 | 日韩天堂在线观看 | www五月天婷婷 | 色悠悠久久综合 | 精品国产大片 | 日本在线观看一区 | 日韩在线观看三区 | 97超碰在线久草超碰在线观看 | 国产在线高清视频 | av成人免费在线看 | 四虎视频 | 国产精品久久亚洲 | 91精品91 | 日韩综合精品 | 久久与婷婷| 日韩有色 | 在线成人免费电影 | 国产精品精品国产婷婷这里av | 久久久久久美女 | 99视频这里只有 | 国产乱码精品一区二区三区介绍 | 中文在线8资源库 | 992tv人人网tv亚洲精品 | 国产精品一区二区在线观看免费 | 亚洲视频999 | 久久躁日日躁aaaaxxxx | 久久亚洲欧美日韩精品专区 | 99久久精品国产亚洲 | 国产免费叼嘿网站免费 | 天天操天天弄 |