~java完整代碼如下~~
package one; //包名隨意
import java.applet.*;
import java.awt.*;
import java.awt.event.*; //系統(tǒng)庫(kù)
public class ChooseButton extends Applet implements ActionListener{
String s="以上";
Button b1=new Button("確定");
Button b2=new Button("取消"); //初始化并定義各個(gè)變量-隨意
public void init(){
add(b1);
add(b2);
b1.addActionListener(this);
b2.addActionListener(this); //設(shè)置監(jiān)聽(tīng)-你會(huì)點(diǎn)擊哪個(gè)
}
public void actionPerformed(ActionEvent e){
s=e.getSource()==b1?b1.getLabel():b2.getLabel(); //進(jìn)行選擇判斷動(dòng)作
repaint();
}
public void paint(Graphics g){
g.setColor(Color.BLUE);
Font f=new Font("黑體",Font.BOLD,20); //常規(guī)屬性設(shè)置-顯示內(nèi)容-隨意
g.setFont(f);
g.drawString("你單擊的是"+s+"按鈕",50,70);
}
}
----華麗分割線----
運(yùn)行java程序后
運(yùn)行結(jié)果初始
點(diǎn)擊“確定”按鈕后
選擇交互顯示
運(yùn)行的同時(shí),在你的bin文件夾里會(huì)生成一個(gè)網(wǎng)頁(yè)文件
html文件
該文件理論上也是可以用瀏覽器打開(kāi)的,希望感興趣的朋友多多嘗試。
鈕點(diǎn)擊追蹤可能是網(wǎng)站運(yùn)營(yíng)中最常見(jiàn)的需求之一。現(xiàn)在,通過(guò)GA4 和 Google 跟蹤代碼管理器(GTM)的配合,我們可以輕易實(shí)現(xiàn)追蹤,甚至可以導(dǎo)入到google ads,輔助廣告優(yōu)化。
具體實(shí)現(xiàn)方法有很多,本文主要介紹使用GTM的方法。
首先,我們需要?jiǎng)?chuàng)建一個(gè)觸發(fā)器,或更具體地說(shuō),創(chuàng)建一個(gè)通用點(diǎn)擊觸發(fā)器。這將允許 GTM 監(jiān)聽(tīng)與點(diǎn)擊相關(guān)的事件。
在 Google 跟蹤代碼管理器中,我們可以選擇 2 個(gè)點(diǎn)擊觸發(fā)選項(xiàng):
? All Elements
? Just links
Just links是一種常見(jiàn)的方式,因?yàn)樵S多按鈕本質(zhì)上是用戶點(diǎn)擊的裝飾鏈接。但是,如果您的按鈕恰好不是鏈接,您將無(wú)法獲得更多信息來(lái)跟蹤。
這就是為什么我們喜歡使用All Elements作為觸發(fā)器類型。此觸發(fā)器類型能夠偵聽(tīng)任何內(nèi)容(例如圖像、文件、按鈕、空白區(qū)域等)和鏈接上發(fā)生的點(diǎn)擊。它只是更通用、更通用。
創(chuàng)建一個(gè)新觸發(fā)器并選擇All Elements。
現(xiàn)在,GTM 可以識(shí)別何時(shí)發(fā)生點(diǎn)擊,無(wú)論是鏈接點(diǎn)擊還是任何元素點(diǎn)擊。
然而,我們可能需要更多的信息,而不僅僅是知道存在點(diǎn)擊交互。
要獲取有關(guān)點(diǎn)擊的信息,請(qǐng)轉(zhuǎn)到 Google 跟蹤代碼管理器并啟用與點(diǎn)擊相關(guān)的所有內(nèi)置變量。這些變量將為我們提供所需的大部分點(diǎn)擊詳細(xì)信息,例如Click Text,它會(huì)顯示按鈕上的文本。
在 GTM 工作區(qū)中,選擇Variables,然后選擇Configure。
啟用所有單擊變量。
該信息將用于創(chuàng)建觸發(fā)我們的標(biāo)簽的條件。
返回我們的產(chǎn)品頁(yè)面,讓我們單擊Add to Cart按鈕。(在這里,添加購(gòu)物車僅僅是示例,你可以把這個(gè)方法應(yīng)用在任何按鈕)
前往 Google 跟蹤代碼管理器的調(diào)試界面。識(shí)別Summary下的Click事件并選擇它。查看之前啟用的變量向我們展示了什么信息。
這里我們需要找到足夠獨(dú)特的數(shù)據(jù)作為觸發(fā)條件。
在“調(diào)試”界面中,選擇左側(cè)面板中的Click事件,然后單擊Variables選項(xiàng)卡。
重點(diǎn)關(guān)注我們已啟用的變量(Click Classes, Click ID, Click Target, Click Text, and Click URL),盡力識(shí)別按鈕特有的數(shù)據(jù)。
通常,許多按鈕都是構(gòu)建為鏈接的,這意味著您的 Click URL 變量值很有可能顯示鏈接。您可以將其用于您的觸發(fā)條件。
但是,很多時(shí)候并非所有維度的數(shù)據(jù)都齊全。在我們的示例中,Click URL沒(méi)有值,這時(shí)我們可以使用另外兩條信息:
? Click Classes,值為:single_add_to_cart_button button alt
? Click Text,值為: Add to cart
需要注意的是,Click Classes和Click Text很有可能不是唯一值,該方法只適用于追蹤網(wǎng)站所有同類按鈕。
如果我們僅僅只需要追蹤與 Ninja 產(chǎn)品的添加到購(gòu)物車按鈕,怎樣才能做到這一點(diǎn)呢?
首先,我們需要確保該按鈕是唯一的,并且在整個(gè)網(wǎng)站中不會(huì)重復(fù)。
為此,我們將使用 Chrome 開(kāi)發(fā)人員工具。如果您不熟悉,只需按照以下步驟操作即可。
右鍵單擊您的按鈕并選擇檢查。
這將使您能夠訪問(wèn)瀏覽器的開(kāi)發(fā)人員工具來(lái)查看按鈕的 HTML 和 CSS 源代碼。
單擊鍵盤上的CTRL + F來(lái)過(guò)濾 HTML 文檔。
復(fù)制并粘貼該類并將其粘貼到過(guò)濾器中。我們將復(fù)制粘貼single_add_to_cart_button 按鈕 alt。
過(guò)濾器將顯示您的網(wǎng)站上存在多少個(gè)此類。
如果過(guò)濾器結(jié)果是1 of 1 ,這意味著該按鈕的類僅有唯一一項(xiàng)。使用與此按鈕相關(guān)的 GTM 點(diǎn)擊類只會(huì)跟蹤此按鈕,而不會(huì)跟蹤另一個(gè)按鈕。
如果結(jié)果超過(guò) 1 個(gè),而您只想追蹤特定按鍵,不是同類的所有按鍵,則需要進(jìn)一步過(guò)濾。
解決方案是在觸發(fā)器中添加頁(yè)面 URL ,以僅跟蹤位于 Flying Ninja 海報(bào)所在位置的“添加到購(gòu)物車”按鈕。
讓我們回到All Elements觸發(fā)器。
默認(rèn)情況下,我們的觸發(fā)器會(huì)幫助我們檢測(cè)所有用戶點(diǎn)擊。我們需要從All Clicks切換為Some Clicks。
接下來(lái)是觸發(fā)條件的設(shè)置,在我們的例子中是:Click Classes → contains → single_add_to_cart_button
重命名您的觸發(fā)器并保存。
首先,我們創(chuàng)建一個(gè)新的 GA4 事件代碼。 Tag Type選擇Google Analytics: GA4 Event,再根據(jù)GA4的衡量ID對(duì)應(yīng)選擇Configuration Tag。如果沒(méi)有預(yù)設(shè)的Tag,則選擇None - Manually Set ID,再手動(dòng)填入衡量ID即可。
然后我們需要命名我們的事件。建議button_click。遵從Google 的命名規(guī)則的最佳實(shí)踐是小寫字母加下劃線。
此外,最好不要發(fā)明名稱,而應(yīng)該首先查看 Google 跟蹤的內(nèi)容。增強(qiáng)測(cè)量中會(huì)跟蹤點(diǎn)擊次數(shù),但沒(méi)有任何特定于按鈕點(diǎn)擊的內(nèi)容。他們將事件命名為Click,我們也可以使用它。
此時(shí),我們可以像這樣將事件發(fā)送到 GA4。
但是,我們希望向 GA4 發(fā)送有關(guān)此次點(diǎn)擊的更多詳細(xì)信息,因此我們將使用事件參數(shù)。
按鈕的文本和頁(yè)面位置對(duì)我們很有價(jià)值,因此我們將添加 2 個(gè)自定義參數(shù)。
我們的設(shè)置如下所示。
? 注意:我們討論的命名事件的方法與命名事件參數(shù)的方法相同。建議使用推薦事件或增強(qiáng)測(cè)量列表中任何適合您需求的事件。如果您選擇為事件參數(shù)使用自定義名稱,并且想要在 GA4 報(bào)告(自定義維度)中使用,則參數(shù)的數(shù)量將被限制為 50 個(gè)。
Google 的推薦事件和增強(qiáng)型測(cè)量沒(méi)有與按鈕文本相關(guān)的參數(shù)。我們能找到的最接近的是link_text。link_text參數(shù)用于文件下載 。
你也可以自定義Parameter Name。例如,button_text,甚至click_text。
由于目標(biāo)是顯示按鈕文本的值,因此我們可以從之前啟用的Click Text變量中獲取值。
選擇Click Text。
如果我們還想知道按鈕所在的頁(yè)面。只需重復(fù)上述過(guò)程并在Value下選擇Page頁(yè)面 URL即可。
添加我們之前創(chuàng)建的所有觸發(fā)器。
保存您的標(biāo)簽。
啟用Preview模式并單擊Add to cart按鈕。
您可以看到我們的標(biāo)簽已觸發(fā)。
在 GA4 的 DebugView 中,您將看到即將發(fā)生的事件。
在參數(shù)旁邊,您可以看到我們的link_text和page_location事件參數(shù)及其值。
至此,事件創(chuàng)建已經(jīng)完成。最多不超過(guò)48小時(shí),我們就可以在GA4的事件中找到它,也可以用它創(chuàng)建轉(zhuǎn)化和受眾。
ostman是一款支持http協(xié)議的接口調(diào)試與測(cè)試工具,其主要特點(diǎn)就是功能強(qiáng)大,使用簡(jiǎn)單且易用性好 。無(wú)論是開(kāi)發(fā)人員進(jìn)行接口調(diào)試,還是測(cè)試人員做接口測(cè)試,postman都是我們的首選工具之一 。那么接下來(lái)就介紹下postman到底有哪些功能,它們分別都能干些什么 。下面先通過(guò)一張圖來(lái)直觀地來(lái)看下postman中所包含的功能 。
當(dāng)然,以上功能也只是展示了postman的一部分功能,為了能更加全面的體現(xiàn)這款工具的特點(diǎn),我將從以下三個(gè)維度來(lái)加以說(shuō)明。它們分別是:
postman在2018年之后就不再支持瀏覽器版本,所以,想要使用它就必須先下載客戶端再安裝使用,下面就以Windows系統(tǒng)為例進(jìn)行安裝 。
1.下載與安裝
postman安裝步驟:
2.界面導(dǎo)航說(shuō)明
初次使用postman的朋友可能對(duì)界面上的一些元素不太熟悉,下面就通過(guò)一張圖來(lái)說(shuō)明這些元素的含義 。
3.發(fā)送第一個(gè)請(qǐng)求
如果你是第一次使用postman發(fā)送請(qǐng)求,下面這個(gè)例子可以作為一個(gè)最基本的入門,可以幫我們建立一個(gè)初始印象 。
1.常見(jiàn)類型的接口請(qǐng)求
常見(jiàn)的接口有如下四種類型,分別是含有查詢參數(shù)的接口,表單類型的接口,json類型的接口以及含有上傳文件的接口,以下就對(duì)這四種類型接口及如何在postman中請(qǐng)求進(jìn)行說(shuō)明 。
1.1 .查詢參數(shù)的接口請(qǐng)求
什么是查詢參數(shù)?
所謂的查詢參數(shù),其實(shí)就是URL地址中問(wèn)號(hào)(?)后面的部分就叫查詢參數(shù),比如:http://cx.shouji.360.cn/phonearea.php?number=13012345678 。在這個(gè)接口中,查詢參數(shù)就是:number=13012345678 。而這一部分是由有鍵值對(duì)組成,格式為:key1=value1&key2=value2, 如果有多組鍵值對(duì),要用&隔開(kāi) 。
postman如何請(qǐng)求
在postman中實(shí)現(xiàn)對(duì)這類接口請(qǐng)求非常簡(jiǎn)單,一般就需要明確倆個(gè)參數(shù)即可,一個(gè)是請(qǐng)求方法,一個(gè)請(qǐng)求地址。
針對(duì)上面的那個(gè)接口,地址已經(jīng)給出 ,而它的請(qǐng)求方法是get 。那么在postman中只需要把這倆個(gè)參數(shù)填寫上即可請(qǐng)求 。
具體實(shí)現(xiàn)步驟:
說(shuō)明:查詢參數(shù)的URL一般直接拷貝到輸入的URL地址欄中就可以了,當(dāng)然也可以把查詢參數(shù)在Params中輸入,倆者的效果是一樣的 。
1.2 表單類型的接口請(qǐng)求
什么是表單 ?
我們都知道,在發(fā)送HTTP請(qǐng)求的時(shí)候,一個(gè)請(qǐng)求中一般包含三個(gè)部分,分別是請(qǐng)求行,請(qǐng)求頭,請(qǐng)求體 。
不同的接口,請(qǐng)求體的數(shù)據(jù)類型是不一樣的,比較常見(jiàn)的一種就是表單類型,那么什么是表單類型呢 ? 簡(jiǎn)單理解就是在請(qǐng)求頭中查看Content-Type,它的值如果是:application/x-www-form-urlencoded .那么就說(shuō)明客戶端提交的數(shù)據(jù)是以表單形式提交的 。見(jiàn)下圖
postman中如何請(qǐng)求?
如果在postman請(qǐng)求上圖的接口,我們只需要填寫四個(gè)參數(shù),分別是(可以參考上圖):
實(shí)現(xiàn)步驟:
1.3 上傳文件的表單請(qǐng)求
在做接口測(cè)試時(shí),我們經(jīng)常會(huì)遇到需要上傳文件的接口,比如微信的更新頭像。這就需要用到:multipart/form-data。它也屬于一種表單,但它既支持表單請(qǐng)求,也支持文件上傳。 它的請(qǐng)求報(bào)文中數(shù)據(jù)往往是下面這樣的。
POST http://localhost/index.php/home/Uploadify/imageUp/savepath/head_pic/pictitle/banner/dir/images.html HTTP/1.1
Content-Type: multipart/form-data
file=a1.jpg
這種類型的接口,在postman中該如何請(qǐng)求呢 ? 我們先分析需要填寫的參數(shù) 。
實(shí)現(xiàn)步驟:
1.4 json類型的接口請(qǐng)求
這應(yīng)該是接口測(cè)試中最常見(jiàn)的一種情況了 , 也就是請(qǐng)求體類型為json,我們來(lái)看下這個(gè)請(qǐng)求報(bào)文 。
POST http://xxx/api/sys/login HTTP/1.1
Content-Type: application/json;charset=UTF-8
{"account":"root","password":"123456"}
根據(jù)以上報(bào)文,我們可以分析出,我們?cè)趐ostman只需要填寫四個(gè)參數(shù)即可,具體如下:
實(shí)現(xiàn)步驟:
2.接口響應(yīng)數(shù)據(jù)解析
響應(yīng)數(shù)據(jù)是發(fā)送請(qǐng)求后經(jīng)過(guò)服務(wù)器處理后返回的結(jié)果,響應(yīng)由三部分組成,分別是狀態(tài)行、響應(yīng)頭、響應(yīng)體。我們來(lái)看下postman的響應(yīng)數(shù)據(jù)展示。
在postman中的響應(yīng)數(shù)據(jù)展示:
那么這些數(shù)據(jù)對(duì)我們做接口測(cè)試有什么作用呢 ?
接下來(lái)我們?cè)賮?lái)關(guān)注下Body中的幾個(gè)顯示主題,分別是:Pretty,Raw,Preview .
Pretty:翻譯成中文就是漂亮 , 也就是說(shuō)返回的Body數(shù)據(jù)在這個(gè)標(biāo)簽中查看 ,都是經(jīng)過(guò)格式化的,格式化后的數(shù)據(jù)看起來(lái)更加直觀,所以postman默認(rèn)展示的也是這個(gè)選項(xiàng)。比如返回html頁(yè)面,它會(huì)經(jīng)過(guò)格式化成HTML格式后展示,比如返回json,那么也會(huì)格式化成json格式展示 。
Raw:翻譯成中文未經(jīng)過(guò)加工的,也就是原始數(shù)據(jù) ,原始數(shù)據(jù)一般都是本文格式的,未經(jīng)過(guò)格式化處理的,一般在抓包工具中都有這個(gè)選項(xiàng) 。
Preview:翻譯成中文就是預(yù)覽,這個(gè)選項(xiàng)一般對(duì)返回HTML的頁(yè)面效果特別明顯,如請(qǐng)求百度后返回結(jié)果,點(diǎn)擊這個(gè)選項(xiàng)后就直接能查看到的頁(yè)面 ,如下圖 。同時(shí)這個(gè)選項(xiàng)和瀏覽器抓包中的Preview也是一樣的 。
3.接口管理(Collection)
當(dāng)我們對(duì)一個(gè)或多個(gè)系統(tǒng)中的很多用例進(jìn)行維護(hù)時(shí),首先想到的就是對(duì)用例進(jìn)行分類管理,同時(shí)還希望對(duì)這批用例做回歸測(cè)試 。在postman也提供了這樣一個(gè)功能,就是Collection 。通過(guò)這個(gè)Collection就可以滿足我們的上面說(shuō)的需求。
先對(duì)Collection功能的使用場(chǎng)景做個(gè)簡(jiǎn)單總結(jié) 。
那么Collection是如何去管理用例的呢 ? 先想象我們要測(cè)試一個(gè)系統(tǒng),系統(tǒng)下有多個(gè)模塊,每個(gè)模塊下有很多的被測(cè)接口用例 。那么基于這個(gè)場(chǎng)景,我們來(lái)通過(guò)Collection來(lái)進(jìn)行實(shí)現(xiàn):
那么通過(guò)以上三個(gè)步驟,達(dá)到的效果就是如圖所示:
總結(jié),通過(guò)上面的操作,我們實(shí)現(xiàn)了一個(gè)最簡(jiǎn)單的demo模型。但實(shí)際上,有了這個(gè)功能才是postman學(xué)習(xí)的開(kāi)始,因?yàn)楹芏喙δ芏际腔A(chǔ)這個(gè)功能的基礎(chǔ)上進(jìn)行的,比如用例的批量執(zhí)行,Mock ,接口文檔等功能 。
4. 批量執(zhí)行接口請(qǐng)求
當(dāng)我們?cè)谝粋€(gè)Collection中編寫了很多的接口測(cè)試用例,想一起執(zhí)行這批用例,在postman中是如何操作呢 ?
實(shí)現(xiàn)步驟:
對(duì)上面的幾個(gè)紅框內(nèi)的功能進(jìn)行簡(jiǎn)單說(shuō)明:
總體來(lái)說(shuō),這個(gè)功能主要是用于對(duì)一個(gè)Collection中的所有用例或部分用例進(jìn)行批量運(yùn)行,已達(dá)到手工回歸測(cè)試的目的。
5.日志調(diào)試
在做接口測(cè)試時(shí),經(jīng)常會(huì)因?yàn)榇a寫的有問(wèn)題導(dǎo)致報(bào)錯(cuò),這時(shí)通過(guò)查看日志就顯得非常重要了,postman也提供了這樣的功能,它允許我們?cè)谀_本中編寫打印語(yǔ)句,查看打印的結(jié)果 ; 同時(shí)也可以查看每個(gè)請(qǐng)求的日志信息 。
在postman中編寫日志打印語(yǔ)句使用的是JavaScript,編寫的位置可以是Pre-request Script 或Tests標(biāo)簽中。編寫打印語(yǔ)句如:console.log("我是一條日志")
那么打印的日如何看呢 ? 在postman中有倆個(gè)入口,第一個(gè)入口就是:view-show postman console 。
第二個(gè)入口就是左下角第三個(gè)圖標(biāo) 。
打開(kāi)的日志界面
這里面有幾個(gè)比較實(shí)用的功能:
總之,通過(guò)這個(gè)功能,我們?cè)谡?qǐng)求接口報(bào)錯(cuò)時(shí),通過(guò)打印響應(yīng)的日志,就能很輕松地找到問(wèn)題原因了 。
6.斷言
如果沒(méi)有斷言,我們只能做接口的功能測(cè)試,但有了斷言后,就為我們做自動(dòng)化提供了條件,并且在postman中的斷言是非常方便和強(qiáng)大的 。
我們先來(lái)了解下postman斷言的一些特點(diǎn) ,具體如下
在上面我們介紹到,編寫的斷言代碼是JavaScript,那如果不會(huì)寫怎么辦 ? 不用擔(dān)心,因?yàn)閜ostman已經(jīng)給我們內(nèi)置了一些常用的斷言 。用的時(shí)候,只需從右側(cè)點(diǎn)擊其中一個(gè)斷言,就會(huì)在文本框中自動(dòng)生成對(duì)應(yīng)斷言代碼塊 。
接下來(lái)就讓我們了解一些常用斷言,還是按響應(yīng)的組成來(lái)劃分,分別是狀態(tài)行,響應(yīng)頭,響應(yīng)體。
狀態(tài)行中又包括狀態(tài)碼,狀態(tài)消息 。在postman也可以對(duì)這兩個(gè)進(jìn)行斷言
狀態(tài)行中的斷言:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200); //這里填寫的200是預(yù)期結(jié)果,實(shí)際結(jié)果是請(qǐng)求返回結(jié)果
});
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK"); //斷言響應(yīng)狀態(tài)消息包含OK
});
響應(yīng)頭中的斷言
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type"); //斷言響應(yīng)頭存在"Content-Type"
});
斷言響應(yīng)體(重點(diǎn))
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
//注解
pm.expect(pm.response.text()).to.include("string") 獲取響應(yīng)文本中包含string
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
//注解
pm.response.to.have.body("response_body_string"); 獲取響應(yīng)體等于response_body_string
pm.test("Your test name", function () {
var jsonData=pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
//注解
var jsonData=pm.response.json() 獲取響應(yīng)體,以json顯示,賦值給jsonData .注意:該響應(yīng)體必須返會(huì)是的json,否則會(huì)報(bào)錯(cuò)
pm.expect(jsonData.value).to.eql(100) 獲取jsonData中鍵名為value的值,然后和100進(jìn)行比較
響應(yīng)時(shí)間(一般用于性能測(cè)試)
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200); //斷言響應(yīng)時(shí)間<200ms
});
案例說(shuō)明:
針對(duì)以下接口返回的數(shù)據(jù)進(jìn)行斷言:
{
"cityid": "101120101",
"city": "濟(jì)南",
"update_time": "2020-04-17 10:50",
"wea": "晴",
"wea_img": "qing",
"tem": "16",
"tem_day": "20",
"tem_night": "9",
"win": "東北風(fēng)",
"win_speed": "3級(jí)",
"win_meter": "小于12km/h",
"air": "113"
}
總結(jié),整體來(lái)說(shuō),如果用postman做接口測(cè)試,這個(gè)斷言功能必不可少,其中我們常斷言的響應(yīng)體包含和JSON這倆個(gè)斷言又是重重之重。
7. 變量(全局/集合/環(huán)境)
變量可以使我們?cè)谡?qǐng)求或腳本中存儲(chǔ)和重復(fù)使用其值,通過(guò)將值保存在變量中,可以在集合,環(huán)境或請(qǐng)求中引用。
對(duì)我們做接口測(cè)試來(lái)說(shuō),又是一個(gè)非常重要的功能 。
在postman常用的三種變量分別是全局變量,環(huán)境變量,集合變量 。
其中,他們的作用域范圍依次從大到小:全局變量>集合變量>環(huán)境變量 。 當(dāng)在幾個(gè)不同的范圍內(nèi)都申明了相同的變量時(shí),則會(huì)優(yōu)先使用范圍最小的變量使。
想要使用變量中的值只需倆個(gè)步驟,分別是定義變量和獲取變量 。
定義變量
定義全局變量和環(huán)境變量,點(diǎn)擊右上角的小齒輪,彈出如下界面,就可以根據(jù)需求定義全局變量或者環(huán)境變量了。
已經(jīng)定義的全局變量和環(huán)境變量,可以進(jìn)行快速查看
定義集合變量
選擇一個(gè)集合,打開(kāi)查看更多動(dòng)作(...)菜單,然后點(diǎn)擊編輯 。選擇“變量”選項(xiàng)卡以編輯或添加到集合變量。
定義變量除了以上方式,還有另外一種方式 。但是這種方式在不同的位置定義,編寫不一樣。
在Tests,Pre-requests Script:
獲取變量
定義好變量,接下來(lái)就可以使用變量了 。需要注意的是,在不同的位置獲取變量,編寫的規(guī)則也是不一樣的 。
如果在請(qǐng)求參數(shù)中獲取變量,無(wú)論是獲取全局變量,還是環(huán)境變量,還是集合變量,獲取的方式都是一樣的編寫規(guī)則:{{變量名}} 。
如果是在編寫代碼的位置(Tests,Pre-requests Script)獲取變量,獲取不同類型的變量,編寫的代碼都不相同,具體如下:
變量的使用場(chǎng)景非常廣泛,比如我們后面要提到的接口關(guān)聯(lián),請(qǐng)求前置腳本都會(huì)使用到變量 。
8.請(qǐng)求前置腳本
前置腳本其實(shí)就是在Pre-requests Script中編寫的JavaScript腳本,想要了解這個(gè)功能,需要先了解它的執(zhí)行順序。那么下面就來(lái)看下它的執(zhí)行順序 。
可以看出,一個(gè)請(qǐng)求在發(fā)送之前,會(huì)先去執(zhí)行Pre Request Script(前置腳本)中的代碼 。那么這個(gè)功能在實(shí)際工作中有什么作用呢 ?
主要場(chǎng)景:一般情況下,在發(fā)送請(qǐng)求前需要對(duì)接口的數(shù)據(jù)做進(jìn)一步處理,就都可以使用這個(gè)功能,比如說(shuō),登錄接口的密碼,在發(fā)送前需要做加密處理,那么就可以在前置腳本中做加密處理,再比如說(shuō),有的接口的輸入?yún)?shù)有一些隨機(jī)數(shù),每請(qǐng)求一次接口參數(shù)值都會(huì)發(fā)送變化,就可以在前置腳本中編寫生成隨機(jī)數(shù)的代碼 。總體來(lái)說(shuō),就是在請(qǐng)求接口之前對(duì)我們的請(qǐng)求數(shù)據(jù)進(jìn)行進(jìn)一步加工處理的都可以使用前置腳本這個(gè)功能。
接下來(lái)通過(guò)一個(gè)案例來(lái)看下該功能是如何使用 ?
案例:
實(shí)現(xiàn)步驟:
總之,這個(gè)前置腳本對(duì)我們做接口測(cè)試也非常有用,對(duì)一些復(fù)雜的場(chǎng)景,都可以使用前置腳本進(jìn)行處理后再請(qǐng)求接口 。
9. 接口關(guān)聯(lián)
在我們測(cè)試的接口中,經(jīng)常出現(xiàn)這種情況 。 上一個(gè)接口的返回?cái)?shù)據(jù)是下一個(gè)接口的輸入?yún)?shù) ,那么這倆個(gè)接口就產(chǎn)生了關(guān)聯(lián)。 這種關(guān)聯(lián)在做接口測(cè)試時(shí)非常常見(jiàn),那么在postman中,如何實(shí)現(xiàn)這種關(guān)聯(lián)關(guān)系呢 ?
實(shí)現(xiàn)思路:
案例:
{
"url": "/public/upload/user//head_pic//ba51d1c2f7f7b98dfb5cad90846e2d79.jpg",
"title": "banner",
"original": "",
"state": "SUCCESS",
"path": "images"
}
而圖像預(yù)覽接口URL為:http://localhost/public/upload/user//head_pic//ba51d1c2f7f7b98dfb5cad90846e2d79.jpg 。可以看出這個(gè)接口的URL后半部分其實(shí)是上一個(gè)接口返回的url的值 。那么這倆個(gè)接口就產(chǎn)生了關(guān)聯(lián)。那么在postman 可以通過(guò)以下三步完成這倆個(gè)接口的關(guān)聯(lián)實(shí)現(xiàn) 。
實(shí)現(xiàn)步驟:
可以看出,接口的關(guān)聯(lián)的解決方案都是用的是變量中的知識(shí),也就是說(shuō)只要你明確了要提取的值,后面就是保存該值,然后在其他接口使用該值就可以了。
10.常見(jiàn)返回值獲取
在做接口測(cè)試時(shí),請(qǐng)求接口返回的數(shù)據(jù)都是很復(fù)雜的json數(shù)據(jù),有著多層嵌套,這樣的數(shù)據(jù)層級(jí)在postman怎么獲取呢 ?
案例1:多層json嵌套, 獲取user_id的值
{
"code": 0,
"message": "請(qǐng)求成功!",
"data": {
"user_id": "1252163151781167104"
}
}
//獲取json體數(shù)據(jù)
var jsonData=pm.response.json()
// 獲取user_id的值,通過(guò).獲取
var user_id=jsonData.data.user_id
案例2:json中存在列表,獲取points中的第二個(gè)元素
{
"code": 0,
"message": "請(qǐng)求成功!",
"data": {
"roles": {
"api": [
"API-USER-DELETE"
],
"points": [
"point-user-delete",
"POINT-USER-UPDATE",
"POINT-USER-ADD"
]
},
"authCache": null
}
}
//獲取json體數(shù)據(jù)
var jsonData=pm.response.json()
// 獲取user_id的值,通過(guò)下標(biāo)獲取列表中某個(gè)元素
var user_id=jsonData.data.roles.points[1]
案例3:列表中取最后一個(gè)元素
{
"code": 0,
"message": "請(qǐng)求成功!",
"data": {
"total": 24,
"rows": [
{
"id": "1066370498633486336",
"mobile": "15812340003",
"username": "zbz"
},
{
"id": "1071632760222810112",
"mobile": "16612094236",
"username": "llx"
},
...
{
"id": "1075383133106425856",
"mobile": "13523679872",
"username": "test001",
},
//獲取json體數(shù)據(jù)
var jsonData=pm.response.json()
// 獲取id的值,通過(guò)slice(-1)獲取列表中最后一個(gè)元素。
var id=jsonData.data.rows.slice(-1)[0]
說(shuō)明:由于平臺(tái)文章規(guī)則限制,在一文中無(wú)法容納過(guò)多的內(nèi)容,故將第二部分和第三部分分成兩個(gè)單獨(dú)的篇幅加以發(fā)布,感興趣的朋友可以查看后面的兩篇postman文章 。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。