接口自動化測試(一)

接口測試

1.接口的概念

  • 程序內部的接口:程序內部接口指同一程序或系統內不同模塊、組件或類之間的交互點,用于數據傳遞、功能調用或資源共享
  • 系統對外的接口:是不同系統、模塊或服務之間進行交互的邊界定義,通常通過預定義的協議、數據格式和通信方式實現。它允許外部實體(如用戶、其他系統或第三方應用)與系統進行數據交換或功能調用,而無需了解內部實現細節

2.接口測試

接口測試是軟件測試的一種類型,專注于驗證不同系統、組件或服務之間的交互點(即接口)是否按預期工作。主要檢查數據傳輸、格式、協議以及業務邏輯的正確性,確保系統間通信的可靠性和穩定性。

接口測試重要性

接口就像軟件里的 “快遞通道”—— 前端、后端、不同系統之間傳數據、調功能,都得走這條道。接口測試,就是檢查這條 “通道” 通不通、安全不安全、能不能扛住壓力。

  • 一是防 “鉆空子”,前端校驗(比如密碼長度限制)很容易繞開,接口測試能盯著后端,避免有人直接發惡意請求偷數據、非法登錄;
  • 二是早排雷,后端接口做好就能測,不用等前端,發現問題早,改起來又快又便宜,總比上線后用戶用不了再修強;
  • 三是保穩定,比如電商大促時,接口若沒測過并發,一多人用就崩,用戶付不了款、查不到訂單,損失就大了。

因此,接口測試的重要性就體現出來了

如何執行接口測試

通過接?設計?例

通過性驗證

通過性驗證確保接口在正常輸入條件下正確執行并返回預期結果,是接口測試的基礎。

基本功能測試
依據接口文檔定義的功能,使用符合要求的輸入參數進行測試。例如,獲取用戶信息的接口傳入已知存在的用戶ID“12345”,驗證返回的用戶名、年齡、聯系方式等數據是否準確。
驗證響應內容時需檢查狀態碼(如200)及響應數據的完整性和準確性。


參數組合

測試接口在不同參數組合下的表現,覆蓋參數間的相互影響和邊界情況。

參數排列組合
列出所有輸入參數及其取值范圍,通過笛卡爾積生成組合用例。例如文件上傳接口的“文件類型”(.docx、.pdf、.jpg)、“文件大小”(<1MB、1-10MB、>10MB)、“是否加密”(是/否)組合測試。
驗證每種組合下接口的行為,如文件上傳成功與否、加密設置是否生效。

邊界參數組合
關注參數邊界值及其組合。例如分頁查詢接口測試(頁碼=1,每頁數量=1)或(頁碼=最大值,每頁數量=最大值),避免越界錯誤。
結合業務邏輯測試邊界,如訂單金額滿減優惠的臨界值(99元、100元、101元)與其他參數組合,驗證優惠計算準確性。


接口安全

發現潛在安全漏洞,保護系統和用戶數據。

身份認證與授權
未授權訪問測試:不提供認證信息調用接口,驗證是否返回401錯誤。例如直接請求訂單詳情接口,檢查是否拒絕訪問。
權限繞過測試:用低權限用戶訪問高權限接口(如普通用戶調用刪除接口),驗證是否返回403錯誤。
認證信息過期測試:使用過期令牌調用接口,檢查是否返回“令牌過期”提示并阻止訪問。

數據安全
敏感數據加密測試:通過抓包工具檢查密碼等敏感數據是否明文傳輸,確保接口加密傳輸且服務器可正確解密。
SQL注入測試:在參數中注入惡意SQL,驗證接口是否拒絕執行并返回輸入不合法提示。


異常驗證

測試接口在異常情況下的處理能力,確保穩定性和健壯性。

輸入異常
參數缺失測試:逐一缺失必填參數(如注冊接口缺少郵箱),驗證是否返回明確錯誤(如“郵箱不能為空”)。
參數類型錯誤測試:傳入類型不符的參數(如字符串“abc”代替整型年齡),檢查是否提示“參數類型錯誤”。
非法字符測試:輸入特殊符號或亂碼,驗證接口是否拒絕并給出錯誤提示。

