測試領域各種工具實踐:從零開始搭建一個測試技術練習平台


我的知識體系樹

測試理論知識總結:

測試思路系列:《微軟的軟件測試之道》讀書筆記

測試思路系列:《谷歌的軟件測試之道》讀書筆記

測試思路系列:測試領域完整知識體系總結

測試自動化平台 | 測試開發工程師的進階之路

 

工作中,除了理論,也要不斷實踐學習,為了快速上手,我打算寫一個有增刪改查功能的Javaweb項目,方便以后練習各種測試工具。

 

環境准備
1、准備一台電腦
2、官網下載最新版Intellij IDEA,破解步驟找“Java學習者社區”公眾號
3、官網下載最新版PyCharm,破解步驟同上,區別是配置路徑不同
4、風刑軟件站,下載安裝VMware虛擬機破解版,再找個CentOS7的鏡像文件安裝
5、官網下個xshell6,不用破解
6、下載JavaEE,版本8,配環境變量
7、下載python最新版,目前是3.8,不用配環境變量,安裝時勾選,能自動配

 

檢驗工具

1、python:
1)  個人認為,優勢是庫很多,windows系統在cmd中執行pip命令安裝即可,數據分析類方便直觀。
2)  用selenium時,要啟動webdriver控制谷歌瀏覽器,需要下載插件chromedriver.exe,找自己瀏覽器對應版本,下載地址:點我傳送,把插件放python默認安裝目錄下。
3)  想用python查股票,除了優礦,東方財富新浪百度等API不易用,無意中發現了一個庫,叫證券寶官方文檔點我傳送,國內開源,能pip安裝,用了用發現數據舊。
4)  python3.x版本連接mysql數據庫要pip install mysqlclient,然后import MySQLdb使用,具體用法點我傳送
5)  安裝python最新版后,cmd中運行pip沒用,最后發現是本機安裝了loadrunner,環境變量沖突了,where pip查環境變量,刪除沖突項即可。可參考

2、java:
  暫時搭建一個web網頁,springboot + spring data jpa + mysql,打開Intellij IDEA,新建spring項目,選jdk8,.properties中開日志,設tomcat端口。建目錄:web,dao,service。建頁面:兩種方式

  前端框架寫好頁面,留ajax等后端程序員傳數據。
  后端程序員用引擎模板開發頁面,java會自己渲染頁面並傳數據,前端引擎模板jsp,freemarker,thymeleaf都一樣,前后端分離很靈活,但也要看項目用起來是否划算。

  我選thymeleaf,要在html標簽開頭加一句咒語 xmlns:th="http://www.thymeleaf.org",就可以用th標簽在頁面里操作后端來的變量了。要在templates下建h5頁面,去bootstrap官網,不用下載,引cdn方式的文件,js和css都是現成的,官網能看組件,還自適應。

  關於前端框架:學下vue.js,它基於nodejs(nodejs是什么)。npm是它自帶的包管理工具,cnpm是淘寶做的國內版,安裝之后,用法一樣。
  繼續學vue,文檔提示我參考webpack,Webpack是一個前端資源加載/打包工具,可以將多種靜態資源 js、css、less 轉換成一個靜態文件,減少了頁面的請求,用cnpm安裝。我現在不需要。
  接着看,文檔說vue有兩種安裝方式,要么npm裝,要么頁面引個cdn鏈接,效果一樣,因為nodejs和我的谷歌瀏覽器用的都是谷歌的V8引擎。
  文檔看完,一句話描述,vue本質是封裝好的js函數(框架),主要通過new Vue({})操作一個dom元素,完成各種動作。
  當然,一個前端框架有除了js還有html、css,vue做完的項目肯定很大,需要webpack打包,於是vue又封裝了一下,出了個工具叫vue cli,cnpm安裝它,能生成個單頁模板項目,能用開發工具打開,以后直接在里面寫代碼即可。
  我打開這個vue模板項目,入口文件是個APP.vue, .vue文件是一個自定義的文件類型,用類似HTML的語法描述一個Vue組件。每個.vue文件包含三種類型的頂級語言塊 <template> <script> <style>。這三個部分分別代表了 html,js,css。
  一個完整的vue項目,有多個.vue文件,每個都是一個組件,參考鏈接
  這樣看來,vue項目的cdn安裝方式只能做些小功能,項目中還得用nodejs環境開發vue。
  vue + element ui可以配合使用。element ui用vue開發的,但為了更好的打包還得cnpm安裝一下,然后直接在vue模板項目里引入就能用,具體看官方文檔。element ui有很多主題和組件,同類型有bootstrap。

