精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

利用自動化平臺可以做的那億點事

開發 前端
接入自動化平臺后,方便了很多,也還有更多的使用場景待探索和交流。自動化最主要的目的是提效,時間節省下來后我們可以有更多的時間去思考異常場景以及復雜場景,做一些探索測試,減少因為用例設計遺漏而發生的問題。

0前言

相信大家對接口自動化已經不陌生了,這是幾乎我們每個迭代都會投入的事情,但耗費了這么多精力去編寫和維護,實際的收益如何呢?如果收益不好,是不是說明我們自動化case的實現方式、使用方式還有改進的地方呢?以下是接入得物接口自動化平臺后的一些實踐和想法,歡迎大家積極交流~

1淺談接口自動化

1.1   使用場景&可以帶來的效果

  • 給開發用 - 提高自測效率&提測質量

在接入自動化平臺前,我們只能本地拉取代碼->執行用例,所以執行者也只有測試人員。接入平臺后,通過宣導or分享,開發可以方便的找到需要的用例(用例模塊和標題需描述清晰),從而幫助他們造數或自測。

對于一些核心場景,即使業務迭代,通常結果也不會發生太大變化,這一類的場景case如果設計地較為穩定(當然這里的穩定不是只校驗code=200就行),可以分享給開發用于自測,根據開發同學使用后的反饋,他們自測簡單了許多,也有幫助他們發現過問題。

另外有一些本迭代內的新增接口,在接口評審完成后,我們可以提前編寫好,根據具體情況決定是先保證接口狀態的正常,后續再補充數據邏輯的校驗,還是直接先把case寫好。因為很多時候開發自測都只是調用本地代碼,提測后連接口都調不通,如果提測前可以先進行基本的校驗,就能減少冒煙測試被阻塞的概率。

  • 給測試用 - 提高測試效率

冒煙測試:針對改動點挑出涉及的接口case,再加上P0級別case,提測后先執行一遍看看是否正常,如果核心鏈路異常,阻塞了后續測試,就可以直接打回了。

驗證bug:有些復雜場景,測試鏈路較長,測試數據準備又很困難,很容易出現bug,而出現bug也就算了,偏偏改一遍還不一定能改好...這時候自動化的價值就體現了,把這些場景利用自動化實現,驗證bug時直接一鍵執行就能得出結果,大大節省了時間,同時也穩定了自己瀕臨暴躁的情緒。

回歸測試:在每次的bvt測試、覆蓋率跟進中,有些case可能并不涉及本次需求改動范圍,場景又比較簡單基礎,我們就可以利用自動化去覆蓋。執行通過,視具體情況可以簡單看一眼或者不再回歸。

  • 給需要的人用 - 簡易的造數工具

雖然我們現在有了造數平臺,但實現起來有一定的成本,一些場景可能除了自己沒有別的業務方有造數需求,并且場景很簡單,只需調個接口,改個數據表就行,那么最快的造數方法就是自動化腳本。現在有了自動化平臺,我們可以更好地分享給有造數需求的開發、產品、測試。

當然,以上效果的前提是我們的自動化case比較穩定,不能每次執行都一堆不通過,這樣時間都耗費在排查問題上了,效果會大打折扣,別人也不會再愿意使用。

1.2   什么時間去寫自動化case

通常一部分同學會在用例評審結束,開發提測之前進行case編寫,此時需要實現自動化的場景已經明確,基本上涉及的接口和出入參都已確定,自動化case的大致框架就形成了。這時候實現自動化,就可以最大化地發揮其價值,在上述涉及到的幾個場景都能投入使用。如果因為時間不夠或接口尚未明確,可以先梳理好需要實現自動化的場景步驟,在提測后一邊手動執行用例一邊補充接口參數和校驗點。針對級別較低的接口場景,也可以放在版本結束后再實現,只是效果會降低一些。

1.3   自動化維護成本太高怎么辦

我們維護的case一般有兩種,一是自己寫的,二是別人寫的。自己寫的,含著淚也要日常維護。別人寫的,由于大家的編碼風格千差萬別,在接入自動化平臺前,維護起來簡直困難重重,當我們為了通過率去推進case更新時,往往這一類的難以推進。現在接入了平臺,基本上統一了case模板,當因為需求變動需要更新時,有時只需要修改出入參和斷言即可,一定程度上已經降低了維護成本。