環境異常
網絡異常測試:模擬網絡延遲或中斷,觀察接口是否返回超時或連接失敗提示,并在恢復后正常工作。
服務器資源不足測試:限制內存/CPU使用率至90%以上,調用接口檢查是否返回“服務器繁忙”提示且系統無崩潰。
依賴服務異常測試:停用數據庫或第三方服務,驗證接口是否返回“服務不可用”提示而非錯誤數據或崩潰。

結合業務邏輯來設計?例

根據自己的系統設計測試用例,依據軟件系統所承載的實際業務流程、規則及需求,來構建具有針對性和有效性的測試用例。


接口化自動化測試

接口自動化測試是軟件測試中的一種方法,通過自動化腳本模擬客戶端與服務器之間的接口交互,驗證接口功能、性能和安全性。它能提高測試效率、減少人工錯誤,并支持持續集成。

接??動化流程

1.需求分析

分析請求:深入理解接口的功能、業務規則、輸入輸出要求等,明確測試范圍和重點。比如明確接?的URL、請求?法(如get、post、PUT、DELETE等)、請求頭、請求參 數和請求體等信息。

分析響應:確定接?返回的數據格式、狀態碼以及可能的錯誤信息。

2.挑選自動化接口

根據項目特點和需求,優先選擇穩定性高、變更頻率低且業務關鍵的接口進行自動化。

  • 功能復雜度:優先選擇功能復雜、邏輯分?多的接?進??動化測試。
  • ??險功能:選擇對業務影響?、?險?的接?進??動化測試,確保其穩定性和可靠性。
  • 重復性?:對于需要頻繁執?的測試任務,如回歸測試中的接?測試,?動化測試可以避免重復? 動測試的繁瑣和低效,提?測試效率。

3.設計?動化測試?例

如果在功能測試階段已經設計了測試?例,可以直接拿來使?。?

如果無則根據接?需求和功能,設計正向測試?例(正常場景)和反向測試?例(異常場景),包括邊 界值測試、參數組合測試等。

4.搭建?動化測試環境

選擇合適的編程語言和開發工具,以及我們的設備的配置和網絡環境等

5. 設計?動化執?框架

設計?個框架來執?測試?例,包括報告?成、參數化處理和?例執?邏輯。

6. 編寫代碼

根據設計好的測試?例和框架,編寫?動化測試腳本。

7. 執??例

使?測試框架(如pytest)來執?編寫的測試?例。

8. ?成測試報告?

測試完成后,?成測試報告。可以使?pytest --html=report.html?生成 HTML 格式報告

requests模塊

Python 的?requests?庫是一個簡單易用的 HTTP 庫,用于發送各種 HTTP 請求(如 GET、POST),并處理響應數據。它簡化了網絡通信,是 Web 開發、API 調用和數據爬取的常用工具。

1.安裝

在python的終端中輸入命名行

pip install requests==2.31.0

2.Response 對象提供的屬性/?法介紹

屬性/方法描述
r.status_code響應狀態碼
r.content字節方式的響應體,會自動解碼gzip和deflate壓縮
r.headers以字典對象存儲服務器響應頭,若鍵不存在則返回None
r.json()Requests中內置的JSON解析方法,將響應體解析為JSON格式
r.url獲取實際請求的URL
r.encoding編碼格式,根據響應頭部的字符編碼確定
r.cookies獲取服務器設置的cookies
r.raw返回原始響應體,不進行任何處理
r.text字符串方式的響應體,會自動根據響應頭部的字符編碼進行解碼
r.raise_for_status()如果請求返回的狀態碼不是200,拋出HTTPError異常

常?請求?法

  • requests.get(url, params=None, **kwargs): 發送 GET 請求,用于獲取數據。
  • requests.post(url, data=None, json=None, **kwargs): 發送 POST 請求,用于提交數據。
  • requests.put(url, data=None, **kwargs): 發送 PUT 請求,用于更新資源。
  • requests.delete(url, **kwargs): 發送 DELETE 請求,用于刪除資源。

代碼示例

 r = requests.get("https://www.baidu.com")
#傳遞的時候進行參數的指定req_get = requests.request(url="https://www.baidu.com",method="GET")print(r)#打印狀態碼print(r.status_code)
# 打印響應體字符串格式print(r.text)

添加請求頭信息

請求接口常見參數的名稱、數據類型和描述:

