使用 Rest-Assured 和 TestNG 進行購物車功能的 API 自動化測試

這段代碼使用了 Rest-Assured 進行 API 測試,結合 TestNG 框架執行多個 HTTP 請求并進行斷言驗證。以下是對每個測試方法的詳細解釋,包括代碼邏輯和測試目的。



1. test01() 方法 - 提取響應數據

@Test
public void test01() {String jsonData = "{\"principal\":\"lemon_auto\",\"credentials\":\"lemon123456\",\"appType\":3,\"loginType\":0}";Response response =given().header("Content-Type", "application/json; charset=UTF-8").body(jsonData).when().post("http://mall.lemonban.com:8107/login").then().log().all().extract().response();// 提取響應數據String tokenValue = response.jsonPath().get("userId");System.out.println(tokenValue);
}
代碼邏輯
  • 目標:該測試發送一個 POST 請求進行登錄,并從響應中提取 userId 字段。

  • 步驟

    1. 使用 given() 設置請求頭和請求體。
    2. 使用 when() 發送 POST 請求。
    3. 使用 then() 打印響應并提取響應內容(使用 jsonPath() 方法獲取 userId 字段)。
    4. 打印提取到的 userId
用途

測試如何從 JSON 響應中提取字段(如 userId)。適用于需要從響應中提取數據的情況。



2. test_json() 方法 - 提取 JSON 響應中的數據

@Test
public void test_json() {String jsonData = "{\"principal\":\"lemon_auto\",\"credentials\":\"lemon123456\",\"appType\":3,\"loginType\":0}";Response response = given().log().all().queryParam("prodName", "測試").queryParam("sort", 0).queryParam("orderBy", 0).queryParam("current", 1).when().get("http://mall.lemonban.com:8107/search/searchProdPage").then().log().all().extract().response();// 提取響應數據中的產品ID列表List<Object> list = response.jsonPath().getList("records.prodId");System.out.println(list);
}
代碼邏輯
  • 目標:該測試發送一個 GET 請求,獲取產品信息,并提取產品 ID 列表。

  • 步驟

    1. 使用 given() 設置查詢參數。
    2. 發送 GET 請求并提取 JSON 響應。
    3. 使用 jsonPath() 提取 records.prodId 列表。
    4. 打印提取到的產品 ID 列表。
用途

該方法展示了如何提取 JSON 響應中的數組數據。可以用于從響應體中提取多個相同類型的元素(如產品 ID)。



3. test_html() 方法 - 提取 HTML 響應中的數據

@Test
public void test_html() {String jsonData = "{\"principal\":\"lemon_auto\",\"credentials\":\"lemon123456\",\"appType\":3,\"loginType\":0}";Response response =given().log().all().queryParam("prodName", "測試").queryParam("sort", 0).queryParam("orderBy", 0).queryParam("current", 1).when().get("https://www.baidu.com/").then().log().all().extract().response();Object value = response.htmlPath().get("html.head.title");System.out.println(value);
}
代碼邏輯
  • 目標:該測試發送一個 GET 請求獲取百度首頁,并提取 HTML 響應中的 title 標簽內容。

  • 步驟

    1. 發送 GET 請求到百度首頁。
    2. 使用 htmlPath() 提取 HTML 內容中的 title 標簽。
    3. 打印提取到的 title 內容。
用途

該方法展示了如何提取 HTML 響應中的元素,常用于測試網頁內容(如標題、元數據等)。



4. test_xml() 方法 - 提取 XML 響應中的數據

@Test
public void test_xml() {Response response =given().log().all().header("Content-Type","application/json; charset=UTF-8").when().get("http://httpbin.org/xml").then().log().all().extract().response();Object value = response.xmlPath().get("slideshow.slide[1].item[0]");System.out.println("\n打印結果為:" + value);
}
代碼邏輯
  • 目標:該測試發送一個 GET 請求,獲取 XML 格式的響應數據,并提取特定元素值。

  • 步驟

    1. 發送 GET 請求獲取 XML 響應。
    2. 使用 xmlPath() 提取 slideshow.slide[1].item[0] 元素。
    3. 打印提取到的值。