另外,當case經常報錯時,可以看看設計上是否能優化。有些依賴性強的數據,是否可以通過其他手段讓這部分數據穩定下來。比如發優惠券的場景,前提需要一張有效的券,那我們在發券前可以先獲取一張有效的券信息,或者在發券前先創建一張券,發完券后如果需要對券信息進行校驗,也通過變量的方式。針對單個測試點實現自動化時,可以盡可能地與其他測試點解藕,充分利用前置腳本,通過修改數據表等方式較少依賴。case中也可以設置失敗重試次數,減少由于環境不穩定等原因造成的失敗。

2在自動化平臺上的實踐

2.1   場景case的編寫

舉個例子:“得物App新客人群領取優惠券并觸發金額膨脹,多次觸發膨脹應該只有一次膨脹成功”。

這個case在迭代中提高了測試效率,并且在后續需求變更時,幫助開發自測,解決造數問題并發現了bug。

  • 由于業務特性,只有命中實驗組的新用戶才可領券。那么首先需要創建一個新用戶,并添加到ab白名單。然后在領券前先對領券狀態、用戶身份進行校驗;

圖片

  • 因為后臺會配置3套券,初次領券成功后,只會發放其中一套,所以在對領券接口的出參進行基本校驗后,還需對券記錄進行詳細的檢查,就需要使用后置腳本,獲取到券配置后再對數據表進行核對,需要校驗的表包括業務本身的領券記錄表和優惠業務側的賬戶表;
import json
import requests
from util.db_mysql import DBMySQL
from util.db_redis import DbRedis


def call(env_vars, g_vars, l_vars, sys_funcs, asserts, logger, **kwargs):
userId = l_vars.get('userId')
n = int(userId)%4


dbA = DBMySQL(env_vars.get("db.A"))
dbB = DBMySQL(env_vars.get("db.B"))




try:
sql_1 = "SELECT * FROM table_A WHERE user_id = %s;"%userId


# 領券后,用戶領券狀態校驗
user_coupon_info = dbA.select(sql_1)
logger.info(newbie_res)
asserts.assertEqual(user_coupon_info[0].get("status"), 1, msg="數據表領券狀態為true")
asserts.assertEqual(user_coupon_info[0].get("type"), 0, msg="當前券類型為0")
asserts.assertIsEmpty(user_coupon_info[0].get("coupon1"), msg="無資產1")
asserts.assertIsEmpty(user_coupon_info[0].get("coupon2"), msg="無資產2")
asserts.assertIsEmpty(user_coupon_info[0].get("coupon4"), msg="無資產4")
asserts.assertIsNotEmpty(user_coupon_info[0].get("info"), msg="券包信息非空")


#獲取用戶分組,確定用戶是命中了實驗組的
group = user_coupon_info[0].get("group")
asserts.assertNotEqual(group, 0, msg="用戶命中對照組,無膨脹券")


#獲取膨脹資產配置
sql_2 = "SELECT * FROM table_B WHERE id = 50%s and deleted=0"%group
logger.info("sql_2:"+sql_2)
coupon_config = dbA.select(sql_2)
logger.info("coupon_config:"+coupon_config)


content = json.loads(coupon_config[0].get("content_info"))
for i in range(3):
activityId = content[i]["activityId"]
l_vars.set('activityId_{}'.format(i+1), activityId)


# 優惠券表校驗
sql_3 = "SELECT * FROM a_coupon_%s WHERE user_id = %s and activity_id = %s;"%(n,userId,activityId)
logger.info("sql_3:"+sql_3)
coupon_res = dbB.select(sql_3)
logger.info("coupon_res:"+coupon_res)


if(i==0):
asserts.assertIsEmpty(coupon_res, msg="未到賬資產1")
if(i==2):
asserts.assertIsNotEmpty(coupon_res, msg="到賬資產3")




finally:
dbA.close()
dbB.close()
  • 領券成功后進行膨脹。查詢優惠側賬戶表,將查詢結果作為變量,在下一個接口的前置腳本中,進行券到賬的校驗;
import json
import requests
from util.db_mysql import DBMySQL
from util.db_redis import DbRedis


def call(env_vars, g_vars, l_vars, sys_funcs, asserts, logger, **kwargs):
call_param = sys_funcs.get_call_param()