3、linux
1)   虛擬機里改分辨率太費勁,直接用xshell
2)   網絡選橋接,改/etc/sysconfig/network-scripts/ifcfg-ens33文件的onboot為yes,能連外網
3)   關防火牆,虛擬機才能ping通宿主機,具體參考 點我傳送
4)   yum update更新一下庫,然后安裝docker,汪雲飛springboot實戰那本書上方法太舊,2020年3月6號,docker最新是19版本,步驟參考:點我傳送 教程太多,總結一下:1-安裝依賴軟件;2-設置倉庫;3-安裝社區版;4-啟動docker;5-下載較大的軟件網會斷,配個加速器 # vi /etc/docker/daemon.json,這個daemon.json文件默認沒有,官網有介紹,管各種配置的,里面寫{"registry-mirrors":["https://n9h3vi0d.mirror.aliyuncs.com"]}
5)  以后的操作都在docker里進行,先安裝個mysql,步驟參考菜鳥教程:點我傳送。第4步運行容器之后,需要執行“docker exec -it 這里填容器id或名稱 /bin/bash“,這就可以在shell中使用mysql了,進shell之后,登陸賬戶,mysql -u root -p,完成,mysql用的是3306端口,前面菜鳥教程第5步,我將虛擬機里,docker容器的3306端口,映射給了虛擬機的3306端口,所以,只要docker啟動mysql,我就能通過虛擬機的ip+3306端口使用mysql。為了方便使用,我要在宿主機(我的win10筆記本)用Navicat for mysql連虛擬機的3306端口。官網下載Navicat最新版本(目前是15)。下載破解程序,教程及地址:點我傳送

  以上,虛擬機+centOS+docker+mysql終於搭建完成。linux命令+docker命令+mysql命令得多練。
6)docker一句話總結:
  docker是一個容器干一件事,所以搭建環境,先要下載各種新鏡像,通過手工配置或者寫dockfile配置把鏡像啟動為容器,一切配好環境能用,就把這些鏡像導出,再上傳到私服倉庫,然后本機下載dockcompose,寫個dockercompose.yml,里面是環境需要啟動的各種容器。
要復制環境時,在新機器上安裝docker,然后從私服拉取鏡像,用復制來的dockercompose.yml直接用命令運行,就完成了。
查了這么多,這篇文章終於說到點子上了。

7)linux三劍客;grep用在查找關鍵字;sed用於在緩存中按行處理文件內容並輸出給新文件;awk也是在緩存中處理,還能包含條件、循環語句;

sed核心是正則,兩個概念:匹配、行為(CRUD);可以將匹配和行為進行不同的嵌套,對滿足某些條件的部分進行某些操作;

awk核心是格式化,主要用於格式化輸出和一些統計。

 

項目中的小問題
1、spring boot會自動掃描@SpringBootApplication所在類的同級包以及下級包里的bean。所以建包若在別處,入口類會掃不到,需要加注解:

@ComponentScan(basePackages = {"com.*"})
@EnableJpaRepositories("com.*")
@EntityScan("com.*")


2、springboot使用rest,是看誰繼承JpaRepository接口的,實體類加s是spring data REST的默認規則
3、某天虛擬機ip變了,於是設為靜態ip,卻發現docker的mysql容器3306端口連不上,最后發現systemctl restart docker重啟docker服務就好了
4、docker上部署了兩個容器,一個是web項目,一個是mysql,結果web連不上數據庫,最后發現是防火牆擋住了。我關了防火牆,參考的這個點我傳送。進而又查了查docker容器間的通訊方式,點我傳送,他這個需要初始化容器的時候就配好
5、突然今天xshell時不時地連不上虛擬機,我都已經配了靜態IP了,結果發現是自己手機的ip跟虛擬機沖突了,於是上路由器管理頁面,在DHCP池里挑了個IP,跟自己手機的mac地址綁定,就好了

 

