不會代碼的時候,如何使用Jmeter完成接口測試

1.接口測試簡介

接口測試是測試系統組件間接口的一種測試。接口測試主要用于檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關系等。

2.接口測試流程

接口測試的流程和功能測試流程類似,依據的對象是需求說明書和接口需求,接口測試流程如下:

圖片

3.接口測試范圍

業務功能(包括正常、異常場景是否實現)

業務規則(覆蓋度是否全面)

參數驗證(邊界、業務規則是否達到要求)

異常場景(重復提交、并發提交、事務中斷、多機環境、大數據量測試

性能測試(響應時間、吞吐量、并發數、資源要求)

安全測試(權限驗證、SQL注入等)

4.接口測試重點

● 檢查接口的功能:檢查接口的功能有沒有實現,也就是請求會不會成功,如果不成功會不會返回錯誤代號(或錯誤信息);

● 檢查接口返回的數據:檢查接口返回的數據、數據格式、數據類型是否與預期一致(正向且傳遞的參數正常);

● 檢查接口的容錯性:接口是否可以正常處理(假如傳遞的參數足夠大或者為負、空值時);

● 檢查接口的性能:http請求接口大多與后端執行的SQL語句性能、算法等比較相關;

● 檢查接口的安全性:外部調用的接口尤為重要。

5.接口測試需求分析

● 首先根據接口設計的技術架構方案,了解清楚被測接口對應的公共入參、入參、出參及返回數據的Json結構規范,根據測試場景進行測試。

● 理解接口參數,熟悉接口參數的輸入要求、輸入值范圍、必填項等。

● 理解接口輸出,熟悉返回json的結構構成、返回值類別、返回值范圍、返回data的不同類型等。

● 理解接口的邏輯、接口的業務關聯,熟悉技術方案中的接口相互關聯、依賴的關系,接口與接口之間的數據傳遞等。

● 尋找測試點,根據輸入 (參數名、取值范圍)、輸出 (參數名、返回值范圍)、關聯關系,進行測試點分析。

6.接口測試用例設計

接口測試的主要測試對象是接口,但是隨著系統復雜度越來越高,接口越來越多,完全覆蓋所有接口是很難的一件事情,并且實際過程中任意內部接口的變動都可能導致我們的測試用例的不可用。

接口用例設計優先級

優先級–>針對所有接口

暴露在外面的接口,因為通常該接口會給第三方調用;

供系統內部調用的核心功能接口;

供系統內部調用非核心功能接口。

優先級–>針對單個接口

正向用例優先測試,逆向(異常)用例次之 (通常情況,非絕對);

是否滿足前提條件 > 是否攜帶默認參值參數 > 參數是否必填 > 參數之間是否存在關聯 > 參數數據類型限制 > 參數數據類型自身的數據范圍值限制。

接口用例設計方法

圖片

測試用例編寫注意事項

圖片

進行測試執行編寫時,有如下的原則:

1.不同的接口參數覆蓋不同的業務場景;

2.在后臺構造合適的數據來滿足接口的測試用例;

3.根據接口的返回值,斷言其是否返回期望結果,并查看數據庫驗證;

4.測試用例涉及多個步驟的,應對涉及的步驟都驗證;

5.刪除測試過程中產生的結果,確保每個用例執行前都是一個清潔的環境。

7.接口測試用例模板

圖片

8.接口數據準備

圖片

9.接口測試工具

接口測試工具選擇

接口工具:Postman/Jmeter/SouapUI/python,單個接口測試時使用 Postman,多個接口測試時可以使用Jmeter,或者使用python腳本;

Jmeter:可以測試各種類型的接口,不支持的也可以通過網上或自己編寫的插件進行擴展。

postman:功能上更簡單,組織方式也更輕量級,它主要針對的就是單個的 HTTP 請求。

接口測試工具根據對比

圖片

抓包工具

個人比較喜歡Charles嘛,但是也可以使用fiddler或者其他的抓包工具。

jmeter使用dome

圖片

10.接口測試原則

基礎配置,如域名、環境配置等,單出文件配置,方便不同環境測試、腳本維護;

明確接口實現什么樣的功能,實際需要什么樣的功能,是否一致;

接口測試數據太多,用該數據驅動模式更有層次,且易于維護;

要在眾多測試用例中選出冒煙測試用例及可用于性能測試的用例;

先單接口測試,再多接口業務測試;

測試完成以后,需要清洗臟數據。

11.接口測試執行實例

11.1 使用Jmeter測試接口實例

接口測試環境準備

Jdk1.8 或以上:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Jmeter 下載址址:http://jmeter.apache.org/download_jmeter.cgi

插件的下載安裝地址:http://www.jmeter-plugins.org/

12. 如何快速生產腳本生成

既然使用到了jmeter團隊又是多人的情況下,那么 jmeter 腳本的生產力是一個很大的問題,再加上團隊不是每個人對 jmeter 的熟悉程度都是不一樣的,所以腳本的編寫和快速生產就是個問題,針對這個個人建議腳本的生產建議從以下幾個方面考慮;

使用jemter原生的錄制器;

手寫jmeter腳本,但是需要對jmeter相對熟悉;

使用fiddles抓包工具導出生產;

針對web頁面個人推薦BlazeMeter的谷歌插件。

針對以上五種生產jmeter腳本快速生產的方案,都可以很好的輔助編寫jmeter 的腳本,在這里很多同學肯定會問為什么不使用metersphere,這個項目本身很優秀了,但是由于公司的原因,所以最后放棄,很多同學肯定想,錄制生成,直接回訪就完事,我只能說太簡單,這樣你的腳本使用一次基本就報廢, 會造成腳本的重復編寫費時費力,這個時候,需要測試強硬一點了大家采用統一的錄制控制方式去錄制,同意腳本編寫的方案,畢竟在怎么錄制都是不行的,所以最好的實踐方式就是采用錄制為主,修改為輔的解決方式,去編寫復用率高的腳本。

13.團隊協作落地

相信jmeter很多測試小伙伴都很熟悉,肯定也都熟悉他有一個最大通病,就是case太多的時候,一點都不方便管理。

其實這個問題,我也遇見了,因為現在的團隊不只是我一個人單打獨斗,我還有隊友,所以對jmx腳本的管理,我在團隊里面采用的是git管理我們的腳本,我們在團隊內部和開發約束,測試環境的時候,所有的部署都走test的一個代碼分支,這樣做的好處,就是為了減輕jmx腳本的復雜性,同時也避免了在發布生產環境的時候,將腳本發布到生產環境,因為最初的初衷使用jmeter做接口測試的情況下,就是因為團隊開發的同學不寫單元測試,測試同學會Java的只有一兩個,服務又多,公司的迭代速度又快,開發提測的功能一直沒有很好的健壯性,所以,我在想能不能在開發部署成功的時候或者定時輪詢執行一下每個服務的接口,以達到提測的質量。

在團隊實踐中也遇到了一些問題如下:

token的時效性原因,導致腳本老是執行失敗;

數據的唯一性,例如我每次請求的時間都是不一樣的等;

數據庫的連接數老是超標,因為團隊存在多個項目組,他們之間又是使用相同的數據庫,只是不同表;

Jenkins的并發限制,因為大家都是使用同一個Jenkins,不可能你一個老是占用Jenkins的執行。

針對以上的問題,我個人是如下解決的,首先token校驗的問題,存在這個問題的根本原因,是因為我們每次登錄都是圖片驗證碼的登錄,但是我又不能識別,只能求助開發經理,讓他在測試環境給我們測試寫了一個萬能驗證碼,再拿這個這個驗證碼去刷新token和或獲取對應的op(op參數是內部特有的驗證)

數據的唯一性,這個當時頭疼了好久,最后只能去百度,最后發現jmeter還有很強大的功能,就是函數助手,里面有各種函數,例如獲取時間戳,隨機數,生成uuid等,直接開箱即用。

熟悉mysql的小伙伴都知道MySQL的默認最大連接數是200數據庫連接池老是超標,最后查看了mysql日志發現連接數占用最大的是開發的代碼里面寫了很多多表聯查的大SQL,尤其是公司大數據那幫人的sql一個SQL語句執行半個小時…因為去年(2020年)MTSC深圳站的時候,聽了唯品會的同學分享接觸到了,sql掃描檢查,當時在sonar掃描代碼的時候,加入了sql的掃描,和開發老大商量,去除了項目中大部分的長sql語句,最后去請教了運維的同學和公司dba的大佬,當時運維同學有點不配合的,最后買了一包好煙,在加各種舔,最終終于同意擴大數據庫的連接數,最終勉強解決了這個問題。

jenkins并發機制的問題,這個是jenkisn本身就存在的瓶頸,當時給公司運維提了個需求,讓他多起幾個jenlkins的的節點,測試專門使用一個節點。

14.接口測試結果報告

由于使用了jmeter為了測試的時候,可以實時查看,個人建議使用 influxdb+cadvisor+grafana 搭建一套配合 jmeter 的報告可視化的監控系統。

搭建步驟如下

創建容器掛載目錄

mkdir -p /dockerdata/influxdb
mkdir -p /dockerdata/grafana

安裝 influxdb 數據庫

docker run -d \-p 8083:8083 \-p 8086:8086 \--expose 8090 \--expose 8099 \--name influxsrv \-v $PWD:/var/lib/influxdb \influxdb;

安裝 cadvisor 容器監控

docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
-p 8081:8080 \
--detach=true --link influxsrv:influxsrv \
--name=cadvisor \
google/cadvisor:latest \
-storage_driver=influxdb \
-storage_driver_db=cadvisor \
-storage_driver_host=influxsrv:8086;

安裝 grafana

docker run \
-d \
-p 3000:3000 \
-e INFLUXDB_HOST=localhost \
-e INFLUXDB_PORT=8086 \
-e INFLUXDB_NAME=cadvisor  \
-e INFLUXDB_USER=root \
-e INFLUXDB_PASS=root  \
--link influxsrv:influxsrv \
-v $PWD:/var/lib/grafana \
--name grafana \
grafana/grafana;

最終結果如下

圖片

需要注意的點

既然使用influxdb存儲jmeter的數據,那么就不得不提jmeter的Backend Listener后端控制器,的配置,這個超簡單,但是我沒有使用默認的,因為默認的只能查看 壓測的tps這些,再加上腳本的每個場景接口我加入事務控制器,所以我采集的是事務控制器,一個事務代表一個接口或者代表多個接口;

啟動了influxdb之后需要進入容器創建對應的數據庫,要不數據沒辦法存儲;

為了方便在grafana上面看到了每個接口的請求參數和返回值,這個是因為之前公司每個項目已經接入普羅米修斯的監控,在配置普羅米修斯監控的時候,我們加入了自定義監控,所以這款我直接使用普羅米修斯原有的配置的面板;

還有因為插件的原因當時遇見了influxdb里面沒辦法失敗 “/” 所以控制器的命令 “/” 可以使用下劃線代替。

13.接口測試中常見問題

接口測試經常遇到如下的bug和問題:

傳入參數處理不當,導致程序 crash;

類型溢出,導致數據讀出和寫入不一致;

因對象權限為進行校驗,可以訪問其他用戶敏感信息;

狀態處理不當,導致邏輯出現錯亂;

邏輯校驗不完善,可利用漏洞獲取非正當利益等。

15.接口自動化適用場景及持續集成

接口自動化框架:Jmeter+maven+Jenkins+git

Jmeter作為執行者的角色,每次負責執行具體的接口/性能測試腳本,并得到結果,生成報表。

Maven和Git是作為管理者角色,前者主要負責項目的依賴管理,而后者主要負責項目的代碼管理。

Jenkins作為調度者,主要根據我們設置的build觸發條件和事件調用jmeter進行測試 ## maven集成jmeter插件。

<dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_components</artifactId><version>5.4.1</version>
</dependency>

jmeter 鏡像的制作

因為在上面我們說了我們使用了自己的Backend Listener插件,由于網絡原因,所以在運行docker容器的時候,我們需要將jmeter容器使用-v參數掛在到本地。

再加上網絡的原因,我們只能自己制作鏡像了,制作鏡像的dockerfile如下:

FROM java:8
ENV http_proxy ""
ENV https_proxy ""RUN mkdir /jmeterdocker
RUN mkdir -p /jmeterdocker/test
RUN mkdir -p /jmeterdocker/test/input/jmx
RUN mkdir -p /jmeterdocker/test/input/testdata
RUN mkdir -p /jmeterdocker/test/report/html
RUN mkdir -p /jmeterdocker/test/report/jtl
RUN mkdir -p /jmeterdocker/test/report/outputdata
RUN chmod -R 777 /jmeterdockerRUN cd /jmeterdockerENV JMETER_VERSION=5.4.1
ENV JMETER_HOME=/jmeterdocker/apache-jmeter-${JMETER_VERSION}
ENV JMETER_PATH=${JMETER_HOME}/bin:${PATH}RUN wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-${JMETER_VERSION}.tgz
RUN tar -zxvf apache-jmeter-${JMETER_VERSION}.tgz
RUN rm apache-jmeter-${JMETER_VERSION}.tgz

需要注意的點

因為使用了docker啟動運行容器,那么在運行完成之后,需要在對應的shell腳本中接入如下命令在每次運行構建之前刪除對應的容器。

docker rm - f [容器name]

16.目前設計的自動化接口測試案例有兩個運行場景:

測試前置、開發自測

一個新的自動化接口測試案例開發完成后,直接發給接口對應的開發,安排在開發本地環境執行,一旦開發確認完成接口開發,就開始執行接口測試案例,基本上可以實時拿到測試結果,方便開發快速做出判斷。【開發本地運行的方式就是打開JMeter工具,導入JMX文件,開始執行可。

回歸測試:開發本地測試通過后,或整個需求手工測試通過后,把自動化的接口測試案例做分類整理,挑選出需要納入到回歸測試中的案例,在持續集成環境重新準備測試數據,并把案例納入到持續集成的job中來,這些用于回歸的接口測試案例需要配置到持續集成平臺自動運行。對接口測試而言,持續集成自動化是核心內容,通過自動化的手段才能有效降低成本,提高接口測試的價值。如果使用LR、JMeter、SoapUI工具做自動化測試,工具本身支持命令行模式運行,可以結合Jenkins等自動化平臺,實現項目版本更新后的自動化回歸測試。

關于持續自動化回歸測試的建議:

接口腳本開發時要注意參數的取值的可用性,不因為時間或數據狀態的變化引起腳本不能正常運行,降低腳本維護成本。

接口回歸功能的覆蓋度控制,需要根據腳本的實際功能和重要性判斷自動化回歸覆蓋度,回歸內容越多腳本維護成本越高,一般應用接口不建議全功能覆蓋(畢竟接口有變化會做詳細測試,如果沒修改其它變更可能對其產生的影響一般不會影響其邏輯判斷)。

接口腳本需要一定的自動化校驗能力,除請求http狀態的判斷外,還需要對核心內容的正常性做判斷(判斷內容可與數據庫內容匹配等方式,不建議用寫死的內容)。

持續性能測試,還需要做好相關的監控、性能指標的分析自動化,減少人工操作。

最后:?為了回饋鐵桿粉絲們,我給大家整理了完整的軟件測試視頻學習教程,朋友們 如果需要可以自行免費領取?【保證100%免費】
在這里插 入圖片描述

軟件測試面試文檔

我們學習必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節等一線互聯網大廠最新的面試資料,并且有字節大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。

在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/717041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717041.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717041.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【貪玩巴斯】VisualStudio+Github聯合工作指令

實現在本地VisualStudio進行代碼改寫&#xff0c;同時上傳Github和項目組成員實時更新代碼。 格式指令&#xff1a; alt z ctrl shift p后 輸入 wordwrap —— 進行格式排盤&#xff08;在一頁中能夠完全顯示&#xff0c;代碼會自動換行&#xff09; git pull origin mast…

2024.3.1 小項目

1、機械臂 #include <myhead.h> #define SER_IP "192.168.125.32" //服務器端IP #define SER_PORT 8888 //服務器端端口號#define CLI_IP "192.168.68.148" //客戶端IP #define CLI_PORT 9999 /…

串的BF算法(樸素查找算法)

串的模式匹配&#xff1a;在主串str的pos位置查找子串sub&#xff0c;找到返回下標&#xff0c;沒有找到返回-1。 1.BF算法思想 相等則繼續比較&#xff0c;不相等則回退&#xff1b;回退是i退到剛才位置的下一個&#xff08;i-j1&#xff09;;j退到0&#xff1b;利用子串是否…

Python matplotlib

目錄 1、安裝 matplotlib 2、繪制折線圖 修改標簽文字和線條粗細 校正圖形 3、繪制散點圖 繪制單點 繪制一系列點 自動計算數據 刪除數據點的輪廓 自定義顏色 使用顏色映射 自動保存圖表 4、隨機漫步 創建 RandomWalk() 類 選擇方向 繪制隨機漫步圖 給點著色 …

最簡單的ubuntu遠程桌面方法

最簡單的ubuntu遠程桌面方法 部署環境&#xff1a;Ubuntu 20.04 LTS 現在最常用的遠程控制Linux系統的方法是通過XRDP、VNC等&#xff0c;但是安裝配置過程繁瑣復雜&#xff0c;經常出現各種問題導致連接失敗&#xff0c;另外一方面延遲較高&#xff0c;操作卡頓。 經過我堅…

【Java項目介紹和界面搭建】拼圖小游戲——鍵盤、鼠標事件

&#x1f36c; 博主介紹&#x1f468;?&#x1f393; 博主介紹&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高興認識大家~ ?主攻領域&#xff1a;【滲透領域】【應急響應】 【Java】 【VulnHub靶場復現】【面試分析】 &#x1f389;點贊?評論?收藏 …

DDS數據分發服務——提升汽車領域數據傳輸效率

1.引言 隨著智能化技術的快速發展&#xff0c;汽車行業正經歷著一場革命性的變革。如今的分布式系統變得越來越復雜且龐大&#xff0c;對網絡通信基數要求在功能和性能層面越來越高。數據分發服務&#xff08;DDS&#xff09;作為一項先進的數據傳輸解決方案&#xff0c;在汽車…

2369. 檢查數組是否存在有效劃分(動態規劃)

2024-3-1 文章目錄 [2369. 檢查數組是否存在有效劃分](https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/)思路&#xff1a;代碼&#xff1a; 2369. 檢查數組是否存在有效劃分 思路&#xff1a; 1.狀態定義:f[i]代表考慮將[0,i]是否能被有效劃…

電腦要用多少V的電源?電腦電源輸入電壓是市電

臺式電源的輸出電壓是多少&#xff1f; 電腦電源輸出一般有三種不同的電壓&#xff0c;分別是&#xff1a; 12V、5V、3.3V。 電腦電源負責給電腦配件供電&#xff0c;如CPU、主板、內存條、硬盤、顯卡等&#xff0c;是電腦的重要組成部分。 工作電流根據不同的硬件及其使用狀…

LeetCode15:三數之和

題目描述 給你一個整數數組 nums &#xff0c;判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k &#xff0c;同時還滿足 nums[i] nums[j] nums[k] 0 。請 你返回所有和為 0 且不重復的三元組。 注意&#xff1a;答案中不可以包含重復的三元組…

【48天筆試強訓】day04

計算糖果 描述 A,B,C三個人是好朋友,每個人手里都有一些糖果,我們不知道他們每個人手上具體有多少個糖果,但是我們知道以下的信息&#xff1a; A - B, B - C, A B, B C. 這四個數值.每個字母代表每個人所擁有的糖果數. 現在需要通過這四個數值計算出每個人手里有多少個糖果…

編程語言:SQL Server數據庫使用教程,SQL Server增刪改查語句

「作者主頁」&#xff1a;士別三日wyx 「作者簡介」&#xff1a;CSDN top100、阿里云博客專家、華為云享專家、網絡安全領域優質創作者 「推薦專欄」&#xff1a;對網絡安全感興趣的小伙伴可以關注專欄《網絡安全自學教程》 SQL Server是微軟提供的一種關系型數據庫&#xff0c…

Python算法100例-3.3 阿姆斯特朗數

完整源代碼項目地址&#xff0c;關注博主私信源代碼后可獲取 1.問題描述2.問題分析3.算法設計4.確定程序框架5.完整的程序6.問題拓展 1&#xff0e;問題描述 如果一個整數等于其各個數字的立方和&#xff0c;則該數稱為“阿姆斯特朗數”&#xff08;亦稱為自戀性數&#xff…

nacos開啟鑒權+springboot配置用戶名密碼

nacos默認沒有開啟鑒權&#xff0c;springboot無需用戶名密碼即可連接nacos。從2.2.2版本開始&#xff0c;默認控制臺也無需登錄直接可進行操作。 因此本文記錄一下如何開啟鑒權&#xff0c;基于nacos2.3.0版本。 編輯nacos服務端的application.properties&#xff1a; # 開…

Linux/Docker 修改系統時區

目錄 1. Linux 系統1.1 通過 timedatectl 命令操作1.2 直接修改 /etc/localtime 文件 2. Docker 容器中的 Linux 操作環境&#xff1a; CentOS / AlmaOSMySQL Docker 鏡像 1. Linux 系統 1.1 通過 timedatectl 命令操作 使用 timedatectl list-timezones 命令列出可用的時區…

uniapp 地圖行車軌跡

文章目錄 uniapp 地圖行車軌跡1、畫地圖2、切換地圖中心點3、畫路線4、軌跡移動5、標記點及自定義內容 uniapp 地圖行車軌跡 官網地圖組件&#xff1a;https://uniapp.dcloud.net.cn/component/map.html 官網地圖組件控制&#xff1a;https://uniapp.dcloud.net.cn/api/locati…

【Java數據結構 -- 二叉樹的基本操作】

二叉樹的基本操作 1.獲取樹中節點的個數1.1 計數器遞歸的思路1.2 子問題思路&#xff1a; 2. 獲取葉子個數3. 獲取第k層節點的個數4.獲取二叉樹的高度5.檢測值為value的元素是否存在 1.獲取樹中節點的個數 思路&#xff1a;整棵樹的節點個數 左子樹的節點個數&#xff0b;右子…

休息日的思考與額外題——雙指針、原地哈希day28

文章目錄 前言一、11. 盛最多水的容器二、41. 缺失的第一個正數三、42. 接雨水總結 前言 一個本碩雙非的小菜雞&#xff0c;備戰24年秋招&#xff0c;計劃二刷完卡子哥的刷題計劃&#xff0c;加油&#xff01; 二刷決定精刷了&#xff0c;于是參加了卡子哥的刷題班&#xff0c…

32單片機基礎:旋轉編碼器計次

接線圖如上圖所示。 我們初始化一下PB0和PB1兩個GPIO口外設中斷&#xff0c;當然&#xff0c;這里只初始化一個外部中斷也能完成功能的對于編碼器而言&#xff0c;下圖所示為正轉的波形。如果把一相的下降沿用作觸發中斷&#xff0c;在中斷時刻讀取另一相的電平&#xff0c;正…

【EXCEL】SUMIFS多次條件篩選數據

問題案例 有如下兩個工作表&#xff08;Sheet1和Sheet2&#xff09;&#xff1a; 在sheet1中的C2行獲得一個結果&#xff08;項目1的1月收入&#xff09;&#xff0c;是對sheet2中的A列篩選出“項目1”B列篩選出“202401”而獲得對應C列的結果。借助excel的公式如何實現。 S…