userId = call_param.get('userId')
activityId = call_param.get('activityId')


dbB = DBMySQL(env_vars.get("db.B"))


if not userId:
user_var = l_vars.get(call_param.get('var_userId'))
userId = user_var
if not activityId:
activityId_var = l_vars.get(call_param.get('var_activityId'))
activityId = activityId_var
if not userId and not activityId:
raise '請傳入查詢條件'




try:
if not activityId:
sql = "SELECT * FROM a_coupon_%s WHERE user_id = %s;"%(int(userId)%4,userId)
elif not userId:
sql = "SELECT * FROM a_coupon_%s WHERE activity_id = %s;"%(n,activityId)
else:
sql = "SELECT * FROM a_coupon_%s WHERE user_id = %s and activity_id = %s;"%(int(userId)%4,userId,activityId)


logger.info(sql)
res = dbB.select(sql)
logger.info(res)
l_vars.set("select_tableB_res",res)


except Exception as e:
logger.info(f'查詢失敗【{str(e)}】')
raise e


finally:
dbB.close()
return res
import json
import requests


def call(env_vars, g_vars, l_vars, sys_funcs, asserts, logger, **kwargs):
select_tableB_res = l_vars.get('select_tableB_res')
asserts.assertIsNotEmpty(select_tableB_res, msg="到賬資產1")
  • 再次膨脹,應膨脹失敗,校驗接口code非200,再次核對券表,校驗確實只到賬了一張券。
import json
import requests


def call(env_vars, g_vars, l_vars, sys_funcs, asserts, logger, **kwargs):
select_tableB_res = l_vars.get('select_tableB_res')
asserts.assertEqual(len(select_tableB_res),1,msg="只到賬資產1一張")
  • 其他類似的場景,可以通過復制已有的用例或步驟直接使用。

圖片

圖片

  • 2.2   公共組件的編寫

  • 一些需要重復調用的功能,我們可以寫成公共組件,不僅方便自己,也方便他人。
  • 在編寫組件時,如果有入參,需要考慮參數值有可能是局部變量的場景。以下面的組件為例,實現的功能是通過數據庫查詢優惠券發放記錄表,可以針對用戶ID、優惠資產ID進行查詢。考慮到這兩個參數有可能是局部變量,由于目前公共組件類型的入參不支持${}參數類型,所以換一種方式來實現 —— 設置2個入參,一個為對應的value,一個為局部定義的key。腳本中,如果value未獲取到,則去變量空間中獲取局部變量。
  • 拿到查詢結果后也要盡可能的把結果存到變量空間,以供后續步驟的使用。
import json
import requests
from util.db_mysql import DBMySQL
from util.db_redis import DbRedis


def call(env_vars, g_vars, l_vars, sys_funcs, asserts, logger, **kwargs):
call_param = sys_funcs.get_call_param()


userId = call_param.get('userId')
activityId = call_param.get('activityId')


dbA = DBMySQL(env_vars.get("db.A"))


if not userId:
user_var = l_vars.get(call_param.get('var_userId'))
userId = user_var
if not activityId:
activityId_var = l_vars.get(call_param.get('var_activityId'))
activityId = activityId_var
if not userId and not activityId:
raise '請傳入查詢條件'




try:
if not activityId:
sql = "SELECT * FROM a_coupon_%s WHERE user_id = %s;"%(int(userId)%4,userId)
elif not userId:
sql = "SELECT * FROM a_coupon_%s WHERE activity_id = %s;"%(n,activityId)
else:
sql = "SELECT * FROM a_coupon_%s WHERE user_id = %s and activity_id = %s;"%(int(userId)%4,userId,activityId)


logger.info(sql)
res = dbA.select(sql)
logger.info(res)
l_vars.set("select_tableA_res",res)


except Exception as e:
logger.info(f'查詢失敗【{str(e)}】')
raise e


finally:
dbA.close()
return res

2.3   測試計劃的執行

配置平臺用例計劃,選擇依賴應用,按照自己的需要選擇執行頻次。然后再編輯計劃,配置匹配規則,可以看到關聯的自動化用例。

圖片

圖片

在用例平臺綁定自動化case,在轉測單平臺添加自動化計劃,已關聯的用例在執行結束后會自動更新執行狀態,提高手動執行的效率。

圖片

3平臺編寫case的常用方法