性能測試

性能測試系列:工作中的性能測試完整過程(學習總結)

1、jmeter
這篇作為入門看着筆記方便,但要是快速上手,還是這篇思路正確,其他很多上手文章,講不到點上。入門之后,這篇可用作總結提升。

性能測試系列:Jmeter使用記錄

jmeter測試遇到的問題:

壓測一個接口,壓力機網段不通,就用雲桌面測,平均響應時間一直是92毫秒,10vu時TPS是100,20vu到2000vu,TPS一直是200.

按理說,隨着vu增加,平均響應時間應該增加,tps應該先升,再降。

現在是,隨着vu增加,平均響應時間一直不變,tps先升,然后一直不變。

用vu除以平均響應時間,20vu,tps應該是200,40vu,tps應該是400,但實際還是200,所以,我用雲桌面發出的請求被限制了。

無論我加多少vu,固定時間內,我發出的請求總數是固定的。而對方服務器接到的請求數也是固定的。

后來我換了個能通的壓力機,40vu時,tps變成400了。

總結:遇到增加並發,總請求數固定,響應時間和tps不變的,考慮發壓機是否有限制。


2、loadrunner
1)  關於tps、vu、響應時間的關系

我做了一次實驗,發現如下結論
Vu 響應時間 tps
1 0.003 315
10 0.006 1670
100 0.061 1478
300 0.183 1486 1個vu時,1000毫秒/平均響應時間=tps。但1個以上的vu,這個公式就不適用了。 Vu增加,響應時間會變慢,tps變大,但到了一定值,tps反而減少。 因此,想變大tps,先加vu。若想變小tps,可以繼續加vu,但此時最好設置pacing。 我還聽到一個公式: vu = pacing * tps 。但實驗發現此公式不准。 我按照公式,vu不變,設置目標tps,得出pacing時間,但運行后,發現tps比目標少25%,所以不准。
如果想加pacing,可以直接加成需求給的時間,比如復雜交易不大於400毫秒。不加pacing的話,響應時間是最快的。
所以,如果pacing設置的小於它最快的時間,這個pacing就不起作用了。

2)  關於場景:場景與計划共四種組合方式,具體參考
3)  loadrunner打印日志時,若返回報文內容過多,會顯示不全,但不影響web_reg_save_param抓數據。
4)  用lr轉碼中文,數據提交后在頁面發現中文最后有空格,解決方法
5)  LR發壓報錯Address already in use Try changing the registry value。解決方法
6)  CPU占用高的追查手段。點我傳送
7)  jvm監控之——jmap和jstack使用。點我傳送
8)  java內存泄漏定位與分析。點我傳送

9)  最近遇到了個小問題,一列數據,150萬條,要改成每10條為一行,逗號間隔。我最初想直接查詢出來,無解,然后想用excel,然后用函數,但要手動拉15萬次,太累,然后想用excel里的vb,但發現表格根本加載不完150萬數據,遂放棄表格。接着想到了lr,把150數據作為參數化,然后寫循環,每10個一換行,直接寫到文件里。代碼如下:

Action()
{
    char *filename = "Z:\\test.txt" ; //指定結果存放路徑 long file; char urid_cat[1000]="";//用來放拼接的字符串 int i,count; count = 1; //用來計算夠不夠一行10個 //用於打開文件 if ((file = fopen(filename, "w+" )) == NULL) { lr_output_message("Unable to create %s", filename); return -1; } for(i=0;i<1500000;i++){ if (count < 10) { strcat(urid_cat,lr_eval_string("{P_test}")); //P_test就是那150萬數據 strcat(urid_cat,","); count ++; }else{ strcat(urid_cat,lr_eval_string("{P_test}")); strcat(urid_cat,"\n"); //lr_output_message("%s",urid_cat); fwrite(urid_cat,strlen(urid_cat),1,file); //把一組用戶信息寫入參數文件  urid_cat[0] = NULL; count = 1; } } fclose(file);//關閉文件 return 0; }

沒想到跑的那么慢,一個並發跑了18個小時,如果急着用,可以用並發跑。

 

//loadrunner工具腳本常用操作    
char s[] = "璁塊棶榪滅▼鎺ュ彛澶辮觸錛岃繑鍥炵┖鍊?";
    lr_convert_string_encoding(s,"utf-8",NULL,"S_resmsg2"); lr_output_message("輸出:%s",lr_eval_string("{S_resmsg2}")); if(atoi(lr_eval_string("0"))==0){ lr_output_message("輸出:%s","111"); }

 10)2021.03.01。

工作中遇到的問題:兩個腳本,復制相同的登錄代碼,回訪時在同一行,一個報錯,另一個不報錯。

原因:使用loadrunner錄制的腳本,會做一些剪切、復制等更改,改過之后,再用tree視圖查看請求記錄,會出現名稱與內容不符,推測可能是tree錨定了腳本行號,即使更改了此行代碼,tree顯示的請求名稱仍然是錄制時的請求。

總結:回放腳本用tree查看時,要以tree實際請求地址為准。

11)2021.03.01。

工作中遇到的問題:loadrunner分布式壓測,主控機器調用5台壓力機,5萬並發,場景的LoadGenerator按  IP1,IP2,IP3,IP4,IP5  這種格式填入多個,場景運行后,大量vu處於pending狀態,查看場景壓力機狀態發現95%的vu都在IP1,其余IP只有10vu。

總結:這種多個IP逗號分隔寫到一個腳本LoadGenerator的寫法我沒在網上查到,小並發確實分布了,但大並發會有壓力不平均的現象,所以,要給每個腳本指定各自的壓力機。

12)記錄用loadrunner11測試老系統的惡心經歷

早上要測個老系統的上傳表格,於是頁面先做一遍功能,用的谷歌瀏覽器,點擊上傳按鈕,瀏覽器的控制台報錯說找不到xx對象,用火狐試也報錯。換了IE,ie不報錯,這個系統用的是flash插件,這時看到有個添加文件的按鈕,哦,原來有flash才行,我的測試機不能連外網,所以谷歌火狐裝不了flash,只能繼續用ie,我要用loadrunner錄制腳本,loadrunner11卻無法啟動ie,百度說必須用ie8,於是卸載ie11,重啟電腦,再配置三處,發現還是不能啟動(根本原因是要選擇c盤(86)32位的ie路徑),於是換了台電腦,

這台電腦是ie8(但沒有flash,我試到最后才知道),loadrunner能啟動ie,但啟動后頁面無反應,原因是在ie里首頁地址不能自動跳轉到登錄頁,要輸入登錄頁完整路徑才行(新系統輸入主頁可以直接跳轉登錄頁,用了Java單點登錄框架)。能顯示頁面后,卡了幾分鍾,最后刷新頁面,終於進了系統,到了上傳頁面,提示無flash。放棄這台電腦。

我找了台能連外網的,我打算下載個flash,然后用u盤傳給我的電腦,給火狐裝個flash。百度搜個flash官網,彈出的全是不相關內容,弄了四五次終於找到官網,下載flash。我來到自己電腦,卻發現flash裝不了,因為我的電腦不連外網,安裝flash會做聯網校驗。

我只好用別人能聯網的機器,打開火狐,安裝flash,進系統,點擊上傳,js報錯一個對象為空,到此,放棄谷歌火狐。

系統太舊,用不了谷歌火狐,老ie又沒法用loadrunner啟動,我只好再換機器試試。另一個電腦也是ie11,我先改成ie8,卸載,重新配置,重啟電腦,恰好win7更新,卡在正在配置windows,請勿關機頁面一個小時,最后忍不了強制關機,重啟后可以正常使用,據說有很多重啟后進不了系統的。終於這台機器能錄制了。