參數名數據類型/結構描述
url字符串請求的目標接口地址
headers字典包含要發送的HTTP頭部信息
cookies字典/列表/RequestsCookieJar包含需要隨請求發送的cookies
files字典包含需要上傳的文件信息
data字典/列表/字節串包含請求體數據,用于表單提交或原始數據發送
json字典自動序列化為JSON格式并作為請求體發送
params字典/列表/字節串作為查詢字符串附加到URL末尾
auth元組 (用戶名, 密碼)用于HTTP基礎認證的憑據
timeout浮點數/元組請求超時時間設置(單位:秒)
proxies字典配置代理服務器信息(如{'http': 'http://10.10.1.10:3128'}
verify布爾值/字符串控制SSL證書驗證(True為默認驗證,False跳過驗證,字符串指定CA路徑)

代碼示例

需要加什么參數就寫什么

# 這里自己找網站嘗試
url = "****"data = {"username" : "zhangsan","password" : 123456
}req_post = requests.request(url=url , method= "POST",data=data)print(req_post.json())

?動化框架pytest

pytest 是 Python 的?個強?測試框架,?持單元測試、功能測試和 API 測試。它以簡潔的語法和豐富的插件系統著稱,適合從簡單到復雜的測試需求。

安裝 pytest

通過 pip 安裝 pytest:

pip install pytest

安裝后的解釋器變化

編寫測試用例

  • ?件名必須以 test_ 開頭或者 _test 結尾
  • 測試類必須以 Test 開頭,并且不能有__init__ ?法(初始化方法類似于java中的構造方法)
  • 測試?法必須以test 開頭
class Test():def test01(self):print('the_Test01_test01')def test02(self):print('the_Test01_test02')

當滿?以上要求后,可通過命令?參數pytest 直接運?符合條件的?例。

pytest命令參數

pytest 常用命令行參數及其功能說明的表格(加粗的為常用):

命令功能描述備注
pytest在當前目錄及其子目錄中搜索并運行測試默認行為
pytest -v增加輸出的詳細程度(顯示每個測試用例的詳細信息)
pytest -s顯示測試中的 print 語句輸出(默認被捕獲)
pytest test_module.py運行指定的測試模塊
pytest test_dir/運行指定目錄下的所有測試
pytest -k <keyword>只運行測試名包含指定關鍵字的測試支持表達式(如 -k "not slow"
pytest -m <marker>只運行標記為指定標記的測試(如 @pytest.mark.slow需預先標記測試
pytest -q減少輸出的詳細程度(靜默模式)
pytest --html=report.html生成 HTML 格式的測試報告需安裝 pytest-html 插件
pytest --cov測量測試覆蓋率(默認統計當前目錄)需安裝 pytest-cov 插件

示例一:運?符合運?規則的?例

pytest

?例2:詳細打印,并輸?print內容

 pytest -s -v 
或者pytest -sv (
可以連寫)

?例3:指定?件/測試?例

 #指定?件:pytest 包名/?件名pytest cases/test_01.py#指定測試?例: pytest 包名/?件名::類名::?法名pytest cases/test_01.py::Test::test_a

pytest配置?件

創建 pytest.ini ?件,該?件為pytest 的配置?件。

配置選項作用描述
addopts指定在命令行中默認包含的選項(如 -v--tb=native)。
testpaths指定搜索測試的目錄列表(如 testsintegration_tests)。
python_files定義測試模塊的文件匹配模式(如 test_*.py*_test.py)。
python_classes定義測試類的名稱前綴或模式(如 Test**Test)。
python_functions定義測試函數或方法的名稱前綴或模式(如 test_**_test)。
norecursedirs指定在搜索測試時應忽略的目錄(如 .*node_modules)。
markers注冊自定義標記(如 slowintegration),用于分類測試用例。

示例配置

pytest.ini 文件中使用上述配置:

[pytest]
addopts = -vs
testpaths =  ./cases
python_files = test_*.py
python_classes = Test*
python_functions = test_*

前后置

在測試框架中,前后置是指在執?測試?例前和測試?例后執??些額外的操作,這些操作可以?于 設置測試環境、準備測試數據等,以確保測試的可靠性

  • setup_method 和 teardown_method :這兩個?法?于類中的每個測試?法的前置和后置操作。
  • setup_class 和 teardown_class :這兩個?法?于整個測試類的前置和后置操作。
  • fixture :這是 pytest 推薦的?式來實現測試?例的前置和后置操作。靈活的控制和更強?的功能。

代碼示例1

class Test():def setup_method(self):print("setup_method: 準備執行測試方法 ")def teardown_method(self):print("teardown_method: 清理測試方法 ")def test01(self):print('the_Test01_test01')def test02(self):print('the_Test01_test02')

代碼示例2

class Test():def setup_class(self):print("setup_method: 準備執行測試方法 ")def teardown_class(self):print("teardown_method: 清理測試方法 ")def test01(self):print('the_Test01_test01')def test02(self):print('the_Test01_test02')

斷?

斷?( assert )是?種調試輔助?具,?于檢查程序的狀態是否符合預期。

assert 條件, 錯誤信息

代碼示例1,基本數據斷言

a = 1
b = 1
assert a == ba = 'hello'
b = 'hellw'
assert a == b

代碼示例2,列表斷言

a = ['a',2,'hello']
b = ['a',3,'hellw']
assert a == b

還有一個函數斷言和接口斷言就不示例了,懶~

參數化

參數化是一種通過將代碼或模型中的固定值替換為變量(參數)來實現靈活性和可復用的技術。

?例1:在?例上使?參數化

import pytest@pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6),("6*9", 42)])def test_eval(test_input, expected):assert eval(test_input) == expected