3.1   查詢DB數據庫

  • 在環境變量中配置數據庫連接信息
  • 在腳本中對數據表進行查詢
import json
import requests
from util.db_mysql import DBMySQL
from util.db_redis import DbRedis


def call(env_vars, g_vars, l_vars, sys_funcs, asserts, logger, **kwargs):
call_param = sys_funcs.get_call_param()


userId = call_param.get('userId')
activityId = call_param.get('activityId')


dbA = DBMySQL(env_vars.get("db.A"))


if not userId:
user_var = l_vars.get(call_param.get('var_userId'))
userId = user_var
if not activityId:
activityId_var = l_vars.get(call_param.get('var_activityId'))
activityId = activityId_var
if not userId and not activityId:
raise '請傳入查詢條件'




try:
if not activityId:
sql = "SELECT * FROM a_coupon_%s WHERE user_id = %s;"%(int(userId)%4,userId)
elif not userId:
sql = "SELECT * FROM a_coupon_%s WHERE activity_id = %s;"%(n,activityId)
else:
sql = "SELECT * FROM a_coupon_%s WHERE user_id = %s and activity_id = %s;"%(int(userId)%4,userId,activityId)


logger.info(sql)
res = dbA.select(sql)
logger.info(res)
l_vars.set("select_tableA_res",res)


except Exception as e:
logger.info(f'查詢失敗【{str(e)}】')
raise e


finally:
dbA.close()
return res

3.2   獲取應用ip地址作為host域名

  • 配置host環境變量:http://${sys.container.ip:app_name}:8888,app_name為服務名
  • 調用公共組件獲取ip,傳入服務名,返回ip
  • http請求時,host選擇對應的環境變量即可

3.3   一個case下多個隨機賬號切換請求

  • 隨機創建用戶后,獲取當前登錄信息,將請求頭存到本地變量
import json
import requests


def call(env_vars, g_vars, l_vars, sys_funcs, asserts, logger, **kwargs):
l_vars.set("user1",l_vars.get("sys.public.login.headers"))
  • 在下一次再次需要使用該賬號時,替換請求頭即可
import json
import requests


def call(env_vars, g_vars, l_vars, sys_funcs, asserts, logger, **kwargs):
l_vars.set("sys.public.login.headers", l_vars.get("user1"))

4使用平臺時遇到的一些問題

4.1   查詢redis,返回的數據帶b'

解決方法一:不使用平臺的工具,代碼如下:

import redis


redisConn = redis.Redis(host='redis.host', port=666, password='test123',db=1, decode_respnotallow=True)

解決方法二:redis平臺工具返回是數據是 bytes 類型,需要encoding一下

re = DbRedis.ger_redis(link_info)
test = re.get(test_key)
test_str = test.decode(encoding='utf-8')
key = key+test_str
re.set(key,"aaa")

4.2   update、insert、delete語句執行成功,數據庫卻未生效

解決方式:需要db.commit() ,select語句不需要該語句

dbA = DBMySQL(db_A)
sql = "INSERT INTO t(name,age) VALUES (%s, %s);"

try:
res = db.insert(sql,['lucy', 18])
db.commit()


finally:
dbA.close()

備注:delete方式,刪除數據量是0.會有error。

4.3   http組件json請求體中有中文,運行報錯

圖片

解決方式:請求頭配置 application/json;charset=UTF-8

圖片

5總結

接入自動化平臺后,方便了很多,也還有更多的使用場景待探索和交流。自動化最主要的目的是提效,時間節省下來后我們可以有更多的時間去思考異常場景以及復雜場景,做一些探索測試,減少因為用例設計遺漏而發生的問題。

責任編輯:武曉燕 來源: 得物技術
相關推薦

2017-12-17 21:58:18

2014-11-20 13:49:15

2011-01-20 10:17:25

ibmdwWeb

2022-03-30 09:43:19

jscodeshif自動化重構開發

2020-03-18 09:23:24

Python數據SQL

2010-09-27 09:13:36

Visual Stud

2023-06-20 10:11:25

自動化人工智能

2022-03-07 11:09:36

自動化企業技術

2018-04-26 06:05:20

自動化DevOpsIT

2009-04-16 17:14:52

2024-04-30 08:00:00

人工智能自動化文件處理

2018-07-25 13:47:02

2021-11-01 10:26:08