用途

展示了如何從 XML 響應中提取數據,適用于解析 XML 格式的響應。



5. test_assert() 方法 - 使用斷言驗證響應

@Test
public void test_assert() {String jsonData = "{\"principal\":\"lemon_auto\",\"credentials\":\"lemon123456\",\"appType\":3,\"loginType\":0}";Response response =given().header("Content-Type","application/json; charset=UTF-8").body(jsonData).when().post("http://mall.lemonban.com:8107/login").then().log().all().extract().response();int statusCode = response.statusCode();Object actualvalue = response.jsonPath().get("nickName");Assert.assertEquals(statusCode, 200);Assert.assertEquals(actualvalue, "lemon_auto");System.out.println("打印結果為:" + actualvalue);
}
代碼邏輯
  • 目標:發送 POST 請求進行登錄,斷言響應的狀態碼為 200,并驗證 nickName 字段的值是否為 lemon_auto

  • 步驟

    1. 發送 POST 請求進行登錄,獲取響應。
    2. 提取響應的狀態碼和 nickName 字段。
    3. 使用 Assert.assertEquals() 斷言狀態碼和 nickName 是否符合預期。
    4. 打印 nickName 的值。
用途

該方法展示了如何使用 TestNG 的斷言功能進行驗證,確保接口返回正確的狀態碼和數據。適用于驗證 API 響應的正確性。


總結

這段代碼展示了如何使用 Rest-Assured 提取和驗證不同格式的響應數據(JSON、HTML、XML),以及如何使用 TestNG 進行斷言驗證。每個方法展示了不同的功能和用例,適用于不同類型的 API 測試。

  • test01():提取 JSON 響應中的 userId 字段。
  • test_json():提取 JSON 響應中的列表數據。
  • test_html():提取 HTML 響應中的 title 標簽內容。
  • test_xml():提取 XML 響應中的指定元素。
  • test_assert():通過斷言驗證響應的狀態碼和字段值。

這些方法可以作為測試 RESTful API 時的數據提取和斷言驗證模板,幫助我們更高效地進行接口測試。





Rest-Assured API 測試筆記:購物車功能自動化測試

這段代碼使用 Rest-AssuredTestNG 框架來進行購物車功能的接口自動化測試。下面是每個步驟的詳細解釋,包括代碼邏輯和測試目的。


1. 登錄并獲取 token

// 1. 登錄
String jsonData = "{\"principal\":\"lemon_auto\",\"credentials\":\"lemon123456\",\"appType\":3,\"loginType\":0}";
Response response1 =given().header("Content-Type", "application/json; charset=UTF-8").body(jsonData).when().post("http://mall.lemonban.com:8107/login").then().log().all().extract().response();// 提取返回的 token 和 token_type
String token = response1.jsonPath().get("access_token");
String token_type = response1.jsonPath().get("token_type");
String tokenValue = token_type + token;
System.out.println("打印結果為:" + tokenValue);
代碼邏輯
  • 目標:登錄并獲取 access_tokentoken_type,然后生成完整的 tokenValue 用于后續接口請求的認證。

  • 步驟

    1. 使用 given() 設置請求頭和請求體(登錄的用戶名、密碼、appTypeloginType)。
    2. 使用 post() 發送 POST 請求進行登錄。
    3. 使用 jsonPath() 提取返回的 access_tokentoken_type
    4. 拼接得到完整的 tokenValue,打印結果,用于后續的認證請求。
用途
  • 登錄后,獲取 token 用于后續 API 請求的認證,保證請求的安全性。

2. 搜索商品并獲取 prodId

