接口測(cè)試大部分都使用接口的響應(yīng)值作為接口驗(yàn)證的依據(jù)坯墨,但在與數(shù)據(jù)庫(kù)有交互的接口中這種結(jié)果判斷不足以判斷接口的正確性,本文將以jmeter作為接口測(cè)試的工具來實(shí)現(xiàn)接口的數(shù)據(jù)庫(kù)斷言
一. 總體思路概述
? ? 1. 使用jmeter發(fā)起接口請(qǐng)求
? ? 2. 使用json提取器獲取接口響應(yīng)結(jié)果中的關(guān)鍵內(nèi)容
? ? 3. 使用jmeter發(fā)起數(shù)據(jù)庫(kù)操作劝评,得到數(shù)據(jù)庫(kù)的值
? ? 4. 使用BeanShell斷言,實(shí)現(xiàn)接口響應(yīng)內(nèi)容和數(shù)據(jù)庫(kù)內(nèi)容的對(duì)比
二. jmeter發(fā)起接口請(qǐng)求
? ? 以搜索接口為例,業(yè)務(wù)需求為:通過關(guān)鍵字搜索商品偶宫。接口信息如下:
?接口信息:
輸入?yún)?shù):
返回結(jié)果:
? ?根據(jù)以上接口信息在jmeter中添加http 請(qǐng)求,如下圖
三. 針對(duì)接口請(qǐng)求添加json提取器
? ? ?添加json提取器是為了獲取接口響應(yīng)中所有name环鲤,用來和數(shù)據(jù)庫(kù)中查到的name值進(jìn)行一一對(duì)比
? ? ?3.1 添加json提取器
選中搜索請(qǐng)求--添加--后置處理器--json提取器 ? ?
?3.2 設(shè)置json提取器
各項(xiàng)參數(shù)解釋:
1.?Names of created variables:表示json提取器從響應(yīng)中獲取到的內(nèi)容所存儲(chǔ)的變量纯趋,隨便定義只要不沖突即可,建議起一個(gè)有意義的名稱冷离,不要寫成abc毫無意義的名稱
2.?JSON Path Expressions:json提取的表達(dá)式吵冒,表示需要按照這個(gè)規(guī)則從響應(yīng)中匹配內(nèi)容,圖中表達(dá)式表示匹配響應(yīng)中的所有name字段對(duì)應(yīng)的值
3.?Match No. (0 for Random):匹配結(jié)果存儲(chǔ)到變量的策略西剥,默認(rèn)什么都不寫就是0
1?0表示隨機(jī)一個(gè)存儲(chǔ)的變量中痹栖,比如我們匹配了多個(gè)name字段的值,那么會(huì)隨機(jī)將其中一個(gè) ? ? 值賦值給Names of created variables指定的變量
2?-1表示使用數(shù)字后綴標(biāo)識(shí)每一個(gè)匹配的結(jié)果瞭空,比如我們匹配了多個(gè)name字段的值揪阿,那么最終每一個(gè)結(jié)果都會(huì)對(duì)應(yīng)一個(gè)變量,變量名稱則是name_1咆畏、name_2南捂、name_3、name_4 ....
3?X表示把第幾個(gè)匹配到的值賦值給Names of created variables指定的變量旧找,比如寫個(gè)2溺健,那么就會(huì)把匹配到的第2的name字段的值賦值給name
4.?Compute concatenation var:表示如果匹配到多個(gè)值,可以將多個(gè)值存儲(chǔ)在一個(gè)變量中钮蛛,變量名為Names of created variables指定的變量名稱加_ALL鞭缭,比如當(dāng)前圖中就是name_ALL,存儲(chǔ)的多個(gè)值以,分割
5. ?Default Values:表示如果json表達(dá)式?jīng)]有匹配到任何值愿卒,那么變量的默認(rèn)值是啥
四. 配置數(shù)據(jù)庫(kù)發(fā)起數(shù)據(jù)庫(kù)請(qǐng)求
? ??以mysql數(shù)據(jù)庫(kù)為例
?? 4.1 ?配置數(shù)據(jù)庫(kù)連接元件
配置數(shù)據(jù)庫(kù)所需要的jar包缚去,下載mysql-connector-java.5.1.46.jar,可以直接在maven上進(jìn)行下載琼开,下載地址https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.46
下載好以后放入jmeter目錄下的lib/ext目錄下易结,然后重啟jmeter
配置jdbc元件,選中線程組--添加--配置元件--JDBC ?Connection ?Configuration
核心字段含義
Variable Name for created pool:表示該連接配置的名稱柜候,這個(gè)名稱將會(huì)在后續(xù)的jdbc請(qǐng)求中使用
Dabase URL:表示數(shù)據(jù)庫(kù)實(shí)例的連接地址
JDBC Driver class:表示連接驅(qū)動(dòng)類
Username:表示連接數(shù)據(jù)庫(kù)實(shí)例的用戶名
Password:表示連接數(shù)據(jù)庫(kù)實(shí)例的密碼
4.2 數(shù)據(jù)庫(kù)請(qǐng)求搞动,請(qǐng)注意該請(qǐng)求需要放在查詢接口請(qǐng)求之前
? ? 選中線程組--添加--取樣器--JDBC Request
核心字段含義
Variable Name of Pool declared in JDBC Connect Configuration:表示要連接的數(shù)據(jù)庫(kù)配置名稱,與我們上面配置的一致
Query:填寫sql語(yǔ)句渣刷,這里我們是查詢商品表鹦肿,通過name字段模糊查詢,并且只返回了name字段
Result ?variable ?name:表示從數(shù)據(jù)庫(kù)中查到的內(nèi)容存到哪個(gè)變量里辅柴,這里寫變量名稱
五. 腳本調(diào)試
?? 5.1 ?添加調(diào)試取樣器箩溃,用來查看各個(gè)變量的值是否正確
? ? 選中線程組--添加--取樣器--調(diào)試取樣器
? ?5.2 ?添加察看結(jié)果樹瞭吃,用來查看請(qǐng)求結(jié)果
? ? 選中線程組--添加--監(jiān)聽器--察看結(jié)果樹
?5.3 ?執(zhí)行測(cè)試,查看各個(gè)變量的值是否正確
dbname=[{name=天喔 西梅454g}, {name=天喔 鹽津桃肉170g/瓶}, {name=天喔很牛牛肉粒(沙爹)150g/袋}, {name=天喔 Q豬香辣小香腸100g/袋}] ? ? ? ?數(shù)組中存著鍵值對(duì)
name_ALL=天喔 西梅454g,天喔 鹽津桃肉170g/瓶,天喔很牛牛肉粒(沙爹)150g/袋,天喔 Q豬香辣小香腸100g/袋 ? ? ? 逗號(hào)分隔的字符串
六. 使用Beanshell 斷言完成接口結(jié)果和數(shù)據(jù)庫(kù)結(jié)果的校驗(yàn)
? ?選中搜索請(qǐng)求--添加--斷言--BeanShell 斷言
執(zhí)行整個(gè)腳本涣旨,執(zhí)行通過歪架,腳本全貌如下
作 者:Testfan 沙陌老師
出 處:微信公眾號(hào):自動(dòng)化軟件測(cè)試平臺(tái)
版權(quán)說明:歡迎轉(zhuǎn)載,但必須注明出處霹陡,并在文章頁(yè)面明顯位置給出文章鏈接