傳感器農業自動化物聯網

2022-02-23 12:21:09

自動化云計算基礎設施

2014-08-04 17:30:57

自動化運維puppet

2020-11-04 07:36:06

Redis二進制數據庫

2018-09-05 14:45:10

Python自動化機器學習

2018-01-15 10:30:00

AndroidPython 開發

2024-03-07 10:10:03

數據中心自動化公共云

2024-01-18 13:37:00

人工智能數據中心IT基礎架構
點贊
收藏

51CTO技術棧公眾號

2019日本中文字幕| 在线手机中文字幕| 精品国产不卡一区二区| 99久久精品国产观看| 日韩中文字在线| 欧美精品色婷婷五月综合| 亚洲午夜福利在线观看| 国产秀色在线www免费观看| 猫咪成人在线观看| 亚洲三级理论片| 国产精品福利在线观看网址| 精品国产乱码久久久久夜深人妻| 四虎久久免费| 日韩成人精品在线观看| 亚洲韩国欧洲国产日产av| 黄色污污在线观看| 一级黄色免费片| 欧美亚洲在线日韩| 一本到一区二区三区| 国产亚洲精品自在久久| 青青草原在线免费观看视频| 国产精品美女久久久久人| 国产精品萝li| 国产美女搞久久| 日韩不卡av在线| 嫩草伊人久久精品少妇av杨幂| 久久久三级国产网站| 欧美亚洲国产视频小说| 国产免费一区二区三区四区| 日韩国产91| 成人免费在线视频| 亚洲一区二区三区香蕉| 欧美人妻精品一区二区免费看| 亚洲国产网址| 色94色欧美sute亚洲线路一ni | 国产网址在线观看| 国产精品亚洲综合在线观看 | 国产精品xxxav免费视频| 亚洲欧美日韩久久精品| 日韩av大全| 中国女人一级一次看片| 日韩1区2区| 欧美日韩电影一区| 伊人精品久久久久7777| 国产99对白在线播放| 欧美日韩免费| 日韩精品视频观看| www.欧美日本| 国产午夜精品久久久久免费视| 久久久久久久久久电影| 成人免费在线看片| 亚洲天堂一区在线观看| 黑人操亚洲人| 91麻豆精品国产91久久久久久久久| 最新av在线免费观看| 亚洲黄色在线观看视频| 亚洲综合好骚| 久久精品成人欧美大片古装| 99riav国产精品视频| 欧美激情不卡| 亚洲国产精品麻豆| 亚洲精品一区二区毛豆| www.超碰在线.com| 日韩精品欧美精品| 国产成人精品久久二区二区| 亚洲视频重口味| 日韩伦理视频| 久久国内精品一国内精品| 强制高潮抽搐sm调教高h| 久久亚洲在线| 亚洲精品大尺度| 黄色激情在线观看| 91国内外精品自在线播放| 亚洲精品免费在线播放| 裸模一区二区三区免费| h片在线免费看| 国产成人亚洲综合色影视| 国产精品成人av性教育| 中文字幕人妻精品一区| 国内精品写真在线观看| 国产成人啪精品视频免费网| 中文字幕免费观看视频| 国产一区日韩二区欧美三区| 国产69久久精品成人看| 东京热一区二区三区四区| 综合视频在线| 日韩专区在线观看| 欧美成人精品欧美一级私黄| 日韩www.| 欧美激情亚洲激情| 中文字幕求饶的少妇| 综合国产视频| 俺也去精品视频在线观看| 久久免费视频99| 香蕉综合视频| 色哟哟亚洲精品一区二区| 中文字幕5566| 极品国产人妖chinesets亚洲人妖| 亚洲精品自在久久| 加勒比精品视频| 国产精品对白久久久久粗| 精品亚洲国产成av人片传媒| 天堂www中文在线资源| 日韩高清在线观看一区二区| 欧美精品三级日韩久久| 久久婷婷综合色| 成人精品电影在线| 欧美性猛交xxxx免费看| 欧美在线一区视频| 麻豆av在线播放| 亚洲综合另类小说| www成人免费| 午夜成年人在线免费视频| 亚洲特黄一级片| 国产免费观看高清视频| 美女高潮视频在线看| 亚洲aaa精品| 男女超爽视频免费播放| 电影在线观看一区| 天天av天天翘天天综合网色鬼国产 | 97超碰人人模人人人爽人人爱| 成人av网站免费观看| 91黄色精品| aa视频在线免费观看| 久久久久久久久久久黄色 | 人妻体内射精一区二区| 亚洲精品456| 美日韩丰满少妇在线观看| 丁香花五月激情| 国产精品大片| 91极品视频在线| 99视频国产精品免费观看a| 国产欧美一区二区三区在线老狼| 色阁综合av| 免费黄网站在线播放| 亚洲精品国产无套在线观 | 韩国v欧美v日本v亚洲v| 日本精品免费| 理论片午午伦夜理片在线播放| 欧美午夜激情小视频| 亚洲精品第二页| 欧美激情视频一区二区三区免费| 欧美黑人xxxx| 国产又大又黄视频| 成人一区在线看| 美脚丝袜一区二区三区在线观看| 丰满诱人av在线播放| 激情亚洲一区二区三区四区| 国产精品91av| 国产99亚洲| 精品国偷自产在线| 国产乡下妇女三片| 国产成人综合在线| 中国一级大黄大黄大色毛片| 999av小视频在线| 欧美午夜精品理论片a级按摩| 国产精品久久久久久久99| 国产精品45p| 91国产精品91| 日韩精品一二| 亚洲女子a中天字幕| 妞干网在线视频观看| 91综合久久爱com| 国产亚洲欧洲高清一区| 一区二区视频免费看| 久久av中文字幕片| 久久精品成人一区二区三区蜜臀| 中文字幕日本在线观看| 亚洲国产一二三| 波多野结衣xxxx| 水蜜桃久久夜色精品一区| 国产欧美va欧美va香蕉在线| 国产网站在线免费观看| 欧美成人在线直播| 九九热久久免费视频| 国产美女一区| 成人欧美一区二区三区视频xxx | 欧美激情一二三| 午夜福利理论片在线观看| 国产精品久久久久久久久免费桃花| 人妻少妇精品无码专区二区 | 高清av一区二区| 亚洲第一导航| 成人免费91| 久久久免费观看视频| 亚洲一区二区影视| 久久综合久久99| 国产玉足脚交久久欧美| 青草综合视频| 欧美福利视频在线| 色哟哟在线观看| 欧美久久婷婷综合色| 国产无码精品一区二区| 国产亚洲精品aa午夜观看| 无码专区aaaaaa免费视频| 奇米色欧美一区二区三区| 国产精品毛片a∨一区二区三区|国| 午夜影院免费视频| 欧美婷婷六月丁香综合色| 精品一区在线观看视频| 久久亚洲影视婷婷| 成人黄色一级大片| 欧美日韩伦理在线免费| 欧美中文在线字幕| 五月婷婷丁香网| 欧美日韩精品欧美日韩精品 | 最新国产拍偷乱拍精品| 97超碰最新| 91精品韩国| 欧美激情视频网站| 9色在线视频| 亚洲国内精品在线| 精品国产99久久久久久宅男i| 欧美日韩国产专区| 一级国产黄色片| 国产在线麻豆精品观看| 久久久久久久少妇| 激情综合在线| 精品一区二区日本| 亚洲午夜天堂| 在线观看亚洲视频| 在线免费看91| 色综合久久六月婷婷中文字幕| 激情小说中文字幕| 国产精品国模大尺度视频| 波多野结衣av在线免费观看| 国产高清精品在线| 亚洲成人天堂网| 狂野欧美一区| 亚洲一区二区精品在线观看| 亚洲热av色在线播放| 欧美日韩成人免费| 天堂av2024| 91黄色免费观看| 日韩欧美三级视频| 日本一区二区久久| 国产无遮挡猛进猛出免费软件| 偷拍欧美精品| 风间由美久久久| а天堂中文最新一区二区三区| 国产精品精品一区二区三区午夜版| 麻豆免费版在线观看| 国产69精品99久久久久久宅男| 羞羞网站在线看| 欧美福利视频网站| 久久香蕉av| 久久久久久亚洲| 成人在线高清免费| 久久露脸国产精品| 超碰97免费在线| 久久久久久有精品国产| 免费污视频在线| 午夜精品在线视频| avtt亚洲| 久久精品在线播放| 草莓福利社区在线| 精品亚洲aⅴ在线观看| 亚洲人午夜射精精品日韩| 精品偷拍一区二区三区在线看| 日本韩国一区| 在线观看日韩av| 久久综合网导航| 欧美人与性动交a欧美精品| 国产三级伦理在线| 91po在线观看91精品国产性色| 日韩欧美精品一区二区三区| 欧美专区第一页| 日本欧美韩国| 91成人理论电影| 加勒比视频一区| 日本一区美女| 久久久久电影| 久久精品国产sm调教网站演员| 国产亚洲福利| 九热视频在线观看| 日韩视频一区| 日本一道在线观看| 国产一区二区三区四区老人| 国产av国片精品| 日韩国产成人精品| 99精品视频国产| 99热精品一区二区| 男人的天堂免费| 成人av在线影院| 天天躁夜夜躁狠狠是什么心态| av成人免费在线观看| 国产三级av在线播放| 99久久免费国产| 亚洲精品国产精品国自产网站| 亚洲欧美日本韩国| 日韩一区二区视频在线| 亚洲国产综合在线| 在线观看日本网站| 日韩欧美久久久| 韩国免费在线视频| 亚洲精品网站在线播放gif| 素人av在线| 2019中文字幕在线免费观看| 岛国一区二区| 国产日韩三区| 午夜激情久久| 无码精品国产一区二区三区免费| 国内成人免费视频| 在线免费观看a级片| 亚洲欧美综合在线精品| 韩国av免费观看| 91麻豆精品国产自产在线观看一区| 午夜视频福利在线观看| 久久久www成人免费精品| 松下纱荣子在线观看| 3d精品h动漫啪啪一区二区| 国产99亚洲| 99热自拍偷拍| 国产精品 日产精品 欧美精品| 久久久精品成人| 疯狂蹂躏欧美一区二区精品| 国产成年妇视频| 日韩最新av在线| 色尼玛亚洲综合影院| 国产精品观看在线亚洲人成网| 中文字幕亚洲在线观看| 国产精品美女久久久久av福利| baoyu135国产精品免费| 亚洲人体一区| 日韩精品久久久久久| 变态另类丨国产精品| 亚洲午夜免费视频| 99久久久久久久| 亚洲福利视频二区| 你懂的在线播放| 深夜福利一区二区| 国产精品伦理| 久热国产精品视频一区二区三区 | 六月丁香婷婷激情| 免费一级欧美片在线播放| jjzz黄色片| 亚洲乱码中文字幕| 亚洲天堂狠狠干| 国产一区二区日韩| 外国成人直播| 免费中文日韩| 亚洲综合日韩| 成年人免费观看视频网站| 岛国视频午夜一区免费在线观看 | 丝袜情趣国产精品| 外国成人直播| 亚洲国产日韩欧美| 蜜桃视频在线一区| 亚洲熟妇一区二区| 亚洲精品免费播放| 成人毛片在线精品国产| 亚洲美女av黄| 性欧美超级视频| 香蕉久久夜色| 日本不卡高清视频| 日本精品一二三| 亚洲国产裸拍裸体视频在线观看乱了| www.激情五月| 久久久欧美一区二区| 久久久久观看| 久久久久久久久久久久久国产精品| 久久日韩粉嫩一区二区三区| 免费观看日批视频| 欧美本精品男人aⅴ天堂| 国产高清视频在线| 久久久久成人精品| 东京久久高清| 欧美激情国产精品日韩| 麻豆专区一区二区三区四区五区| 亚洲成a人无码| 舔着乳尖日韩一区| 九色网友自拍视频手机在线| 国产精品欧美激情在线播放| 国产电影一区二区在线观看| 香蕉视频xxxx| 中文av一区特黄| 国产精品一品二区三区的使用体验| 日韩国产精品视频| 国产超碰精品| 一级全黄肉体裸体全过程| 国产91丝袜在线播放0| 日韩中文字幕在线观看视频| 中文字幕亚洲综合| 免费日韩电影| 影音先锋欧美在线| 成人丝袜视频网| 欧美三级网站在线观看| 久久夜色精品国产| 国产91亚洲精品久久久| 成人在线观看www| 久久综合色之久久综合| 88av在线视频| 国产综合在线看| 日韩欧美大片| 欧美 日本 国产| 在线91免费看| 欧美xoxoxo| 男女激情免费视频| 中文字幕不卡一区| 视频污在线观看|