一祥得、tps壓不上去,可能有哪些方面原因蒋得?
????1级及、網(wǎng)絡(luò)帶寬
????在壓力測試中,有時(shí)候要模擬大量的用戶請求窄锅,如果單位時(shí)間內(nèi)傳遞的數(shù)據(jù)包過大创千,超過了帶寬的傳輸能力,那么就會(huì)造成網(wǎng)絡(luò)資源競爭入偷,間接導(dǎo)致服務(wù)端接收到的請求數(shù)達(dá)不到服務(wù)端的處理能力上限追驴。
????2、連接池
????可用的連接數(shù)太少疏之,造成請求等待殿雪。連接池一般分為服務(wù)器連接池(比如Tomcat)和數(shù)據(jù)庫連接池(或者理解為最大允許連接數(shù)也行)。
(關(guān)于連接池的具體內(nèi)容锋爪,可參考之前的博客:性能測試:連接池和線程)
????3丙曙、垃圾回收機(jī)制
????從常見的應(yīng)用服務(wù)器來說,比如Tomcat其骄,因?yàn)閖ava的的堆棧內(nèi)存是動(dòng)態(tài)分配亏镰,具體的回收機(jī)制是基于算法,如果新生代的Eden和Survivor區(qū)頻繁的進(jìn)行Minor GC拯爽,老年代的full GC也回收較頻繁索抓,那么對TPS
????也是有一定影響的,因?yàn)槔厥掌浔旧砭蜁?huì)占用一定的資源毯炮。
????4逼肯、數(shù)據(jù)庫配置
????高并發(fā)情況下,如果請求數(shù)據(jù)需要寫入數(shù)據(jù)庫桃煎,且需要寫入多個(gè)表的時(shí)候篮幢,如果數(shù)據(jù)庫的最大連接數(shù)不夠,或者寫入數(shù)據(jù)的SQL沒有索引沒有綁定變量为迈,抑或沒有主從分離三椿、讀寫分離等,
????就會(huì)導(dǎo)致數(shù)據(jù)庫事務(wù)處理過慢葫辐,影響到TPS搜锰。
????5、通信連接機(jī)制
????串行另患、并行、長連接蛾绎、管道連接等昆箕,不同的連接情況鸦列,也間接的會(huì)對TPS造成影響。
(關(guān)于協(xié)議的連接鹏倘,可參考之前的博客:HTTP協(xié)議進(jìn)階:連接管理)
????6薯嗤、硬件資源
????包括CPU(配置、使用率等)纤泵、內(nèi)存(占用率等)骆姐、磁盤(I/O、頁交換等)捏题。
????7玻褪、壓力機(jī)
????比如jmeter,單機(jī)負(fù)載能力有限公荧,如果需要模擬的用戶請求數(shù)超過其負(fù)載極限带射,也會(huì)間接影響TPS(這個(gè)時(shí)候就需要進(jìn)行分布式壓測來解決其單機(jī)負(fù)載的問題)。
????8循狰、壓測腳本
????還是以jemter舉個(gè)例子窟社,之前工作中同事遇到的,進(jìn)行階梯式加壓測試绪钥,最大的模擬請求數(shù)超過了設(shè)置的線程數(shù)灿里,導(dǎo)致線程不足。(模擬請求數(shù)超過了設(shè)置的線程數(shù)什么意思程腹?匣吊?)
????提到這個(gè)原因,想表達(dá)意思是:有時(shí)候測試腳本參數(shù)配置等原因跪楞,也會(huì)影響測試結(jié)果缀去。
????9、業(yè)務(wù)邏輯
????業(yè)務(wù)解耦度(解耦甸祭?缕碎?)較低,較為復(fù)雜池户,整個(gè)事務(wù)處理線被拉長導(dǎo)致的問題咏雌。
????10、系統(tǒng)架構(gòu)
????比如是否有緩存服務(wù)校焦,緩存服務(wù)器配置赊抖,緩存命中率、緩存穿透以及緩存過期等寨典,都會(huì)影響到測試結(jié)果氛雪。
二、性能測試過程中耸成,怎么判斷網(wǎng)絡(luò)瓶頸报亩?
????先了解一個(gè)請求的過程環(huán)節(jié)浴鸿,壓力機(jī)網(wǎng)卡上限、服務(wù)器網(wǎng)卡上限弦追、網(wǎng)絡(luò)帶寬等數(shù)據(jù)岳链,使用nmon監(jiān)測工具查看壓測過程中的網(wǎng)絡(luò)傳輸速度是否打到當(dāng)前環(huán)境的最底網(wǎng)絡(luò)上限。
三劲件、自動(dòng)化測試定位不到元素都有哪些原因掸哑?
????1.動(dòng)態(tài)id定位不到元素(更換定位方法)
????分析原因:每次打開頁面,ID都會(huì)變化零远。用ID去找元素苗分,每次刷新頁面ID都會(huì)發(fā)生變化。
????解決方案:推薦使用xpath的相對路徑方法或者cssSelector查找到該元素遍烦。
????2.iframe原因定位不到元素
????分析原因:你要找的元素在某個(gè)框架(frame)里面
????解決方案:跳轉(zhuǎn)到該框架里俭嘁,再查找元素。
driver.switchTo().frame("login_frame");
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[frameborder='0']")));
driver.switchTo().frame(driver.findElement(By.tagName("iframe"));?
????3.要返回到某frame外找元素
????分析原因:當(dāng)你進(jìn)入某個(gè)框架服猪,找到某元素供填。接下來又想找一個(gè)框架外的元素的時(shí)候,需要跳出該框架再找元素罢猪。
????解決方案:執(zhí)行下面這句代碼近她,pareneFrame是父類,從當(dāng)前框架跳轉(zhuǎn)到父類的框架里膳帕。
driver.switchTo().parentFrame();?
????4.不在同一個(gè)frame里邊查找元素
????分析原因:頁面左邊一欄屬于left_frame粘捎,右側(cè)屬于right_frame的情況,此時(shí)如果當(dāng)前處在left_frame危彩,就無法通過id定位到right_frame的元素
????解決方案:通過以下語句切換到默認(rèn)的content:
driver.switchTo().defaultContent();
????5. xpath描述錯(cuò)誤
????分析原因:描述路徑的時(shí)候沒有按照xpath的規(guī)則來寫 造成找不到元素的情況出現(xiàn)
????解決方案:修改路徑寫法攒磨,或者用其他方式,個(gè)人最推薦css汤徽。
????6.頁面元素未加載完(包括ajax異步請求)
????分析原因:在找元素前娩缰,頁面還沒加載好,所以那些元素都不存在谒府。
????解決方案:等待時(shí)間拼坎。有三種方式(強(qiáng)制等待,隱式等待完疫,智能等待)
Thread.sleep(5000); //強(qiáng)制等待5000毫秒
????7.元素隱藏起來了
????分析原因:窗口在不是最大化的情況下泰鸡,前端頁面元素只會(huì)顯示局部,所以找不到啊壳鹤。
????解決方案:在找元素前盛龄,執(zhí)行一句,瀏覽器最大化窗口,這樣隱藏的元素就會(huì)全部出現(xiàn)了余舶。最好寫在beforetest里蹦锋。
? ?driver.manage().window().maximize();
????8.firefox安全性強(qiáng),不允許跨域調(diào)用出現(xiàn)報(bào)錯(cuò)
????分析原因:它的錯(cuò)誤描述為uncaught exception: [Exception... "Component returned failure code: ????0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]" nsresult: ????"0x80004005 (NS_ERROR_FAILURE)" location:
????解決方案:Firefox 要取消XMLHttpRequest的跨域限制欧芽。
第一是從 about:config 里設(shè)置
signed.applets.codebase_principal_support = true; (地址欄輸入about:config 即可進(jìn)行firefox設(shè)置)
第二就是在open的代碼函數(shù)前加入類似如下的代碼:
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } catch (e) { alert("Permission UniversalBrowserRead denied."); }
四葛圃、有獨(dú)立搭建自動(dòng)化框架的經(jīng)歷嗎千扔?你是怎么做的?
-jdk/python/pycharm/selenium/httprunner/jmeter/locust/瀏覽器驅(qū)動(dòng)/