// 2. 選擇商品
Response response2 =given().log().all().queryParam("prodName", "測試").queryParam("sort", 0).queryParam("orderBy", 0).queryParam("current", 1).when().get("http://mall.lemonban.com:8107/search/searchProdPage").then().log().all().extract().response();Object prodId = response2.jsonPath().get("records.prodId[0]");
System.out.println("打印結果為:" + prodId);
代碼邏輯
  • 目標:搜索商品并從返回的響應中提取 prodId,用于后續商品詳情查詢或購物車操作。

  • 步驟

    1. 使用 queryParam() 設置查詢參數,如商品名稱、排序、當前頁等。
    2. 發送 GET 請求并獲取商品列表。
    3. 使用 jsonPath() 提取返回的商品列表中的第一個商品的 prodId
    4. 打印 prodId,用于后續操作。
用途
  • 通過商品名稱等搜索條件獲取商品的 prodId,在后續操作中使用該 ID(如獲取商品詳情、添加購物車等)。

3. 進入商品詳情頁并獲取 shopIdskuId

// 3. 進入商品的詳情頁面
Response response3 =given().log().all().queryParam("prodId", prodId).when().get("http://shop.lemonban.com:8107/prod/prodInfo?prodId=5826").then().log().all().extract().response();// 獲取店鋪id
int shopId = response3.jsonPath().get("shopId");// 獲取庫存id
int skuId = response3.jsonPath().get("skuList.skuId[0]");
代碼邏輯
  • 目標:進入商品詳情頁,獲取 shopIdskuId,這兩個 ID 是后續添加商品到購物車所需的參數。

  • 步驟

    1. 使用 queryParam() 傳遞 prodId 查詢商品詳情。
    2. 發送 GET 請求,獲取商品的詳細信息。
    3. 使用 jsonPath() 提取 shopIdskuId
用途
  • 獲取商品的 shopIdskuId,這兩個參數對于后續添加商品到購物車時是必需的。

4. 添加商品到購物車

// 4. 添加購物車
String jsonData4 = String.format("{\"basketId\":%d,\"count\":1,\"prodId\":\"%s\",\"shopId\":%d,\"skuId\":%d}",basketId, prodId, shopId, skuId
);Response response4 =given().log().all().header("Content-Type", "application/json; charset=UTF-8").header("Authorization", tokenValue).body(jsonData4).when().post("http://shop.lemonban.com:8107/p/shopCart/changeItem").then().log().all().extract().response();// 斷言狀態碼和響應內容
int statusCode = response4.getStatusCode();
Assert.assertEquals(statusCode, 200, "添加購物車失敗,狀態碼不是 200");
System.out.println("響應內容為:" + response4.getBody().asString());
代碼邏輯
  • 目標:構建請求體,將商品添加到購物車。

  • 步驟

    1. 使用 String.format() 格式化請求體,填充 basketIdprodIdshopIdskuId
    2. 使用 given() 設置請求頭(包括認證 token)和請求體。
    3. 發送 POST 請求將商品添加到購物車。
    4. 獲取響應并進行斷言,確保返回狀態碼為 200,表示成功添加商品。
用途
  • 通過 POST 請求將商品添加到購物車,驗證接口返回的狀態碼是否為 200,確保添加成功。

5. 斷言驗證

// 斷言驗證
int statusCode = response4.getStatusCode();
Assert.assertEquals(statusCode, 200, "添加購物車失敗,狀態碼不是 200");
代碼邏輯
  • 目標:驗證添加商品到購物車的接口響應是否正確,確保返回的狀態碼為 200。

  • 步驟

    1. 獲取響應的狀態碼。
    2. 使用 Assert.assertEquals() 驗證狀態碼是否為 200,如果不是,則拋出異常,測試失敗。
用途
  • 斷言狀態碼是否為 200,以確保購物車添加操作成功。

總結

這段代碼展示了如何使用 Rest-AssuredTestNG 進行購物車功能的接口自動化測試,涵蓋了以下測試步驟:

  1. 登錄:獲取 access_token,用于后續接口請求的認證。
  2. 商品搜索:獲取商品的 prodId
  3. 商品詳情:獲取商品的 shopIdskuId
  4. 添加購物車:將商品添加到購物車,并驗證接口返回的狀態碼是否為 200。
  5. 斷言驗證:確保購物車功能的操作成功,驗證接口響應的準確性。