?例2:在類上使?參數化

@pytest.mark.parametrize('n,expected', [(1, 2), (3, 4)])
# pytestmark = pytest.mark.parametrize("n,expected", [(1, 2), (3, 4)])
# 全局變量賦值
class TestClass:def test_cases(self,n,expected):assert n + 1 == expecteddef test_cases1(self, n, expected):assert n*1 + 1 == expected

fixture

pytest 中的 fixture 是?種強?的機制,?于提供測試函數所需的資源或上下?。它可以?于設置測試環境、準備數據等。

fixture標記的?法調?
@pytest.fixture
def fixture_01():print('這是一個fixture標記的方法')
// 可作為參數使用
def test01(fixture_01):print('這里調用了fixture的方法')
#假設需要登錄狀態訪問其他頁的情況下
@pytest.fixture()
def login():print("我登錄了")def test_list(login):print('列表頁')def test_detail(login):print('詳情頁')
fixture嵌套
# 創建第一個fixture并返回a
@pytest.fixture
def first_entry():return "a"#創建第二個fixtrue并建立列表
@pytest.fixture
def order(first_entry):return [first_entry]# 添加一個b并加斷言觀察
def test_string(order):order.append("b")assert order == ["a", "b"]
yield fixture

yield fixture?是一種特殊的裝置(fixture)實現方式。它通過?yield?語句將裝置分為兩部分:設置階段和清理階段。裝置在?yield?前的代碼屬于設置邏輯,yield?后的代碼屬于清理邏輯。

#yield fixture
@pytest.fixture()
def login():print("我登錄了")yieldprint('我下線了')def test_list(login):print('列表頁')def test_detail(login):print('詳情頁')
帶參數的fixture

scope參數詳解

scope參數用于控制fixture的作用范圍,決定了fixture的生命周期。可選值包括:

  • function(默認):每個測試函數都會調用一次fixture
  • class:同一個測試類中共享這個fixture
  • module:同一個測試模塊中共享這個fixture(一個文件里)
  • session:整個測試會話中共享這個fixture

autouse參數

autouse參數默認為False。當設置為True時,每個測試函數都會自動調用該fixture,無需顯式傳入。

params參數

params參數用于參數化fixture,支持列表傳入。每個參數值都會使fixture執行一次,類似于for循環的效果。

ids參數

ids參數需要與params配合使用,為每個參數化實例指定可讀的標識符(給參數取名字)。

name參數

name參數用于為fixture顯式設置一個名稱。如果使用了name來引用,則在測試函數中需要使用這個名稱來調用fixture(給fixture取名字)。

@pytest.fixture(scope='class')
def login():print("我登錄了")yieldprint('我下線了')
class Testcase:def test_list(self,login):print('列表頁')def test_detail(self,login):print('詳情頁')

通過 params 實現參數化

@pytest.fixture(params=[1, 2, 3])
# request 是 pytest 提供的一個特殊對象,request.param 用于獲取當前 fixture 實例化時使用的參數值。
def num(request):return request.paramdef test_square(num):result = num * numassert result >= 0

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

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

相關文章

單片機外設(七)RTC時間獲取

文章目錄一.RTC介紹二.IMX6ull RTC介紹1.SNVS_HP (high power domain)2.SNVS_LP (low power domain)3.SNVS interrupts and alarms三. SNVS重點寄存器介紹1.SNVS_HP Command(HPCOMR)2.SNVS_HP/SNVS_LP Control register (SNVS_HPCR/SNVS_LPCR)3.SNVS_HP/SNVS_LP 狀態寄存器&…

第1篇:走進日志框架的世界 - 從HelloWorld到企業級應用

前言 在現代企業級應用開發中&#xff0c;日志系統扮演著至關重要的角色。無論是問題排查、性能監控&#xff0c;還是業務分析&#xff0c;都離不開完善的日志記錄。今天&#xff0c;我們將從零開始&#xff0c;手把手教你構建一個現代化的注解驅動日志框架。 為什么需要自定義…

173-基于Flask的微博輿情數據分析系統

基于Flask的微博輿情數據分析系統 - 技術實現與架構設計 本文詳細介紹了一個基于Flask框架開發的微博輿情數據分析系統&#xff0c;包含數據爬取、情感分析、可視化展示等完整功能模塊。 &#x1f4cb; 目錄 項目概述技術棧系統架構目錄結構核心功能模塊代碼實現數據可視化部署…

美股期權歷史市場數據波動特性分析

標題&#xff1a;基于本地CSV數據的美股期權分析與應用實踐 在金融量化研究領域&#xff0c;本地CSV數據的高效應用是開展美股期權研究的重要基礎。本文將圍繞美股期權日級別行情數據、波動率分析及策略構建的核心流程&#xff0c;詳細介紹從數據預處理到實際場景落地的關鍵方…

VUE從入門到精通二:ref、reactive、computed計算屬性、watch監聽、組件之間的通信

目錄 一、ref、reactive創建響應式對象 1、ref() 2、reactive() 3、ref和reactive的區別 二、computed計算屬性 1、什么是計算屬性computed 2、計算屬性computed和函數方法的區別 3、計算屬性computed的優勢 三、watch監聽函數 1、什么是watch&#xff1f; 2、基本語…

構建AI智能體:十二、給詞語繪制地圖:Embedding如何構建機器的認知空間

我們理解“蘋果”這個詞&#xff0c;能聯想到一種水果、一個公司、或者牛頓的故事。但對計算機而言&#xff0c;“蘋果”最初只是一個冰冷的符號或一串二進制代碼。傳統的“One-Hot”編碼方式&#xff08;如“蘋果”是[1,0,0,...]&#xff0c;“香蕉”是是[0,1,0,...]&#xff…

突擊復習清單(高頻核心考點)

&#x1f512; 鎖的作用與使用&#xff08;synchronized vs ReentrantLock&#xff09; 面試官為什么問&#xff1a;考察你對并發編程基礎的掌握程度。 速記答案&#xff1a; 作用&#xff1a;保證線程安全&#xff0c;解決多線程環境下對共享資源訪問的數據不一致問題。 synch…

2025年視頻大模型匯總、各自優勢及視頻大模型競爭焦點

文章目錄一、國際主流視頻大模型1. OpenAI Sora Turbo2. Google Veo 33. Runway Gen-3 Alpha二、國內主流視頻大模型1. 快手可靈AI2. 愛詩科技PixVerse V33. 阿里巴巴通義萬相2.14. 生數科技Vidu Q15. 字節跳動即夢AI三、核心趨勢與競爭焦點一、國際主流視頻大模型 1. OpenAI …

Android - 用Scrcpy 將手機投屏到Windows電腦上

工作生活當中&#xff0c;常常需要操作手機&#xff0c;但是用手操作顯然不如用鍵盤快。 再一個&#xff0c;你看視頻的時候&#xff0c;想做一些筆記&#xff0c;那你也得截個圖啦之類的&#xff0c; 那如果直接在電腦上能看也是非常方便的&#xff0c;這都需要投屏手機到電…

AlmaLinux 上 Python 3.6 切換到 Python 3.11

在 AlmaLinux 上將默認的 Python 3.6 升級或切換到 Python 3.11 是一個常見的需求。請注意&#xff0c;直接替換系統自帶的 Python 3.6 是非常危險的&#xff0c;因為許多系統工具&#xff08;如 yum/dnf 包管理器&#xff09;都依賴于它&#xff0c;盲目刪除或修改可能會導致系…