13)Loadrunner運行5000用戶時報錯了怎么辦; 

14)LoadRunner測試下載文件

3、加特林

小眾的開源壓測工具。官網地址壓測與實時監控

4、stress

命令行工具,linux上對系統資源發壓,實現背景壓力。教程參考

性能監控

1、ant、nexus
在看junit自動化構建,瞥見構建工具ant(點我傳送),它跟maven差不多,我就想使用maven的deploy(在構建環境中,將最終打包的文件復制到遠程倉庫當中用於和其他開發者和項目進行分享。),於是就在docker上安裝了nexus私服,具體參考點我傳送
  注意兩點:
  一是我用docker裝的nexus,很簡單,但最好在上面鏈接里的第五步,指定自己的目錄
  二是這個博主在maven的setting.xml文件里少配了一處,導致傳jar包報錯沒權限,具體點我傳送
2、nmon
下載壓縮包,解壓后找對應版本,執行export PATH="$PATH:/路徑"配下環境變量(export只用於當前,退出會失效,要長期有效需把此命令配到開機啟動文件里),就能直接用了,監控結果用excel分析,可以寫個工具實現一鍵完成部署、打點、結果匯總
3、java監控
工具很多,可以用java自帶的visualVm遠程監控,遠程只需在java項目啟動時加參數點我傳送,docker中的web項目加參數寫在docker run -e ""里面

eclipse分析堆內存的插件memory analyzer 。eclipse memory analyzer 怎么使用內存管理工具Memory Analyzer的使用

Intellij IDEA遠程debug教程實戰和要點總結

JConsole可視化工具介紹JVM 之(9)虛擬機監控工具(可視化)

Java中OutOfMemoryError(內存溢出)的三種情況及解決辦法

這個代碼不用看,只看理論:Java中關於內存泄漏出現的原因以及如何避免內存泄漏;  

4、top
Linux自帶,看進程的,具體點我,可用於查進程ID定位代碼
5、vmstat
Linux自帶,看內存的,具體點我
6、iotop
需安裝,用於定位正在IO的進程。具體點我

7、普羅米修斯

開源,監控&報警&時間序列數據庫組合。基本原理是通過HTTP協議周期性抓取被監控組件的狀態,這樣做的好處是任意組件只要提供HTTP接口就可以接入監控系統,不需要任何SDK或者其他的集成過程。這樣做非常適合虛擬化環境比如VM或者Docker 。他是為數不多的適合Docker、Mesos、Kubernetes環境的監控系統之一,隨着k8s的流行越來越流行。入門點我

從零搭建Prometheus監控報警系統

8、APM

Application Performance Management,應用性能管理,主要指對企業的關鍵業務應用進行監測、優化。這方面的產品很多,比如

zipkin:Twitter公司開源的一個分布式追蹤工具,被Spring Cloud Sleuth集成,使用廣泛而穩定;

skywalking:中國人吳晟(華為)開源的一款分布式追蹤,分析,告警的工具,現在是Apache旗下開源項目;微服務搭建示例

cat:大眾點評開源的一款分布式鏈路追蹤工具;

bee-apm;gitee上開源的個人項目。

還有oneapm、聽雲等等。 

dynatrace:花錢買的,總節點數有限。舊版本有個.msi的服務端安裝包,安裝之后輸入用戶名密碼登陸,就可以監控所有部署了dynatrace的節點。基本操作是對某個ip發壓,然后在dynatrace監控器上找到ip,右鍵看purepath,它就會顯示最近幾分鍾內所有的請求信息,比如發起的都是http請求,在監控器里能看到這個http請求調用了哪一行java代碼,耗時多久,調用了哪一句sql耗時多久,並且詳細到io耗時多久,cpu耗時多久。很方便。現在最新的dynatrace我沒找到服務端安裝包了,看起來都變成了通過web瀏覽器監控。Dynatrace入門OneAgent的工作方式歡迎使用Dynatrace幫助

阿里巴巴開源性能監控神器Arthas初體驗

五大最佳開源java性能監控工具

apm工具研發

 

自動化測試