每個步驟都涵蓋了如何發送請求、提取數據和進行驗證,是實現 API 測試的一種有效方法。

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

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

相關文章

【設計模式-4.7】行為型——備忘錄模式

說明&#xff1a;本文介紹行為型設計模式之一的備忘錄模式 定義 備忘錄模式&#xff08;Memento Pattern&#xff09;又叫作快照模式&#xff08;Snapshot Pattern&#xff09;或令牌模式&#xff08;Token Pattern&#xff09;指在不破壞封裝的前提下&#xff0c;捕獲一個對…

2025年滲透測試面試題總結-天融信[社招]滲透測試工程師(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 天融信[社招]滲透測試工程師 一、Java Spring Boot組件漏洞 1. CVE-2018-1270&#xff08;WebSocket RCE&…

華為OD機考-內存冷熱標記-多條件排序

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的區別while (in.hasNextLine()) { // 注意 while 處理多個 caseint a in.nextInt();int[] arr new int[a];for(int…

PPT轉圖片拼貼工具 v3.0

軟件介紹 這個軟件就是將PPT文件轉換為圖片并且拼接起來。 這個代碼支持導入單個文件也支持導入文件夾 但是目前還沒有解決可視化界面問題。 效果展示 軟件源碼 import os import re import win32com.client from PIL import Image from typing import List, Uniondef con…

NLP學習路線圖(三十):微調策略

在自然語言處理領域,預訓練語言模型(如BERT、GPT、T5)已成為基礎設施。但如何讓這些“通才”模型蛻變為特定任務的“專家”?微調策略正是關鍵所在。本文將深入剖析七種核心微調技術及其演進邏輯。 一、基礎概念:為什么需要微調? 預訓練模型在海量語料上學習了通用語言表…

講述我的plc自學之路 第十三章

我和lora都是那種理想主義者&#xff0c;這是我們的共同之處。但是lora比我要更文藝一些&#xff0c;她讀的書畢竟比我多&#xff0c;上的又是名校。受北大人文氣息的熏陶&#xff0c;她總是對愛情充滿了太多幻想。 “說說你的過往吧&#xff0c;lora。”我給lora倒了一杯啤酒&…

GPU虛擬化

引言 現有如下環境&#xff08;注意相關配置&#xff1a;只有一個k8s節點&#xff0c;且該節點上只有一張GPU卡&#xff09;&#xff1a; // k8s版本 $ kubectl version Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.7&…

【免費數據】2005-2019年我國272個地級市的旅游競爭力多指標數據(33個指標)

旅游業是一個城市的重要產業構成。旅游競爭力是一個城市競爭力的重要構成部分。一個城市的旅游競爭力反映了其在旅游市場競爭中的比較優勢。 今日我們分享的是2005-2019年我國272個地級市的旅游競爭力多指標數據&#xff01;該數據集源自2025年4月發表于《地理學報》的論文成果…

AI智能驅動瀏覽器工具Browser Use詳解

前言 在之前關于 AI 測試相關的幾篇文章中,我們分別介紹了通過 playwright-mcp,以及 midscene.js、magentic ui 等幾個不同的 AI 瀏覽器工具,實現 AI 驅動自動化測試的方法介紹。而其實在這些不斷涌現的新工具出現之前,還有一個更早推出(2024.11),也同樣還在不斷完善的…

新成果:GaN基VCSEL動態物理模型開發

作為高速數據傳輸與光電信號處理的核心器件&#xff0c;垂直腔面發射激光器&#xff08;VCSEL&#xff09;在高速光通信、激光雷達等領域應用廣泛&#xff0c;其動態特性直接關聯器件調制速率及穩定性等關鍵參數。近期&#xff0c;天津賽米卡爾科技有限公司技術團隊開發了GaN基…

嵌入式學習筆記 - freeRTOS xTaskResumeAll( )函數解析

第一部分 移除掛起等待列表中的任務 while( listLIST_IS_EMPTY( &xPendingReadyList ) pdFALSE )//循環尋找直到為空&#xff0c;把全部任務掃描一遍 { pxTCB ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingR…

大數據+智能零售:數字化變革下的“智慧新零售”密碼

大數據+智能零售:數字化變革下的“智慧新零售”密碼 大家好,今天咱們聊聊一個火到不行的話題:大數據在智能零售中的應用。這個領域,不僅是技術的“硬核戰場”,更是商業創新的風口浪尖。誰能玩轉數據,誰就能掌控消費者心智,實現銷售爆發。 咱們不搞枯燥學術,而是用最“…

react 常見的閉包陷阱深入解析

一、引子 先來看一段代碼,你能說出這段代碼的問題在哪嗎? const [count, setCount] = useState(0); useEffect(() => {const timer = setTimeout(() => {setCount(count + 1);}, 1000);return () => clearTimeout(timer); }, []);正確答案: 這段代碼存在閉包陷阱…

零基礎在實踐中學習網絡安全-皮卡丘靶場(第十五期-URL重定向模塊)

本期內容和之前的CSRF&#xff0c;File inclusion有聯系&#xff0c;復習后可以更好了解 介紹 不安全的url跳轉 不安全的url跳轉問題可能發生在一切執行了url地址跳轉的地方。如果后端采用了前端傳進來的(可能是用戶傳參,或者之前預埋在前端頁面的url地址)參數作為了跳轉的目…

Python訓練營---DAY48

DAY 48 隨機函數與廣播機制 知識點回顧&#xff1a; 隨機張量的生成&#xff1a;torch.randn函數卷積和池化的計算公式&#xff08;可以不掌握&#xff0c;會自動計算的&#xff09;pytorch的廣播機制&#xff1a;加法和乘法的廣播機制 ps&#xff1a;numpy運算也有類似的廣播機…

什么是ANSYS ACT? ACT又可以分為哪幾類?

ANSYS作為目前仿真界主流軟件之一&#xff0c;除了給用戶提供其強大的功能之外&#xff0c;還給用戶提供了高度自定義定制的權限。所謂定制&#xff0c;也即用戶可以根據自己仿真需求修改現有功能并展示全新功能的產品內操作。定制的目標是改變現有的用戶體驗&#xff0c;以滿足…

電路圖識圖基礎知識-電動機正反轉控制電路詳解(二十)

1. 轉換開關手動正反轉控制電路 轉換開關&#xff08;QS&#xff09;又稱倒順開關&#xff0c;是一種手動控制裝置&#xff0c;可切換電動機的旋轉方向。它具有三個工作位置&#xff1a;正向、停止和反向。 工作原理&#xff1a; 閉合總電源開關 QS若需正向運轉&#xff0c;將…

Spring Boot微服務架構(十):Docker與K8S部署的區別

Spring Boot微服務在Docker與Kubernetes&#xff08;K8S&#xff09;中的部署存在顯著差異&#xff0c;主要體現在技術定位、管理能力、擴展性及適用場景等方面。以下是兩者的核心區別及實踐對比&#xff1a; 一、技術定位與核心功能 Docker 功能&#xff1a;專注于單節點容器化…

性能剖析:在 ABP 框架中集成 MiniProfiler 實現性能可視化診斷

&#x1f680; 性能剖析&#xff1a;在 ABP 框架中集成 MiniProfiler 實現性能可視化診斷 &#x1f4da; 目錄 &#x1f680; 性能剖析&#xff1a;在 ABP 框架中集成 MiniProfiler 實現性能可視化診斷一、為什么選擇 MiniProfiler&#xff1f; &#x1f9d0;二、集成 MiniProf…

ESP32 在Arduino開發環境中,如果程序運行報錯如何定位程序報錯是哪行代碼

在開發中&#xff0c;我們常常會遇到編譯正常&#xff0c;但是運行過程中程序報錯&#xff0c;然后重啟&#xff0c;在這種情況下&#xff0c;又沒法知道是哪段程序引起的&#xff0c;現在我們就來解決這個問題。 其實ESP32的SDK中已經附帶這些debug的工具了。 首先如果我們程…