基于RBF-GA的鋁/鎂異材FSLW工藝參數優化研究

課題&#xff1a;基于RBF-GA的鋁/鎂異材FSLW工藝參數優化研究 1. 引言 (Introduction) 研究背景與意義&#xff1a; 輕量化需求&#xff1a;鋁&#xff08;Al&#xff09;和鎂&#xff08;Mg&#xff09;合金是航空航天、新能源汽車等領域實現輕量化的關鍵材料。實現二者的可靠…

【Prometheus】Prometheus監控Docker實戰

&#x1f47b;創作者&#xff1a;丶重明 &#x1f47b;創作時間&#xff1a;2025年8月23日 &#x1f47b;擅長領域&#xff1a;運維 目錄前言什么是Prometheus和cAdvisorPrometheuscAdvisor部署操作部署cAdvisor部署Prometheus指標說明cpu相關指標內存相關指標磁盤相關指標網絡…

2.7 提示詞調優編碼實戰(二)

目錄 四,提示詞模版優化 - 格式化 4.1 代碼示例 4.2 任務描述 4.3 模型輸出格式化 4.4 用戶輸入 4.5 輸出結果 四,提示詞模版優化 - 格式化 在簡單提示詞的基礎上,我們對提示詞模版中各部分進行格式化。包括任務描述增加了相應的字段。 同時對輸出增加了更多的定義和…

Kafka如何保證「消息不丟失」,「順序傳輸」,「不重復消費」,以及為什么會發生重平衡(reblanace)

前言 上一篇文章總結了kafka為什么快&#xff0c;下面來總結一下&#xff0c;kafka高頻的常見的問題。內容有點多&#xff0c;全部看完需要有一定的耐心。 kafka如何保證消息不丟失 Producer端 要保證消息不丟失&#xff0c;第一點要做的就是要保證消息從producer端發送到了…

原子操作匯編實現:原理、流程與代碼解析

&#x1f52c; 原子操作匯編實現&#xff1a;原理、流程與代碼解析 引用&#xff1a;VC/C Intel x86 內聯匯編實現 “Interlocked” 原子變量各種操作 &#x1f31f; 引言&#xff1a;原子操作的重要性 在多線程編程中&#xff0c;原子操作是確保數據一致性的關鍵機制。本文…

【WRF理論第十九期】內陸湖泊、水體的處理方式

目錄 WRF 模型中湖泊模擬概述 湖泊模型(Lake Model)集成 新增湖泊數據支持(如 WUDAPT + MODIS) LAKE_DEPTH Noah-MP + 湖泊模型聯合使用 namelist.input 配置說明 WRF 代碼更新 參考 論壇-WRF 湖泊模型(WRF-Lake model)與 SST 更新 WRF 模型中湖泊模擬概述 湖泊模型(La…

【滲透測試】SQLmap實戰:一鍵獲取MySQL數據庫權限

注&#xff1a;所有技術僅用于合法安全測試與防御研究&#xff0c;未經授權的攻擊行為屬違法犯罪&#xff0c;將承擔法律責任。一、SQLmap常規用法注意存放路徑&#xff1a;C:\Users\neo\AppData\Local\sqlmap\output1、列出詳細過程和數據庫列表sqlmap -u http://192.168.61.2…

LeetCode 第464場周賽 第三天

1. 3658 奇數和與偶數和的最大公約數&#xff08;歐幾里得&#xff09; 鏈接&#xff1a;題目鏈接 題解&#xff1a; 題解時間復雜度O(logmin(a, b))&#xff1a; 獲得前n個奇、偶數的總和&#xff0c;由于數列為等差數列&#xff0c;等差數列和公式&#xff1a;(a1 an) * n …

IntelliJ IDEA 集成 ApiFox 操作與注解規范指南

一、IDEA裝入Apifox 1.安裝Apifox Helper 說明:在 IntelliJ IDEA 中安裝 ApiFox Helper 插件。 2.打開Apifox 說明:點擊 設置,在菜單中選擇 API訪問令牌。在彈出的窗口中輸入任意名稱,并選擇令牌的有效期(為了方便,我這里選擇了 無期限)。生成令牌后,由于 令牌只能復…