1、TestNG
(點我傳送)跟junit差不多。最近收藏的一份筆記竟然是B站一個java接口自動化教學的筆記,用的是testNG+externReport+moco+jenkins+git+springboot。 參考資料:Jenkins+TestNG詳解
2、看到junit更新到了5,就學習了一下,它內嵌在spring boot test包里,springboot項目默認有這個包。簡單來說,右鍵要測的類生成測試類,在test目錄下,給測試類加@SpringBootTest注解,給方法加@Test注解,直接@Autowired拿到要用的bean,在測試方法里寫邏輯,加斷言判斷,最后用maven的test按鈕運行一下,就能自動測完所有內容。可以看看這個junit4的簡單上手點我傳送,結合junit5的文檔看 點我傳送

啰嗦一句,單元測試的方法,加@Transactional可以直接回滾數據,哪個包的@Transactional都行,但數據庫的主鍵還是對自增,不想回滾數據就加@Rollback(false)。

再啰嗦一句,用junit時嘗試了一下java的lambda和雙冒號::,沒有get到雙冒號的使用場景 點我傳送
3、jenkins+jmeter
接口自動化:簡言之,就是用jmeter做好腳本,設置為運行一次,放服務器上,jenkins設置構建后觸發jmeter命令行,測試報告發郵件。具體步驟+發郵件
4、python自動化
目前常見的是用法是 selenium+unittest+htmlreport,selenium支持多種語言,用於模擬人工操作瀏覽器,需pip安裝。unittest是python自帶的單元測試框架,跟junit、testng幾乎一樣,通過testsuite調run方法批量執行測試類,htmlreport用於生成測試報告,pip安裝,testsuite用htmlreport調用run即可。一個python自動化框架用法:先封裝函數:打開瀏覽器、進入頁面、獲取頁面元素、操作、判斷結果,共5步,這里注意獲取元素要用顯式等待,報錯要截圖,然后是測試數據(或者叫測試用例)與代碼分離,測試結果可以寫入表格,也可以生成html。一個頁面對應一個class,class里多個函數對應多個要測的功能,testsuite寫在入口方法,添加所有class,便可運行所有測試。參考如下:
自動化框架總覽
selenium自動化框架搭建+另一種搭建方式
python本地測試報告無法生成(junit也有類似問題)
持續集成介紹方案
linux無界面運行selenium設置headless
無界面情景可搭配基於nodejs的框架puppeteer
python測試報告htmlReport

5、自動化工具——Macaca
集成了PC、移動端安卓、IOS的解決方案,簡介,使用入門
6、自動化工具——Katalon Studio
也是集成各種端,但收費 簡介使用入門

接口測試

1、postman
現在主要推銷自己的客戶端,看來想做成一個大平台,在官網號稱可以用於CI自動化。快速上手點我傳送,擴展:OAuth2
2、httpRunner
基於python的接口測試框架。點我傳送
3、REST assured
基於Java的接口測試框架。點我傳送

單元測試

1、mock
mock的工具很多,spring boot test內置的是mockito,和junit配合用的。它就是用反射機制拿到類,然后讓人手動設置方法返回值而已,之后再判斷方法的調用順序呀、次數呀等等細節,最后加個junit的斷言判斷,具體 點我傳送,此外,mock還能測controller,如果有單元測試的活兒,可以先看一眼這個 點我傳送,python的unittest自帶mock,具體參考

接口測試可以用soapui啟動mock,SoapUI模擬服務端進行接口測試;rest的mock可以直接用soapui啟動,soap的mock需要wsdl文檔,這個文檔要么用別人的地址導入soapui,要么用xml文件導入。webservice流程參考

其他參考:隨便找個wsdl描述文件,然后新建mock也是隨便找個描述文件,建mock找描述、建mock; mock根據腳本返回不同的報文
2、Cucumber
基於Java,把代碼定義為字符描述,讓非開發人員組織測試用例。具體參考

安全測試

安全測試系列:《web安全深度剖析》讀書筆記; 

我愛破解網 

移動端測試

1、專項測試
弱網測試,詳情點我


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM