99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

PreScan C++自動化測試實戰(zhàn):從場景搭建到CI集成

PreScan C++自動化測試實戰(zhàn):從場景搭建到CI集成 簡介本資源是一套面向自動駕駛算法工程師與仿真測試開發(fā)者的PreScan C自動化測試實戰(zhàn)教程聚焦于通過C腳本高效構(gòu)建、執(zhí)行與驗證仿真測試用例解決手動調(diào)試耗時長、場景復(fù)現(xiàn)難、模塊驗證不系統(tǒng)等工程痛點。資源包共1729個文件以1367個HTML文檔含Doxygen生成的API參考手冊如prescan__api__scenario_8h.html、prescan__api__cameraparameters_8h.html等、190張PNG示意圖及169個JS交互腳本為主完整呈現(xiàn)模塊測試Demo代碼邏輯、API調(diào)用鏈路與測試結(jié)果可視化流程壓縮包僅3.67MB輕量易部署。已有1695人學(xué)習(xí)下載內(nèi)容覆蓋傳感器建模、車輛動力學(xué)控制、多模塊協(xié)同觸發(fā)等典型測試場景提供可直接運行的C腳本模板、標準化測試流程定義方法及仿真數(shù)據(jù)解析范例助力開發(fā)者快速掌握PreScan底層接口調(diào)用與自動化測試體系搭建能力。 做自動駕駛仿真測試的朋友應(yīng)該都有過這種經(jīng)歷在PreScan里手動拖場景、擺放傳感器、調(diào)參數(shù)、點運行然后瞪大眼睛盯著仿真窗口看結(jié)果。單跑一兩個場景還好一旦進入版本回歸或者算法迭代階段幾十上百個用例全靠手點那基本就是災(zāi)難現(xiàn)場。我之前負責過一個AEB系統(tǒng)的功能驗證光場景矩陣就排了三十多組每組還要換車速、換距離、換天氣手動跑完全部流程至少得一周而且中間稍微點錯一步就得推倒重來。后來我把整套流程搬到了C腳本自動化測試上用PreScan搭建場景把待測模塊編譯成C代碼再通過外部C程序統(tǒng)一調(diào)度仿真、注入控制指令、采集傳感器輸出、自動斷言測試結(jié)果。跑完三十組場景從一周壓縮到了幾個小時而且全部是無人值守。這篇文章就是想把這條路線完整地拆開講清楚從環(huán)境準備、通信機制到模塊測試Demo、模塊調(diào)用方式再到CI集成和一堆實際踩坑經(jīng)驗。內(nèi)容適合正在做PreScan二次開發(fā)或仿真測試自動化又對C有一定基礎(chǔ)的工程師參考。1. 為什么我最終選了C這條路線做PreScan自動化測試先說結(jié)論PreScan本身并不是一個只能靠GUI點點點的工具它背后有一套完整的腳本化和代碼化能力。只是國內(nèi)很多教程停留在“怎么搭場景、怎么出動畫”的層面很少有人把“用代碼驅(qū)動PreScan做測試”這條路走通。我當年也是對比了好幾條路才定下來用C這里把當時的技術(shù)選型邏輯說清楚。1.1 三條主流路線的對比第一條路線是MATLAB/Simulink腳本。PreScan和MATLAB/Simulink是深度綁定的場景里的傳感器、車輛動力學(xué)、V2X通信都通過Simulink模型流轉(zhuǎn)。很多測試腳本也是用.m文件寫的好處是跟模型貼合緊密改參數(shù)方便壞處也明顯跑自動化測試的機器必須裝完整版MATLAB和SimulinkLicense成本高而且.m腳本跑起來偏慢模型大了之后每一步都在跟MATLAB解釋器打交道。第二條路線是Python API。PreScan在較新版本里提供了Python接口可以加載實驗、改場景參數(shù)、啟動仿真。對于快速寫測試腳本來說Python確實舒服團隊里會的人也更多。但它的問題在于一旦你的測試對象是編譯后的C模型比如從Simulink生成的代碼或者你要跟其他C測試框架、CI系統(tǒng)做深度集成Python API這層就有點隔靴搔癢最后還得回到C/C層去處理。第三條路線就是C編譯模型加外部測試程序。PreScan 8.x之后的版本支持把Simulink模型編譯成C/C代碼生成獨立可執(zhí)行的仿真程序。你的場景、傳感器模型、控制算法全都編譯進去了運行時可以完全不依賴MATLAB環(huán)境。外部再寫一個C測試控制端通過UDP、TCP或者共享內(nèi)存跟仿真程序通信該發(fā)指令發(fā)指令該收數(shù)據(jù)收數(shù)據(jù)該斷言斷言。這條路的優(yōu)點是性能好、可部署性極強、跟Jenkins這類CI系統(tǒng)打通非常順而且代碼風(fēng)格跟量產(chǎn)車上的C代碼鏈路是一致的你測的東西和最終上車的東西之間鴻溝最小。1.2 我選擇C的幾個實際考量性能只是其中一個因素真正讓我定下來的是下面這幾點第一回歸測試的體量根本不支持每次全量啟動MATLAB。我們的場景庫大概有四五百條用例如果每條用例都從MATLAB冷啟動光啟動就吃掉大部分時間。編譯成C exe之后每條用例的啟動時間可以壓到幾秒鐘而且是脫離GUI跑的穩(wěn)定性高很多。第二測試斷言邏輯需要跨語言復(fù)用。我們團隊有從感知到規(guī)控多個模塊的測試大家的日志格式、斷言標準、上報方式都是C統(tǒng)一的測試端也用C最省事。你說用Python寫斷言也行但最終嵌入到已有的C測試框架里還是有轉(zhuǎn)換成本。第三也是最重要的一點無人值守時GUI模式根本不可靠。仿真跑著跑著彈出一個錯誤對話框整個任務(wù)掛在那里等人工點確定這在CI里就是災(zāi)難。C編譯產(chǎn)物配合命令行參數(shù)和靜默模式是完全不需要界面交互的天然適合自動化。當然這條路的前期學(xué)習(xí)曲線確實比MATLAB腳本要高不少你要同時熟悉PreScan的編譯流程、Visual Studio的工程配置、還有進程間通信。但整套東西一旦搭好收益是幾何級別的后面所有場景都可以往這個框架里疊。2. 環(huán)境準備Visual Studio版本匹配和C Runtime坑PreScan用C做自動化測試第一步要過的不是代碼關(guān)而是環(huán)境關(guān)。這個環(huán)境坑攔住了不少人而且網(wǎng)上資料相對零散我在這里把關(guān)鍵點集中講一遍。2.1 版本匹配是第一優(yōu)先級PreScan每個大版本對Visual Studio的版本要求是明確的不能隨便拿一個VS就開干。比如PreScan 8.x系列不同小版本對應(yīng)的VS從2015到2017、2019都有PreScan 2020之后對VS2019支持更完整。我當前主力環(huán)境是PreScan 2021.1配Visual Studio 2019社區(qū)版這個組合在C編譯和仿真運行時表現(xiàn)最穩(wěn)定。版本不匹配的典型癥狀是編譯報一堆莫名其妙的錯誤或者編譯產(chǎn)物在另外一臺機器上運行時提示找不到vcruntime140.dll、msvcp140.dll。這類問題十有八九是VS工具集版本和PreScan編譯產(chǎn)物依賴的Runtime不一致導(dǎo)致的。建議安裝順序先裝Visual Studio確認C桌面開發(fā)工作負載和對應(yīng)Windows SDK都裝好再裝PreScan。PreScan安裝過程中會檢測VS環(huán)境如果檢測不到說明你的VS版本不對或者組件不完整。提示Visual Studio社區(qū)版足夠用不需要企業(yè)版。重點是把“使用C的桌面開發(fā)”工作負載選上里面有MSBuild、Windows SDK、標準庫頭文件這些核心組件。2.2 Visual C Redistributable的隱性依賴PreScan編譯出來的exe在部署到其他測試機器上時目標機器上必須裝對應(yīng)版本的Visual C Redistributable。我做自動化測試時會準備一臺干凈的“跑批機器”上面不裝VS只裝Runtime。曾經(jīng)在這臺機器上跑編譯出來的仿真程序啟動就報“0xc000007b”錯誤查了半天是x86和x64的Runtime版本混了。后來我統(tǒng)一裝了VS2015-2022合并版Redistributable x64微軟官方提供聚合包才徹底解決。這條經(jīng)驗也適用于團隊內(nèi)部共享測試機。凡是跑PreScan C自動化測試的機器第一步就是確認Runtime版本其次才是確認PreScan裝沒裝。2.3 工具鏈進PATH換臺機器就“命令找不到”的坑如果你用命令行方式啟動仿真程序自動化測試必須走命令行相關(guān)工具鏈必須加進系統(tǒng)的PATH環(huán)境變量。這個坑我以前沒注意換了一臺新機器部署腳本后腳本里調(diào)用某個DLL或者exe時系統(tǒng)提示“無法識別”跟網(wǎng)上常說的“npm無法識別為cmdlet、函數(shù)、腳本文件或可運行程序的名稱”是一個道理——不是工具不存在是路徑?jīng)]進PATH或者當前終端會話沒有重新加載環(huán)境變量。我的做法是在測試機上建一個prescan_env.bat里面把所有需要的路徑一次性設(shè)置好每次跑CI任務(wù)前先調(diào)用它set PRESCAN_HOMEC:\Program Files\PreScan set VS_MSBUILDC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe set PATH%PRESCAN_HOME%;%VS_MSBUILD%;%PATH%這樣一來無論是Jenkins還是手動跑批每次都能拿到干凈的構(gòu)建環(huán)境不會因為某一次手動配置遺漏導(dǎo)致整個流水線掛掉。2.4 VS工程的核心配置項當你開始新建C測試工程有幾個配置項需要特別注意平臺選x64PreScan編譯產(chǎn)物的位數(shù)必須跟測試程序一致32位和64位混用會導(dǎo)致內(nèi)存映射失敗附加包含目錄要指向PreScan安裝目錄下的Application和Data相關(guān)路徑因為里面有些頭文件比如傳感器數(shù)據(jù)結(jié)構(gòu)在編譯時要用附加庫目錄指向PreScan安裝目錄下的庫文件位置如果你的測試程序要調(diào)PreScan的API比如修改場景參數(shù)還需要把對應(yīng)的.lib加入鏈接器輸入。這些配置在不同版本里路徑稍有差異核心原則是以你安裝的PreScan目錄下的實際頭文件和庫文件路徑為準不要在VS里寫死某個舊版本路徑否則升級PreScan后整個工程編譯不過去。3. PreScan與C之間的信息通道TCP、UDP和共享內(nèi)存怎么選環(huán)境搭好之后接下來要解決的是數(shù)據(jù)怎么從PreScan仿真程序里出來進到我們的C測試程序里。這是整個自動化測試體系的地基。3.1 PreScan的數(shù)據(jù)出口PreScan場景里的攝像頭、激光雷達、毫米波雷達、GPS/IMU這些傳感器數(shù)據(jù)都會進到Simulink模型里。如果你想讓外部C程序讀取這些數(shù)據(jù)通常有兩條路一條是在Simulink模型里放置PreScan自帶的外部通信模塊比如TCP/UDP Sender把傳感器原始輸出或后處理結(jié)果直接發(fā)到指定端口另一條是通過PreScan與Simulink之間的共享內(nèi)存接口把數(shù)據(jù)寫到一塊約定的內(nèi)存區(qū)C程序直接映射這塊內(nèi)存來讀。我在項目里一般都走外部通信模塊這條路因為它直觀、可控而且天然支持跨機器部署比如一臺機器跑仿真另一臺機器跑測試控制端。共享內(nèi)存在單機高性能場景下效率極高但跨機器就無能為力了。3.2 三種通道的對比和選型邏輯通道類型實時性跨機器支持復(fù)雜度適合場景UDP高但有丟包風(fēng)險支持低傳感器數(shù)據(jù)量大的廣播場景單機或局域網(wǎng)內(nèi)跑批TCP中可靠傳輸支持中控制指令、調(diào)試日志、需要對包做可靠校驗的場景共享內(nèi)存最高納秒級不支持中單機跑大規(guī)模傳感器數(shù)據(jù)如激光雷達點云時的首選我慣用的組合是傳感器數(shù)據(jù)走UDP或共享內(nèi)存控制指令走TCP。原因很簡單傳感器數(shù)據(jù)量往往很大激光雷達一幀幾千個點攝像頭一幀幾十萬字節(jié)用TCP保證可靠性但會拖累吞吐控制指令量小但絕對不能丟所以走TCP讓協(xié)議棧來保證可靠性。3.3 數(shù)據(jù)格式設(shè)計字節(jié)對齊和字節(jié)序的教訓(xùn)通信通道定了之后數(shù)據(jù)格式是另一個大坑。PreScan的輸出是float或double數(shù)組比如雷達輸出目標距離、相對速度、方位角攝像頭輸出車道線系數(shù)IMU輸出加速度和角速度。C這邊要把這些值映射成結(jié)構(gòu)體。這里有一個很多人會踩的坑結(jié)構(gòu)體字節(jié)對齊。默認情況下C編譯器會在結(jié)構(gòu)體成員之間插入填充字節(jié)如果PreScan發(fā)送端是多字節(jié)連續(xù)buffer而你的C接收端是帶對齊的結(jié)構(gòu)體兩邊對不上數(shù)據(jù)解析就是錯亂的。我曾經(jīng)因為漏了#pragma pack雷達目標的速度值讀出來全是不合理數(shù)字排查了半天才意識到是結(jié)構(gòu)體對齊問題。所以我在定義通信協(xié)議結(jié)構(gòu)體時一律這么做#pragma pack(push, 1) struct RadarTarget { float range; // 目標距離單位米 float velocity; // 相對速度單位m/s float azimuth; // 方位角單位弧度 int targetId; // 目標ID unsigned char status; // 狀態(tài)標志位 }; #pragma pack(pop)字節(jié)序問題相對少見因為PreScan和C測試程序通常跑在同架構(gòu)的Windows機器上只要不跨平臺都不會遇到大小端不一致的問題。但如果你的場景里有嵌入式設(shè)備或者Linux機器就一定記得在協(xié)議里寫明字節(jié)序并加一個magic number做校驗。3.4 一個簡單的UDP接收端示例下面這是我在測試程序里實際用過的UDP接收代碼骨架主要負責接收PreScan發(fā)出的仿真狀態(tài)和傳感器數(shù)據(jù)#include winsock2.h #pragma comment(lib, ws2_32.lib) #include cstdio #include cstring #pragma pack(push, 1) struct SimStatus { double simTime; // 仿真時間單位秒 float egoSpeed; // 自車速度 float egoSteerAngle; // 自車轉(zhuǎn)向角 int frameId; // 幀序號 }; #pragma pack(pop) int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), wsaData); SOCKET sock socket(AF_INET, SOCK_DGRAM, 0); sockaddr_in localAddr{}; localAddr.sin_family AF_INET; localAddr.sin_port htons(5600); localAddr.sin_addr.s_addr htonl(INADDR_ANY); bind(sock, (sockaddr*)localAddr, sizeof(localAddr)); char buf[256]; SimStatus status; while (true) { int len recvfrom(sock, buf, sizeof(buf), 0, nullptr, nullptr); if (len sizeof(SimStatus)) { memcpy(status, buf, sizeof(SimStatus)); printf(t%.3f v%.2f steer%.4f frame%d\n, status.simTime, status.egoSpeed, status.egoSteerAngle, status.frameId); } } return 0; }這個示例的核心價值不在于代碼本身而在于演示了“PreScan發(fā)送、C接收”這種解耦關(guān)系。測試程序只需要關(guān)心端口號和結(jié)構(gòu)體定義完全不需要理解PreScan內(nèi)部怎么跑這是自動化測試可以穩(wěn)定運行的前提。4. 模塊測試Demo搭一個車道保持模塊的C測試用例環(huán)境通了、通信方式定了現(xiàn)在進入正題怎么測一個具體模塊。我拿車道保持Lane Keeping Assist模塊舉例演示從PreScan場景到C測試用例的完整鏈路。4.1 場景側(cè)的準備在PreScan GUI里搭一個直道場景道路畫三條車道線自車起始位置在中間車道初始橫向偏移給一點比如0.3米這樣LKA模塊有糾偏的必要。車速設(shè)成80km/h仿真時長15秒。傳感器用前視攝像頭放在車頭擋風(fēng)玻璃位置檢測車道線輸出車道橫向偏移量、車道曲率和航向角偏差。這些量會進Simulink模型。在Simulink模型里把攝像頭輸出接到一個LKA控制算法可以是PreScan自帶的模板也可以是你自己開發(fā)的Simulink模塊算法輸出目標方向盤轉(zhuǎn)角接到車輛的轉(zhuǎn)向執(zhí)行器。為了讓C測試程序能控制測試流程我在模型里加了一個外部接口輸入端口外部控制允許標志位1表示允許LKA介入輸出端口LKA激活狀態(tài)、目標轉(zhuǎn)角、實際轉(zhuǎn)角、橫向偏移量。這樣就把待測模塊的邊界定義清楚了輸入端是外部使能信號輸出端是模塊行為和效果指標。4.2 編譯成C仿真程序Simulink模型擺好后在PreScan里選擇編譯生成C代碼。這個過程PreScan會調(diào)用VS的編譯器把整個模型編譯成一個可執(zhí)行的仿真程序或者動態(tài)庫。編譯時間取決于模型復(fù)雜度這個例子大約兩分鐘。編譯完成后你會得到一個帶命令行參數(shù)的exe。啟動時指定實驗文件名ExSimulationRun.exe -experiment LaneKeepingDemo.pb后面可以跟-silent這種參數(shù)表示靜默運行不彈GUI。我從這以后所有自動化測試都默認加靜默模式杜絕了彈窗掛任務(wù)的問題。4.3 C測試控制程序的完整結(jié)構(gòu)測試控制程序要做的事情很清晰啟動仿真進程、建立通信、按測試步驟注入指令、讀取狀態(tài)并斷言、最后結(jié)束仿真生成報告。核心代碼框架大致是這樣// LKA_module_test.cpp #include windows.h #include tlhelp32.h #include winsock2.h #pragma comment(lib, ws2_32.lib) #include cstdio #include thread #include chrono // 與PreScan模型中的外部接口定義保持一致 #pragma pack(push, 1) struct ModuleInput { int enableFlag; // 1允許LKA介入 int reserved[7]; }; struct ModuleOutput { double simTime; float lkaActive; // LKA是否激活 float targetSteer; // 目標轉(zhuǎn)角 float actualSteer; // 實際轉(zhuǎn)角 float lateralOffset; // 橫向偏移量 int frameId; }; #pragma pack(pop) int main() { // 1. 啟動PreScan仿真進程 STARTUPINFO si{sizeof(si)}; PROCESS_INFORMATION pi; char cmdLine[] SimulationRun.exe -experiment LaneKeepingDemo.pb -silent; if (!CreateProcess(nullptr, cmdLine, nullptr, nullptr, FALSE, 0, nullptr, nullptr, si, pi)) { printf(Failed to start Prescan simulation.\n); return -1; } CloseHandle(pi.hThread); // 2. 建立TCP連接控制通道 // 這里用socket連接仿真程序的9999端口代碼略 // 3. 等待仿真就緒讀取初始輸出 bool simReady false; for (int i 0; i 50; i) { // 嘗試讀取ModuleOutput若simTime 0則認為就緒 // 如果讀到有效數(shù)據(jù)simReady true; break; std::this_thread::sleep_for(std::chrono::milliseconds(200)); } if (!simReady) { printf(Simulation not ready in time.\n); TerminateProcess(pi.hProcess, -1); return -2; } // 4. 注入使能信號讓LKA開始工作 ModuleInput input{}; input.enableFlag 1; // 發(fā)送到仿真程序代碼略 // 5. 持續(xù)監(jiān)控輸出執(zhí)行斷言 bool passed true; for (int frame 0; frame 750; frame) { // 15s * 50Hz ModuleOutput out{}; // 從TCP讀取輸出數(shù)據(jù)代碼略 // 橫向偏移量應(yīng)逐漸收斂到0附近 if (frame 100 frame 700) { if (out.lateralOffset 0.5f || out.lateralOffset -0.5f) { passed false; printf(FAIL at frame %d, lateralOffset %.3f\n, frame, out.lateralOffset); break; } } std::this_thread::sleep_for(std::chrono::milliseconds(20)); } // 6. 清理并輸出結(jié)果 input.enableFlag 0; // 發(fā)送停止信號 TerminateProcess(pi.hProcess, -1); printf(Test %s\n, passed ? PASS : FAIL); return passed ? 0 : 1; }代碼不算復(fù)雜但有幾個關(guān)鍵點值得展開說。4.4 斷言設(shè)計別只盯著單個數(shù)據(jù)點初學(xué)者寫斷言最容易犯的錯是在某個時間點采集一個值如果小于閾值就算通過。這在仿真測試里很不靠譜因為傳感器有噪聲控制算法的響應(yīng)有動態(tài)過程單個點的瞬時值可能毫無意義。我寫斷言的思路是分三層第一層模塊行為斷言。比如LKA被激活后目標轉(zhuǎn)角不能突跳超過某個限值比如0.3弧度這能抓到控制指令抖振和異常突變。第二層控制效果斷言。比如橫向偏移量應(yīng)該在3秒內(nèi)收斂到±0.3米以內(nèi)而不是一開始就必須小于某個值。這稱為“時間窗口閾值”的斷言方式更能反映控制系統(tǒng)收斂性。第三層穩(wěn)定性斷言。在最后5秒內(nèi)橫向偏移量的方差不能超過某個值避免出現(xiàn)持續(xù)震蕩卻恰好沒越界的情況。如果只做第一層和第二層某些不穩(wěn)的模塊也可能蒙混過關(guān)把第三層加進去整個測試的嚴謹度就上來了。5. 模塊調(diào)用教程共享內(nèi)存與單一實例管理器標題里還特別提到了“模塊調(diào)用教程”這個“模塊調(diào)用”在PreScan的語境里其實包含兩種含義我把兩種都講清楚。5.1 含義一C測試程序調(diào)用PreScan編譯產(chǎn)物的API這是最常見的一種也是我在前一章展示的方式PreScan把Simulink模型編譯成exe或DLLC測試程序通過進程間通信UDP/TCP/共享內(nèi)存調(diào)用它。這種調(diào)用的本質(zhì)是外部程序跟仿真程序之間的數(shù)據(jù)交換核心是接口協(xié)議要穩(wěn)定。這里有個深坑如果你每次測試都啟動一個新的PreScan仿真進程啟動開銷是很大的。一個復(fù)雜場景從進程創(chuàng)建到仿真就緒可能要10到30秒。如果跑幾百個用例光啟動就浪費大量的時間。所以模塊調(diào)用的一個重要設(shè)計模式是“復(fù)用常駐進程”啟動一個仿真進程后不要急著銷毀而是讓它運行在一個待命場景里測試程序通過命令通道給它下發(fā)場景切換指令、參數(shù)修改指令一個仿真進程服務(wù)多個測試用例每個用例之間只做場景重置和數(shù)據(jù)清空。這類似于你在服務(wù)器端開了一個worker進程客戶端不斷發(fā)任務(wù)給它處理而不是來一個任務(wù)就fork一個新進程。PreScan社區(qū)把這種機制叫做單一實例管理器Single Instance Manager實際用起來非常簡單在PreScan編譯產(chǎn)物的啟動參數(shù)里加一個-single它就會監(jiān)聽指定的端口接收后續(xù)的測試請求。5.2 含義二把自定義C模塊掛載到PreScan模型中另一種“模塊調(diào)用”是指你自己寫了一個C算法模塊想把它作為PreScan模型的一部分參與仿真而不是通過外部通信端口跟PreScan交互。這種情況在PreScan里的標準做法是S-Function。你在Simulink里添加S-Function模塊通過mex命令編譯C源碼生成對應(yīng)的可執(zhí)行文件然后在PreScan模型里實例化它。編譯后的S-Function會和PreScan傳感器模型、車輛動力學(xué)模型一起參與整個仿真鏈路數(shù)據(jù)走的是Simulink內(nèi)部信號線不是外部網(wǎng)絡(luò)。S-Function方法適合把已有C算法嵌入到“仿真在環(huán)”的調(diào)試過程中但如果你只是想在外部控制PreScan跑測試不必走這條路。我自己的體會是S-Function更適合算法開發(fā)階段的快速驗證而外部C測試程序更適合系統(tǒng)級的自動化回歸兩者最好不要混在一起否則調(diào)試起來定位問題會很別扭。5.3 共享內(nèi)存調(diào)用的完整實現(xiàn)片段對于性能要求極高的模塊調(diào)用比如激光雷達點云處理UDP和TCP都不夠看共享內(nèi)存是唯一靠譜的選擇。我給出Windows下共享內(nèi)存的典型實現(xiàn)這段代碼也可以直接復(fù)用到你的測試框架里。服務(wù)端PreScan側(cè)通常由PreScan的共享內(nèi)存發(fā)送模塊完成// 創(chuàng)建共享內(nèi)存區(qū) HANDLE hMapFile CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(LidarFrame), LPrescanLidarMemory); LPVOID pBuf MapViewOfFile( hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0); auto* pLidar static_castLidarFrame*(pBuf); // PreScan側(cè)持續(xù)寫入點云數(shù)據(jù)客戶端C測試程序側(cè)HANDLE hMapFile OpenFileMapping( FILE_MAP_ALL_ACCESS, FALSE, LPrescanLidarMemory); if (hMapFile nullptr) { printf(OpenFileMapping failed, error%d\n, GetLastError()); return -1; } LPVOID pBuf MapViewOfFile( hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0); auto* pLidar static_castLidarFrame*(pBuf); // 循環(huán)讀取點云數(shù)據(jù) for (int i 0; i pLidar-pointCount; i) { // 處理pLidar-points[i] }共享內(nèi)存需要注意兩個細節(jié)一是進程同步不能一邊寫一邊讀最好用互斥體或事件來協(xié)調(diào)讀寫時機二是句柄釋放每次測試結(jié)束后要調(diào)用UnmapViewOfFile和CloseHandle否則句柄泄漏多了之后長時間跑批會出現(xiàn)內(nèi)存映射失敗表現(xiàn)為“OpenFileMapping失敗錯誤碼5拒絕訪問”或者“錯誤碼8存儲空間不足”。5.4 為什么不要讓模塊調(diào)用變成“每次新建進程”我在項目里吃過這個虧。早期為了圖省事每條測試用例都用CreateProcess啟動一個新的PreScan仿真進程跑完立即殺掉。結(jié)果一天跑下來機器的句柄數(shù)和內(nèi)存碎片暴漲從下午開始就頻繁出現(xiàn)仿真啟動失敗或者共享內(nèi)存無法創(chuàng)建。后來我把架構(gòu)改成“常駐仿真進程端口分發(fā)測試請求”的模式一組用例只啟動一個仿真進程用例之間通過協(xié)議切換場景問題直接消失。這個經(jīng)驗很重要PreScan仿真程序雖然支持命令行啟動但它不是為“一秒啟動、一秒銷毀”的短生命周期場景設(shè)計的。它的資源初始化包括加載場景、初始化傳感器模型、分配顯存、初始化通信端口這些都需要時間。設(shè)計自動化測試框架時把“仿真進程生命周期”和“測試用例生命周期”徹底解耦是保持長時間穩(wěn)定運行的關(guān)鍵。6. 自動化測試框架從單條用例到批量回歸和CI集成單個測試用例跑通之后接下來就是把它擴展成一套能支撐幾百條用例的自動化框架。這一步做得不好前面所有功夫都會白費。6.1 測試用例的標準化流程我定義了一套標準流程每條用例都必須遵循preStart準備場景文件、參數(shù)配置檢查端口和共享內(nèi)存是否可用start啟動仿真進程等待就緒信號run執(zhí)行測試步驟持續(xù)采集數(shù)據(jù)check根據(jù)斷言規(guī)則判定pass/failstop關(guān)閉仿真保存日志和現(xiàn)場數(shù)據(jù)record把結(jié)果寫入?yún)R總報告。整套流程用Python寫了一個調(diào)度器因為Python在文件處理、流程編排和Jenkins集成方面確實順手。調(diào)度器的邏輯很簡單遍歷用例清單對每條用例調(diào)用對應(yīng)的C測試exe傳參指定場景和用例ID然后檢查返回值。測試exe返回0表示通過非0表示失敗調(diào)度器只負責記錄和匯總。我不建議把斷言邏輯寫在調(diào)度器里這會讓責任邊界模糊排查問題的時候會互相甩鍋。6.2 日志規(guī)范讓失敗可追溯自動化測試最讓人頭疼的是“這條用例失敗了但為什么失敗”如果日志里什么都沒有那就只能重新手動跑一遍場景那自動化就失去了意義。我在設(shè)計日志時定了幾個硬性要求每條用例一個獨立目錄按時間和用例ID命名仿真程序的控制臺輸出必須重定向到日志文件C測試程序的每個關(guān)鍵步驟都要打點包括啟動時間、就緒時間、注入指令時間、斷言判定時間失敗時必須把當時的輸入數(shù)據(jù)和輸出數(shù)據(jù)快照保存下來。日志格式我用JSON每行一個事件方便后續(xù)用腳本做統(tǒng)計分析{time: 12.345, event: assert, module: LKA, param: lateralOffset, value: 0.312, threshold: 0.5, pass: true} {time: 13.201, event: assert, module: LKA, param: lateralOffset, value: 0.537, threshold: 0.5, pass: false}這樣的日志出問題之后直接拉出來看能快速定位是哪個時刻哪個參數(shù)越界不需要開GUI復(fù)現(xiàn)。6.3 靜默模式與超時看門狗前面提到過非預(yù)期彈窗會導(dǎo)致自動化測試掛死。除了強制使用靜默模式之外我還給調(diào)度器加了一個超時看門狗如果某條用例運行時間超過設(shè)定上限通常是正常耗時的1.5倍調(diào)度器直接殺掉對應(yīng)進程把這條用例標記為fail然后繼續(xù)跑下一條??撮T狗的粒度要分兩層第一層是單條用例超時第二層是總跑批時間超時。有一次我跑一個大型場景矩陣某條特殊場景導(dǎo)致仿真卡死如果沒有超時看門狗整個流水線會卡在那里直到Jenkins的全局超時把它殺掉白白浪費幾個小時。加了看門狗之后單條用例卡住只影響這一條流水線整體的“不中斷能力”才是自動化測試能不能真正落地的關(guān)鍵。6.4 Jenkins集成端到端的持續(xù)回歸CI集成的最終目標是代碼提交后自動觸發(fā)PreScan回歸測試跑完出報告結(jié)果回傳到開發(fā)人員。我用的Jenkins流水線大致是這樣pipeline { agent { label prescan-win } stages { stage(Checkout) { steps { checkout scm } } stage(Build C Test) { steps { bat %VS_MSBUILD% prescan_test.sln /p:ConfigurationRelease /p:Platformx64 } } stage(Run PreScan Tests) { steps { bat python run_prescan_tests.py --configtest_suite.json } } stage(Publish Report) { steps { publishHTML(target: [ allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: test_output, reportFiles: index.html, reportName: PreScan Test Report ]) } } } post { always { junit test_output/*.xml } } }核心點是編譯C測試程序用MSBuild跑測試用Python調(diào)度器報告用HTML或JUnit XML格式。這樣CI系統(tǒng)就能把測試趨勢畫出來哪次提交讓某個場景掛了一眼就能看出來。6.5 結(jié)果報告從“跑完了”到“看得懂”測試報告并不是一個簡單pass/fail列表就夠的。我見過很多團隊CI跑完出一堆紅色但項目負責人根本不知道這意味著什么因為沒有上下文。我的做法是在測試用例的配置里加元信息包括需求編號、模塊負責人、嚴重等級。報告里不僅顯示pass/fail還要顯示“失敗用例屬于哪個模塊、影響的是哪個需求”。后來我還加了一個趨勢圖同一個用例在最近30次流水線里的通過率。這個趨勢圖幫助團隊發(fā)現(xiàn)了很多“偶發(fā)問題”——有些用例不是必掛而是隔三差五掛一次往往指向傳感器噪聲閾值設(shè)置不合理或者場景初始化不干凈。沒有趨勢圖這種偶發(fā)問題很容易被當作“環(huán)境抖動”忽略掉。7. 踩坑經(jīng)驗PreScan C自動化測試中真實遇到的高頻問題最后把我在這個領(lǐng)域里踩過的最有價值的坑集中列一遍。這些問題沒有一個在官方文檔里寫得很清楚但實際項目里幾乎都會遇到。7.1 VS版本不一致導(dǎo)致的DLL地獄前面提過這是第一位的老大難。PreScan編譯的仿真程序、你自己寫的C測試程序、還有第三方庫如果三者的VS工具集版本不一致最終結(jié)果就是運行時報找不到DLL或者報錯信息含糊不清。最氣人的是同樣的代碼在開發(fā)機上跑得好好的換到測試機就掛了。我的解決方案是項目里所有C工程統(tǒng)一用同一個VS版本編譯并且把版本信息寫進構(gòu)建腳本測試機上提前裝Visual C Redistributable聚合包每次換新開發(fā)機時先在干凈環(huán)境里做一次完整編譯和跑批驗證不要等到部署那天才暴露問題。7.2 PreScan仿真啟動慢超時誤報很多場景的仿真啟動時間跟機器負載強相關(guān)第一次冷啟動可能8秒但同一臺機器在CI高峰期可能20秒。如果測試程序里寫死了“10秒內(nèi)必須就緒”那高峰期就會大量誤報fail。我的處理方式是啟動等待時間設(shè)成正常值的3倍同時采用“輪詢物理時間”而不是“固定sleep”的方式。每200毫秒探測一次仿真是否就緒最多等待90秒這樣既不會誤報也不會因為過度等待拖慢整體節(jié)奏。7.3 共享內(nèi)存句柄泄漏長時間跑批后測試程序突然出現(xiàn)共享內(nèi)存訪問失敗基本都是句柄泄漏。Windows的句柄數(shù)量不是無限的如果你每條用例都OpenFileMapping但從來CloseHandle跑幾百條用例之后必然爆掉。解決辦法是每次MapViewOfFile之后必須在作用域結(jié)束前UnmapViewOfFile和CloseHandle用RAII封裝讓資源生命周期管理交給C的析構(gòu)函數(shù)內(nèi)部自檢機制每隔100條用例打印一次當前句柄數(shù)如果異常增長會立刻報警。7.4 端口被占用UDP收不到數(shù)據(jù)PreScan仿真程序每次啟動都會綁定固定的UDP端口如果上一個仿真進程沒有被完全殺掉端口還處于占用狀態(tài)新啟動的仿真程序就會綁定失敗表現(xiàn)是“UDP收不到任何數(shù)據(jù)”而日志里什么都沒有。我后來在啟動腳本里加了一步啟動仿真前先檢查端口占用情況如果有殘留進程就強制殺掉。netstat -ano | findstr :5600 taskkill /F /PID pid同時給仿真程序的進程名統(tǒng)一命名調(diào)度器在啟動前會把上一個殘留實例清掉避免因為異常退出導(dǎo)致進程殘留。7.5 結(jié)構(gòu)體對齊、字節(jié)序和字段類型不匹配通信協(xié)議里結(jié)構(gòu)體對齊不匹配是C測試里比較隱蔽的坑表面上看數(shù)據(jù)能收到但數(shù)值不對。除了加#pragma pack之外我后來更推薦的做法是不光定義結(jié)構(gòu)體還定義序列化和反序列化函數(shù)并在函數(shù)里逐個字段賦值而不是直接memcpy。這樣做的優(yōu)勢是即使發(fā)送端和接收端的結(jié)構(gòu)體定義有微小差異比如PreScan版本升級后某個字段類型變了也能在反序列化階段做字段校驗而不是把整個內(nèi)存塊硬懟過去導(dǎo)致數(shù)據(jù)全亂。7.6 斷言閾值定太緊隨機噪聲下偶發(fā)fail這個問題在傳感器數(shù)據(jù)測試里特別常見。攝像頭輸出車道線系數(shù)時光照和路面紋理變化會導(dǎo)致輕微噪聲如果你把橫向偏移量的容忍閾值設(shè)成±0.1米而在仿真里真實情況下該值在±0.15米波動那這條用例就會隔三差五失敗看起來像“玄學(xué)”。處理方式是在設(shè)計斷言前先做一輪噪聲摸底跑二十次相同的用例統(tǒng)計每個關(guān)鍵指標的正常波動范圍然后在這個范圍基礎(chǔ)上加一定余量作為斷言閾值。同時把閾值配置化不要寫死在代碼里方便在測試報告里看到閾值調(diào)整的歷史。7.7 GUI模式彈窗掛死最后再強調(diào)一次自動化測試必須使用靜默模式。PreScan的GUI模式在運行時可能彈出各種提示窗口可能是資源加載失敗也可能是某個數(shù)據(jù)文件缺失任何彈窗都會導(dǎo)致任務(wù)永遠卡在等待點擊狀態(tài)。用靜默模式不僅避免了這個問題還節(jié)省了渲染資源提升了測試速度。如果某些場景確實需要GUI輔助排查我建議只開一條單獨的手動調(diào)試流水線和自動化回歸流水線徹底分開。避免為了“偶爾的方便”讓整個自動化體系變得脆弱?;乜凑麄€過程PreScan的C自動化測試之所以值得投入不是因為它能替代人工場景搭建場景本身還是要在GUI里搭而是因為它把“反復(fù)執(zhí)行同一套驗證”這件事徹底自動化了。環(huán)境部分一次配好通信協(xié)議一次定好剩下的場景矩陣、回歸測試、CI集成全都是可持續(xù)積累的資產(chǎn)。對我來說最大的收獲在于團隊從“擔心改動會不會引入回歸”變成了“每次提交都有幾百條用例在自動守護”這種確定感是手動測試永遠給不了的。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九九九九九九综合| 日本三级日本三级99| 思思热热久久| 九九色网| 婷婷五月大香蕉| 26uuu偷拍亚洲欧洲综合| 涩婷婷五月天| 色99网| 91肏| 影音先锋 91工厂| 婷婷九月| 天堂综合久久 | 亚洲综合婷婷五月| 最近免费中文字幕大全高清大全1| 亚洲激情电影五月天色婷婷丁香一起草| 久久久精品AV| 综合色99| 另类小说色婷婷| 婷婷六月激情丁香| 99性视频| 色五月婷婷激情基地| 99精品视频在线观看| 五月丁香欧美综合免费视频| 亚洲综合新99视频| www.日本91| 亚洲无码影音| 五月天色区| 五月丁香六月婷婷不卡免费无码| 婷婷成人AV| www.夜夜操.com| 久久久久久久人妻| 精品皮股午夜AV| 九九re视频在线视频| 色婷婷888| 亚洲九九在线| 激情深爱综合网| 大香蕉婷婷丁香天堂AV| 大香蕉520| 婷婷五月天大香蕉| 亚洲AV综合在线观看| 国产精产国品一二三在观看| 亚洲六月婷婷| 91成人看片| 成人丁香| 欧美性生交XXXXX无码小说| 欧美成人A片AAA片在线播放 | 激情五月婷婷色综合| 色欲色香综合网站| 丰满少妇乱A片无码| 五月激情小说网| 99九九精品| 欧美日韩成人高清在线| 伊人久热91网| 丁香五月天激情四射网络不好| 丁香婷婷天堂| 免費观看aV在线网址| 激情开心五月天| 亚洲AV免费在线| 天天看夜夜看| 久草热视频在线观看| 久久狠狠色| 久久99热这里只有精品23| 久久免费操| 婷婷丁香五月社区亚洲| 国产av网| 亚韩在线视频| 操逼123网| 五月婷婷黄色| 婷婷深爱色五月| 夜夜操夜夜姧| 9l视频自拍九色9l视频在线观看| 亚洲无码yw| 色久九| 5月婷婷激情在线| 婷婷五月天激情开心网| 色九月婷婷综合| 婷婷丁香激情综合色情| 亚洲热热视频| 东北黄色一级| 五月天婷婷涩涩| 五月天福利影院导航| 97人妻超级碰碰碰碰碰| 国产精品美女| 99久久婷婷| 原琪琪色影院| 狠狠五月天激情| 另类小说五月天激情| www.五月天。com| 婷婷六月五月天综合| 六月丁香婷婷尤物| 久久激情五月| 成人无码精品1区2区3区免费看| 婷婷五月激情中文字幕| 老师把我爽高潮了免费A片| 9精品视频在线观看| 《诡秘之主》在线观看| 亚洲综合婷婷五月天| 秋霞电影理论| 成人网址在线观看| 色综合伊人网| 日韩AV片| 天天日天天干天天操| 色婷久久| 青青青在线视频国产| 嫩草AV久久伊人妇女超级A| 日本不卡高字幕在线2019| 婷婷综合在线视频| A A色色| 五月五月婷婷| 伊人91| 玖玖伦理电影| 狠狠摸狠狠摸| 91九色PORNY肉丝在线| 丁香五月综合网| 99综合在线| 色日本网| 五月丁香六月激情综合| 国产精品美女| 91婷婷五月天嫩女| av人人操| 激情五月婷黄版| 亚洲精品大片| 97人妻碰碰碰久久久久-最近国语高清| 九九99在线观看视频| 激情丁香五月激情婷婷| 国产成人片| 99在线视频免费| 色婷婷五月综合在线| 操一区| 激情婷婷网| 婷婷五月久久| a毛片二逼wwwwwwwwww| 婷婷综合五月天| 秋霞电影理论| 99视频在线观看地址| 99久re热视频精品98| 丁香五月手机在线| 另类亚洲视频| 五月激情婷婷综合| 色狠狠综合| 欧美性爱特黄一级aaaassss| 国产毛片精品一区二区色欲黄A片| 丁香五月人妻| 天天肏高清在线| 无码任你操| 欧美色激情四射| 五月丁香婷婷久久| 午夜微拍福利| 少妇人妻人伦A片| 香蕉久久国产AV一区二区| 五月丁香六月激情| 久久ab| 激情久久伊人| 免费观看的婷婷五月视频在线| 日韩久久成人| 夜夜操夜夜爽| 99操九九网| 天插天啪天啪天啪| 伊人天堂婷婷| 99精品自拍| 亚洲精品另类| 九九九九毛片| 99热国产精品| 九九日伊人| 狠狠色激情综合| 风流少妇A片一区二区蜜桃| 亚洲激情无码久久| 五月婷婷 自拍| 日本色五月婷婷| 婷婷色吧| 五月婷婷丁香| 超碰熟女拍拍| 婷婷天天色| 九月婷婷在线观看| 日本99视频| 日本天堂免费99| 亚洲色图五月丁香| 99这里只有精品8| 成人做爰黄A片免费看直播室男男| 婷婷五月天论坛| 五月天婷婷无码| 五月激情在线| 亚洲 精品 综合 精品| 精品香蕉99久久久久网站| 婷婷五亚洲| 香蕉久久国产av一区二区| 欧洲综合视频| 丁香六月婷婷综合激情欧美| 被强行糟蹋的女人A片| 激情图片婷婷| 久久综合无| 色婷婷在线视频| 九九亚洲小视频| 色欲色香综合网站| 六月婷婷综合| 久9热视频| 五月香蕉综合| 婷婷五月综激情| 狠狠干综合网| 五月色俺婷婷| 色婷婷成人丁香| 五月丁香激情综合网| 色情五月天婷婷| 精品99在线观看| 97操在线视频| www.五月天婷婷| 久久女婷| 在线综合网| 欧美噜噜久久久XXX| 超碰国产在线| 久久这里有精品| WWW色五月天| 丁香花操逼| 激情婷婷| 激情五月天综合网| 日韩欧美颜射| 国产精品国产| 国产婷婷五月色情综合| 5月丁香六月情| 国产成人+综合亚洲+天堂| 5月丁香综合图区| 色婷婷AV久久久久久久| 婷婷六月插屄激情| 夜夜大香蕉婷婷丁香| 六月色播| 色色色色色网站| 小视频在线亚洲| 婷婷月综合| a免费在线| 激情五月天网| 人人爽天天爽| 丁香五月色| 丁香狠狠色婷婷久久无码视频| 九九免费精品在线视频| 五月丁香啪啪啪| 亚洲熟妇无码乱子AV电影| 久久思思热视频| Av性爱网| 丁香五月婷婷六月婷| 日韩性爱AV| 九九AV| 99热这里只有精品免费| 99热这里只有精品中文字幕| 九九视频这里只有精品| 久久99热这里只有精品| 伊人五月久久| www.爱操com.| 成人狠狠成人狠狠成人狠狠成人狠狠| 99热99思午夜精品| 五月丁香少妇A| 26uuu视频欧美| 日本91在线| 色狠狠色综合久久久绯色AⅤ影视| 激情性爱网站| 日本三级日本三级三级人妇四虎| 99re热精品在线视频| 欧州婷婷五月天综合| 国产精品国产成人国产三级| 九九热AV| www.狠狠操| 婷婷五月激情丁香| 国产高清av黄色看片| 99久久99久久综合| 国产一区二区三区影院| 色噜噜狠狠狠狠色综合久欧美| 久久综合五月天激情小说网站| 五月天播播综合| 99丁香五月婷| 99精品免费欧美小视频 | 久久九九囯产| 色情综合网| 五月天丁香六月综合| 成人在线日韩| 只有久久精品免费| 五月天婷综合| 丁香六月婷婷| 99在线视频喷水| 极品另类| 激情五月婷婷欧美极品| 99这里有精品免费| 免费观看欧美成人AA片爱我多深 | 91疯狂操操操操| 色综合九九| 五月天婷婷久久日| 美女丁香五婷婷| 影视av久久久噜噜噜噜噜三级| 日韩欧美颜射| 精品热九九| 欧美性生交A片免费看| 久9热视频在线| 狠狠综合久久综合| 激情美女五月天| 五月天激情小说婷婷基地| 日韩99精品| 日本九九九九| 狠狠色狠狠色综合日日91| 五月久久网| 99这里只有精品视频免费| AV五月丁香| 99久热这里只有精品| 丁香六月啪啪啪| 亚洲妇女熟BBW| 97超喷视频在线观看| 国av网| www一起操| 色色A| 五月婷婷欧洲| 热99久久这里只有精品| 综合婷婷| 91视频久久久| 丁香五月天BBw| 67194中文字幕| 午夜精品人妻无码一区二区三区 | 丁香六月婷| AV九九| 久久久人人操A V| 欧美五月丁香啪啪响视频| 五月丁香欧美在线| 人妻久久久| 99精品偷自拍| 99re99在线看| 色播六月| 丁香五月AV| 艾小青av| 日本色色色色色色色色一色二色| 激情婷婷丁香五月天小说| 丁香六月婷婷综合啪啪| 亚洲激情四射色| 996er在线观看| 99精品综合| 婷婷色情 | 婷婷五月综合激情| 91丨九色丨国产打屁股| 一起草无码| 婷婷五月天激情综合深爱| 色五月婷婷久久| 激情综合在线播放| 激情婷婷丁香| 人橾人| 五月天小说激情| 人妻性爱av网站| 九色91视频| 欧洲区自拍| 就爱射中文字幕资源网| 久热久69| 熟女激情五月天 | 日本久久婷| 五月天 婷 欧美亚洲| 超碰国产一区| 天天插AV丝袜中| 九九爱激情| 五月天婷爱综合| 免费做A爰片77777| 能看的AV网站| 人人操人人妻| 四月婷婷丁香五月| 久热91精品| 色综合99| 婷婷五月天堂| www.激情| 日韩人妻在线观看| 色99网站| 色综合久久综合中文综合网| 天天色色天天| 婷婷五月天色网久| 久久月天堂| 天天摸人人摸| 五月婷激情影院| 亚洲视频操| 九洲一级A片| 婷婷色丁香五月| 91婷婷丁香| 亚洲五月婷婷| 极品人妻videosss人妻| 五月天婷婷丁香人人操91| 久久a热| 玖玖婷婷五月| 五月婷五月婷伊人伊人五月婷| 日本熟妇精品99| 亚洲综合99| 久色| 五月丁香婷婷俺| 亚州激情九月| 激情第四色| 丁香五月婷婷色五月| 激情五月丁香五月综合| 超碰93在线观看| 激情五月天婷婷| 日本狠狠干| 色噜噜狠狠狠综合曰曰曰| 日本一区二区三区精品视频| 99人妻碰碰碰久久久久禁片| 六月婷婷私欲| 丁香婷婷色色| 激情婷婷狠狠干综合| 天天插AV丝袜中| 91九色熟女| 五月天婷婷基地| 99性爱精品| 高清成人综合| 桃色成人网| 99精品热| 日日噜狠狠色综合久久| 综合久久97| 777影视理论片大全在线观看| 婷婷色成人| 男人天堂99| 丁香五月激情图片婷婷| 丁香婷婷啪啪| 99热这里只有精彩| 怡红院院久久| 色婷婷久久| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 能看的av网站| 日本美女五月天| 五月婷婷深深的爱| 综合婷| 天天插天天插| 六月色播| 激情伊人五月天| 激情综合女人网五月播播| 婷婷中文字幕欧美| 开心五月深爱五月| 香焦网五月天| 日本颜色视频人人爱| 久久久婷婷| 五月婷综合| 丁香五月性| 九九无码| 色五月婷婷很很操| 懂色AⅤ| 婷婷丁香69精华| 99re视频在线| 色啪久| 婷婷爱五月天| 婷香五月| 五月婷婷激情性爱| 久热这里| 欧美乱码国产一级A片| 狠狠干青青草| 六月香五月婷| 情欲综合网| 亚洲成人一区| 成人AV免费观看| 久操97| 日韩熟女啪啪视频| 91免费啪视频| 四色五月婷婷| 九九99九九精品视频| 国产人妻人伦精品一区二区| 婷婷久久综合久| 丁香综合网| 天天干一干| 婷婷五月噜噜| 26uuu亚洲精品国产| 成人色情五月天婷婷丁香| 国产韩日亚洲美州欧亚综合在线| 婷婷激情综合网| 色婷婷先锋| 色色婷婷色色| 第四色五月婷婷| 丁香激情五月少妇| 婷婷综合亚洲| 日韩成人电影AV| 五月天啪啪视频| 99操逼视频| 色情五月婷婷| 伊人久久婷婷五月天激情四射| 久久婷婷丁香五月一二三| 五月天激情综合网俺也去| 婷婷五月丁香综合| 激情五月黄色小说| 五月丁香婷婷中文网| 能看的AV网站| 夜夜躁爽日| 五月天播播| 婷婷综合97| 五月天婷婷在线观看精品男人| 五月婷婷激情综合在线| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 农村熟妇高潮精品A片| 99热色精品| 婷婷在线网| 五月婷婷综合在线视频| 婷婷综合在线播放| 啪啪啪大香蕉| 人妻 性久久久久久| 天天xxxxxx天天日| 天天搡日日搡aaaaⅩ| 九九热在线视频观看| 五月丁香在线| 成人免费网站免费看| 五月天丁香婷婷社区| 色情丁香五月婷婷精品| 丁香伊人激情| 天天操夜夜操| 国产午夜精品一区二区三区嫩草| 久久成人亚洲欧美电影| 色婷精品91| 99亚洲综合| 色日本网| 99久热| 爱操天堂| 狠狠色婷婷| 操熟女成人网| 人人摸人人摸| 色色五月丁香婷婷综合| 五月天开心激情网色欲无码| 五月婷婷之综合激情| 亚洲另类电影| www.1024久久| 91免费在线视频6| 五月婷婷综合在线视频小说| 99热官网| 伊人9在线| 人人色性网| 六月激情网| 99无码| 午夜丁香 婷婷| 日韩黄黄| 日本熟妇精品99| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 成人五月天在线视频在线观看| 思思热AV| 五月丁久久| 九九婷婷综合| 小视频久久久aaa| 丁香五月天婷婷激情| 国产三级在线播放| 五月激情开心婷婷| 99啪啪视频| 亚洲色频| 丁香伊人综合| 91婷婷| 欧洲一区二区| 天天色天天日| 丁香五月 无码| 天天草天天舔| 亚洲精品视频在线播放| 996er热| 欧美va在线| 熟女少妇内射日韩亚洲| 五月丁香婷婷网网网网| 99热自拍| 欧美三级欧美一级| 熟女网站久久| 视频一二区| 99这里只有精品|v| 久久丁香综合精品综合| 淫水导航| 婷婷激情五月呦呦| 色久免费| 91se精品国产| α久久| 99精品成人无码A片观看金桔| 超碰大香蕉网| 337p大胆噜噜噜噜噜91Av| 激情五月天婷婷色色色色色色色色色色色 | 亚洲A片成人无码久久精品青桔| 丁香五月成人| www色五月| 成人在线网址| 人人草人人爱| 久热这里只有精品在线观看 | 婷婷五月天亚洲综合| 天天狠天天叉| 欧美精品A片一区在线观看| 色色综合色| 色色97丁香婷婷五月天| 丁香五月天激情视频| 五月天色色色色色| 久久精品系列| 色10月婷婷视频| 99色热| 天天草人人摸| 久久人妻熟女一区二区| 天天爽天天透天天爱| 图片区 小说区 区 亚洲五月 | 五月天综合婷婷| 99热伊人综合| 色色五月天婷婷丁香| 色婷婷久久综合久色综| 欧美内射AA| 99色在线视频观看| 丁香婷婷成年| 无人精品在线视频| 乱码操操| 欧美成人AAA片一区国产精品| 岛国av网| 97热久久| 色色99| 婷婷五月天深爱| 九九精品9| 色五月五月天色婷婷色五月| 久久er视频6| 无码人妻丰满熟妇奶水区码| 五月亭亭六月天| 激情综合色图| 国产FREESEXVIDEOS性中国| 色婷婷在线视频综合| 一本狠婷婷综合| 99人碰碰碰| 婷婷 激情 五月| 操比激情五月| 亚洲精品婷婷| 丁香六月婷婷一区二区三区| 激情久久五月天| 欧美成人精品A片免费一区99| 激情九九综合网| 亚洲成人网站在线播放| 亚洲视频在线观看| WWW,五月| 开心五月婷婷在线| 婷婷久久五月| 在线超碰精品| 天天日夜夜| 夜夜撸夜夜骑| 婷婷六月插屄激情| 日韩在线视频中文字幕| a级毛片一区二区免费视频| 大香蕉九操| 99热这里只有精品50| 9热精品| 国外亚洲成AV人片在线观看| 欧美久久网| 欧美色色色| 久久曰曰| 第四色五月婷婷| 日产精品一线二线三线芒果| 成人精品在线| 天天干电影| 26uuuavcom| 91碰| 五月叮香啪| 色日本颜射| 99色热| 九九婷婷五月天| 插插插色综合网| 伊人婷婷大香蕉| 丁香六月亚洲| 久久六月婷婷| 国产真实乱对白精彩| 亚洲成人免费电影| 久久久久人妻| 激情丁香五月天图片| 婷婷五月天无码熟女| 最新色色五月天| 99色爱| 五月天激情电影| 97色色色色色| 六月婷婷亚洲| 天天综合天天玩夜夜玩天天玩夜夜玩 | 欧美婷婷丁香五月社区| 99精品免费| 婷婷五月激情视频| www.激情五月天| 色五月婷婷激情五月| 国产精品久久99| 欧洲一区二区| 色99色| 九九热经典视频在线观看| 啪啪五月天啪啪| 九九视频这里是精品五月| 91碰碰碰| 激情五月婷黄版| 伊人久久艹| 久久久999精品| 99ri在线观看视频| 色亚洲无码| 九九99精品视频在线观看| 9999三级片| 综激情网| 久久xxxx| 丁香六月 婷婷六月| 九九热亚洲中文在线观看免费| 成人在线精品| 久久久精品99亚洲综合| 秋霞午夜理论| 色五月婷婷开心| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 激情九九六月激情免费视频| 狠狠操狠狠| 无码色| 丁香五月另类色婷婷麻豆| 8区视频在线| 99久久综合网| 婷婷五月在线视频| 亚洲丁香花五月丁香花| 五月天婷婷无码| 国精产品一区二区三区| 开心五月综合激情网| 日本色色网| 五月丁香视频在线观看| 天天摸天天日天天舔| 99亚洲精品视频| 大香蕉婷婷丁香视频在线| 99精品综合视频| 碰97 久| 婷婷亚州综合| 99热欧美| 欧美激情2025| 91九色丨国产丨爆乳| 精品色色| 一区二区你懂的| 色域五月婷婷丁香| 狠狠色丁婷婷日日,伊人激情综合网| 亚洲、热| 欧美综合五月丁香六月婷| 91一起操| 婷婷婷五月香蕉| 婷婷五月丁香久久| 色五月激情基地| 五月天色五月| 五月色情| 婷婷色情网| 色青青视频| 欧美日韩成人在线网| 五月综合视频| 六月丁香VA| 六月色色| 婷婷激情综合色五月久久91| 五月激情四射婷婷丁香| 26uuu精品一区二区| 婷婷色中文字幕| 亚洲av网址| 婷五月天在线草| 人人摸人人干| 91九色PORNY肉丝在线| 91碰在线| 五月六月丁香激情| 国产精品激情AV久久久青桔| 色五月婷婷综合| 丁香六月婷婷姐网| 极品少妇XXXX精品少妇偷拍| 婷婷丁香成人五月天| 五月色丁香国产在线视频| www.91九色| 综合另类激情| 六月婷婷日| 99性视频| 久婷婷色| www激情婷婷com| 成 人片 黄 色 大 片| 97干97色| 色婷婷精品视频| 色色色com| 这里只有精品热| 思思热久久艹| 欧美色色干| 激情五月色在线播放| 一本道在线电影| 婷婷爱在线观看| 久久婷狠狠色| 日韩在线观看亚洲| 天天爽,夜夜爽| 久久曰9| 五月色婷婷AV| 国产特级毛片AAAAAAA高清| 色噜噜狠狠色综合无码久久欧美| 五月天婷婷免费| 99久精品| 综合伊人久久| 五月婷婷,狠狠操| 婷婷综合网| 激情五月婷色| 亚洲99热| 日韩AV中文字幕在线| 亚洲成人黄色网| 午夜AV网| 99热这里只有免费精品| 亚洲啪啪自拍| 九九精品视频在线观看| 亚洲av电影在线| 久久亚洲婷婷| 九九色视频| 99热人人艹| 成人电影丁香六月天| 超碰在线观看三级片| 很操日本7| 中文字幕乱码亚洲精品一区| 丁香五月网| 影音先锋男人av资源站| 色婷婷久综合久久一本国产AV| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 精品久久久久久久人妻| 五月婷婷性爱网| 国产精品香蕉| 操逼巨乳91| 久婷| 五月婷婷六月丁香激情深爱| 国产亚洲精品久久久久久牛牛| 久久黄色网扯| 国产99久| 成功精品影院| 婷婷五月色| 99久久综合| 99亚洲大片精品永久在线观看| 超碰成人黄色网| 狠狠插日日干撸| 91好好热日本在线| 91操操| 99热国产这里只有| 播丁香五月婷婷欧美| 99热这里只有精品22| 99啪啪网| 日本色婷婷| 丁香五月亚洲综合| 熟女啪啪视频| 99在线观看| 99热12| 色综合中文| 99综合网| 久久久久人妻网址| 激情婷婷丁香五月天小说| 国产又色又爽又黄又免费| 色久五月天| 色综合网址| 大伊香蕉精品视频在线| 五月婷婷成人| 五月婷婷在线视频免费观看| 九月丁香婷婷网| 精品人人操| 婷婷五月天视频在线观看| 97五月天婷婷综合激情网| α久久| 九九热99熟女| 性色做爰片在线观看WW| 五月亭亭网成人在线视频| 青青草性爱视频| 97碰 在线视频观看| 激情五月天色网站| 激情网五月婷婷| 九九热黄色| 91啦丨九色丨刺激中文| 久热这里只精品| 99只有精品9| 99re热在线视频| 丁香五月激情性色郤| 色99在线视频| av不卡网站| 丁香五月天电影| 日本婷婷| 久久99热精品a片在线观看| 色激情综合| 婷婷香蕉视频| 久久人妻熟女一区二区| 狠狠人妻色综合| 婷婷五月天狠狠| 欧美精品久久久久久视频观看| 五月激情射| 婷婷五月天国产传媒| 亚洲六月色| 伊人五月天| 色婷婷综合网站| 思思视频这里是精品| 日韩欧美成人片| 伊人天堂婷婷| 欧美色男人网站| 激情网五月天| 天天摸天天肏| 亚洲天堂色色| 丁香婷婷激情网站| sewuyuejiqingwang| 丁香五月网站| 天堂色婷婷| 日韩AV中文字幕在线| 久久婷婷五月丁香蜜桃网| 99ri在线视频| 丁香五月久久| 五月激情综合网| WWW.桔色成人.COM| 色五月AV| 操骚货在线| 九九色综合视频| 五月综合婷婷久久在线| 色综合五月婷婷狠狠干| 熟女激情网| 夜夜爽天天| 婷婷六月丁香开心深深爱| 五月丁香综合啪啪| 91avse| 色五月激情| 9热视频在线观看| 超碰在线免费9| 吊色AV男人的天堂| 六月婷婷香蕉| 激情久久久久久久久久久| 日本三级网址| 国产免费av在线| 99九九中文字幕视频| 性爱激情小说AV五月丁香花| 色欧美日| 色色色色色色色色色色色色色97| 操日视频| 欧美 日韩 成人 在线| 久久久精品AV| 激情综合婷婷| AV色五月婷婷| 国产精品五月丁香| 色99综合色88| www.91av.com| 噜噜五月天综合| 五月亭亭欧美女人| 琪琪色五月天| 玖玖资源站国产| 久久综合伊人综合在线| 色欲资源网| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 99久久9| 婷婷色导航| 国产真实乱对白精彩| 91九九九色在| 99视频在线观看网址| 99热在线精品观看| 欧美成性色| 天天干天天操天天爱| 婷婷色基地| 美女激情综合| 婷婷色色五月| 亚洲成人日韩无码精品| www.久久婷婷| 亚洲永久免费| 欧美性丁香色色五月天| 亚洲成人人人操| www.五月婷婷| 亚洲精品V天堂中文字幕| 91男人资源站| 9191avse| 天天拍夜夜爽| 久婷婷色| 中文字幕日产A片在线看| 激情综合五月丁香六月婷婷| 欧美三级黄色片久久| 婷香五月网在线| 五月婷婷二月丁香| 97资源碰碰| 亚洲乱码日产精品BD| 六月丁香婷婷综合影院| 久久五月丁香婷婷| 韩国三级五月天婷婷。| 五月丁香免费视频| 日本婷婷激情四射中文字幕在线观看| 色色九九五月天| 激情5月婷婷狠狠干| 五月天亭亭俺也| 国产精品色| 九月av在线| 蜜臀av无码久久久久久久久| 色婷婷视频在线| 一区二区三区视频| 超碰精品国产首页| 亚洲色婷婷激情| 国产精品视频| 99久久婷婷国产综合精品电影| 久久狼人天堂| 人人摸人人干人人做| 成人丁香五月| 丁香五月激情综合婷综| 五月情综合| 色五月婷婷在线| 1024人妻无码中文字幕| 激情5月舔| 色女人久久| 丁香五月激情啪啪综合| 视频综合网| 色婷另类| 综合99在线| 狠狠干2007| 婷婷久久综合久| 蜜臀99久久精品久久久久| 色噜噜,噜噜色| 99综合视频一体| 日本97久久久精品| 色婷婷影音| 色欲久久综合| 丁香五月香蕉| 激情婷婷五月天| 丁香狠狠色婷婷久久无码视频| 天天日天天干天天爱| 久久色天堂| 五月丁香人妻| 婷婷色丁香六月| 精品一二三区久久AAA片| www久久久| √天堂资源在线人妻熟女| 色约约视频一区二区三区四区五区 | 99热精品少| a在线观看| 丁香六月婷婷| 99精品丰满| 婷婷五月天亚洲图片| 激情综合五月| 永久思思热在线| 成人AV在线电影| 激情丁香六月| 任你搞网站| 色播播婷婷| 婷婷六月色| 日韩一级网站| 直接看的AV| AV在线二十六页| 婷婷五月图片小说网| 六月婷婷综合网2| 丁香五月天激情AV| 91妻人人爽人人看片| 夜夜骑日日夜夜| 日本不卡一区二区三区| 99热国内| A片试看120分钟做受图片| 天天操天天操| 九七色色六月丁香| 狠狠干 狠狠操| 丁香五月婷婷操逼| 亚洲色爱综合| 婷婷五月天精品| 天天干天天操天天射| 色天堂在线| 久久综合激情| 久久亚洲A| 亚洲V国产V欧美V久久久久久| 婷婷色香六月综合激情| 性做爰A片免费视频A片直播| 思思热久久婷婷五月天| 五月激情久久| 免费播放片大片| 99色在线观看| 亚洲亚洲人成综合网络| 五月婷久久在线| Aα在线免费观看| 五月丁香琪琪| 丁香六月婷婷综合激情欧美| 成人亚洲精品久久久久 | 泰州成人视频| 久久色天堂| 91操碰| 亚洲性色XXXXX| 亚洲成人av在线观看 | 丁香五月色欲| 9久热在线视频精品| 色五月婷婷在线| 深爱激情久久| 嫩草视频观看| 日韩aaa| 激情综合网,婷婷五月天| 国产精品A片在线| 五月婷婷色影院| 亚洲五月天天| 亚洲婷婷综合视频| 99热婷婷| 99爱免费视频在线观看| 婷婷综合影院| 人人操AV| 综合网亚洲| 五月丁香婷婷无码中文| 性爱技巧五月| 婷婷丁香熟妇综合网| 热99久久这里只有精品| 高清国产AV| 五月天偷拍| 国产密乳av一区二区三区四区| 99精品在线| 九色视频九色九色91jiuseshipin| 久久九精品| 五月天成人网婷婷| 丁香五月婷婷亚洲色图| 日本熟妇乱妇熟色A片蜜桃| 天天爽天天干| 五月婷婷熟女| www.精品99| www.玖玖九| 色色网站| rr天天操| 婷婷九月激情网| 97人人操人人| BlACKEDRAW视频一区二区| 国产 码在线成人网站| www.亚洲激情| 色五月婷婷激情综合网| 丁香婷婷午夜| 久久综合九色综合97婷婷| 久久婷婷婷| 成人性爱无码| 日韩成人五月天| 日韩99视频| 日日夜夜九九| www.99视频| 色99自拍| 激情婷婷色五月| 五月天亚洲最大成人| 激情久久综合| 大香AV| 日韩av在线播放综合网| 99热久| 大香蕉九九| 五月天成人综合| 思思久久青草热| 小视频aaa久久久| 97人妻碰碰碰久| 日本久久人| 思思热99er| 亚洲愉拍99热成人精品| 免费精品99| 久久久999精品| 久久九精品| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 男人的天堂在线婷婷| 色婷婷丁香五月| 激情久久久| 二色AV| 天天色99| 婷婷刺激综合| 99这里只有精品视频| 2025年最新亚洲在线欧美| 一二三区视频韩国| 五月婷成人网| 亚洲视频a| 九九热这里只有精品7| 久久婷婷综合网| 色色色地址| 日韩av在线免费观看| 五月婷婷六月丁香首页| 98色丁香五月婷婷综合网| 九九九九九九九九九九九九九国产精品| 日韩AV在线影片| 超碰只有精品在线| 色色欧美。| 九九爱激情| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 99ER热精品视频| 丁香激情五月综合网| 色 免费网站视频| 久久婷色| 婷婷五月丁香基地在线视频官网| 无码人妻激情| 啪啪啪大香蕉| 香蕉婷婷色五月| 五月青青草综合| 激情五月婷婷综合视频| 91精品国产综合久久密臀| 蜜乳国产网站| 丁香五月综合在线视频| 六月丁香社区| 欧美性色视频| 伊人婷婷大香蕉| www色色色com| 激情综合久久| 欧美私人家庭影院| 色九四色| 激情啪啪五月天| 久久精品五月天| www.狠狠| 婷婷六月开心网| 99成人小视频| 天天插天天干| 亚洲激情综合| 五月天激情婷婷| 天天日色情| 日本专区久久| 91久久99久久91熟女精品| 久久五月视频| 欧美性爱5月天天天看| 五月天 无码| 超碰人人艹| 五月丁香| 久久综合五月情| 国产黄色一级片| 日日骑夜夜撸| 99九九视屏| 五月婷婷草| 激情综合五月天| 影音先锋男人av资源站| 99精品久久久久久久| 五月婷婷 欧美| 日日操天天| 丁香五月综合| 亚洲色就是色色色| 激情五月综合久久| 综合在线网| 日本久久爱| 欧美内射AA| 九九热狼人| 婷婷色在线观看| 久久九九99亚洲国产久精综合| 五月丁香综合| 国产精自产拍久久久久久蜜 | 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | CAOBIBI| 女人露出p毛视频www网站| 亚洲综合婷婷六月丁香五月| 丁香五月激情啪| 精品香蕉99久久久久网站| 色在线99| 襙逼网| 四虎成人精品永久免费AV九九| 三级黄色大片视频| 亚洲情色一区| 婷婷色情小说| 久草五月| 婷婷综合在线视频| 九月婷婷综合八月丁香在线观看 | 婷婷WWW久久| 日日日,com| 欧美色色色色色色| 苗黎美女四级成人版一级二级毛片| 久久婷五月综合| 5月丁香六月婷婷| 亚洲色视频| www色综合亚洲92| www.夜夜夜| 亚洲中文字幕av| 婷婷伊人五月丁香天堂网| 丁香五月亭亭六月综合激情网| 久久久27操| 婷婷丁香五另类网站| 五月婷激情| 伊人高清无码| WWW,色五月| 五月丁香婷婷色色色| 99久久天堂婷婷| 夜夜爽日日躁| 婷婷五月综合网| 91人人操人人爱| 久久性爱视频网站| 亚洲人操亚洲人| 婷婷亚洲五月丁香综合在线| 久久99精品视频| 久久思思99| 韩国天天婷婷| 综合久久婷婷99| 我爱宗和色| 色色婷婷丁香| 激情色色| 五月丁香综合啪啪| 欧美日韩国产一区| 欧美黄色韩日网| 97超碰9久热婷婷热| 九九九九九九九热| 国产乱人偷精品人妻A片| 99综合视频在线| 精品久久久人妻| 免费亚洲婷婷中文字幕| 五月丁香久人妻中文| 丁香六月婷婷开心婷婷网| 思思热久热| 日本网站久久| 这里只有精品免费观看网占| 中国操逼99| 天天综合亚洲综合| 99色爱| 五月天成人手机在线视频| 午夜天堂一区人妻| 月婷婷亚洲| 国产欧美日韩综合精品一区二区| 激情五月婷婷免费视频| 色色com| 激情五月天激情网| 伊人久久艹| 色99亚洲| 国产看真人毛片爱做A片| 激情伊人五月婷婷久久| 久久久国产精品黄毛片| renre人人操国产超碰在线 | 99色看这里只有精品| 五月丁香六月激情综合| 青青草深爱激情网|