python+pytest接口自動化之參數關聯

什么是參數關聯?

參數關聯,也叫接口關聯,即接口之間存在參數的聯系或依賴。在完成某一功能業務時,有時需要按順序請求多個接口,此時在某些接口之間可能會存在關聯關系。比如:B接口的某個或某些請求參數是通過調用A接口獲取的,即需要先請求A接口,從A接口的返回數據中拿到需要的字段值,在請求B接口時作為請求參數傳入。

有哪些場景?

最常見的場景之一便是:請求登錄接口后獲取到token值,后續其他接口請求時需要將token作為請求參數傳入。

再比如下單-->支付場景,調用下單接口生成訂單后會返回訂單號,訂單號傳給支付接口進行支付。

一. 參數關聯場景
以最常見的網上購物為例,對應的場景及請求我們可以大致簡化如下(可聯想某寶購物流程):

用戶在購物車選擇商品點擊【去結算】進入訂單確認頁,訂單確認頁點擊【提交訂單】這時會先請求下單接口創建訂單

緊接著會拿創建的訂單去請求獲取支付憑證接口,這個接口會調起支付頁面,也就是輸入密碼的支付界面

輸入支付密碼后會請求支付服務的支付接口進行實際支付,支付的結果會返回給請求方,告知是否支付成功

這個流程中涉及到的接口其實都是有關聯的,我們要對整個流程進行測試那么就需要按順序調用所有這些涉及到的接口。

但這里我們只需要弄明白參數關聯,那么以下單接口和獲取支付憑證接口為例,舉例說明就夠了,即先請求下單接口生成訂單號,再拿這個訂單號去請求獲取支付憑證接口,才能調起支付界面并進行支付。

下單接口如下:

接口地址:<服務器>/trade/order/purchase

請求類型:post

請求參數:

{"goodsId": 10,  //商品id"goodsSkuId": 33,   //sku id"num": 2,   //購買數量"tradePromotion": { //選擇的優惠項"type": 1,  //類型<1:優惠券>"promotionId": 1    //優惠id}
}

返回值 data:

{"code": 0,"msg": "成功","data": {"tradeNo": "0020220116204344962706666"  //交易訂單號},"t": 1639658625474
}

獲取支付憑證接口如下:

  • 接口地址:<服務器>/pay/pre/consum

  • 請求類型:post

  • 請求參數:

{"orderNo":"0020220116204344962706666",    //交易訂單號"product":"alipayWapClient"    //支付渠道<alipayWapClient:支付寶手機網頁支付>
}

返回值 data:

{"code": 0,"msg": "成功","data": {"payNo":"123213213219379213","certificate": "<form name=\"punchout_form\" method=\"post\" action=\"https://openapi.alipay.com/gateway.do?charset=UTF-8&method=alipay.trade.wap.pay&sign=aTKlfEnYgR7x9xs1Eyjipo0S%2BFtQ6AKu9d%2Brb7iieMThz2Dq7zp4h8QH4lelTKovOloT%2FPiNXR5miwKgOWW3K6pl0TFO5XX5NSZNBmU%2BPd5ogeo0YT0vCqWUM60rqbYLNtZmvyx%2BAR4Z2SOnqs0CYqVIbZAhpn1Bd5HsdcCCYVgsgOdbEE60Cfu3LG3Z%2FQ0GQIdW24uTyr%2BojRc25ipOC9NIYwtba8UjRw18Z3e7sj75qoIg%2FipICH7FCJBJEdlgBGlNxIjKzhYj4OBg93D&return_url=https%3A%2F%2Fblog.csdn.net%2Fa032788aotify_url=http%3A%2F%2F82.157.145.132%3A8089%2Ftest%2Fnotify%2Fgateway&version=1.0&app_id=2021001105644746&sign_type=RSA2&timestamp=2021-150&alipay_sdk=alipay-sdk-java-4.9.5.ALL&format=json\">\n<input type=\"hidden\" name=\"biz_content\" value=\"{&quot;time_expire&quot;:&quot;2022-12-31 22:00:00&quot;,&quot;out_trade_no&quot;:&quot;123213213219379213&quot;,&quot;total_amount&quot;:0.01,&quot;subject&quot;:&quot;測試商品&quot;,&quot;product_code&quot;:&quot;QUICK_WAP_WAY&quot;}\">\n<input type=\"submit\" value=\"立即支付\" style=\"display:none\" >\n</form>\n<script>document.forms[0].submit();</script>"},"t": 1639659171031
}

其中orderNo字段使這兩個接口關聯了起來。因為每次生成的訂單號都不一樣,所以在測試這個場景的時候,就需要使這兩個接口的參數進行關聯,才能走通。

二. 腳本編寫
那么在pytest框架的自動化測試中,參數關聯可以怎樣處理呢?這里提供兩種思路,如下:

根據業務場景的調用時序,在用例中按順序調用接口
將依賴的接口編寫成fixture函數,并使用yield返回下個接口需要的參數
1. 在用例中按順序調用
代碼示例如下:

import requests
import json
import pytestdef test_order_pay():'''創建訂單->獲取支付憑證,調起支付界面:return:'''# 先調用下單接口生成訂單url_order = "https://gouwu.com/trade/order/purchase"data_order = {"goodsId": 10,"goodsSkuId": 33,"num": 2,"tradePromotion": {"type": 1,"promotionId": 1},"tradeDirectionArticle": {"articleId": 1}}res_order = requests.post(url=url_order, json=data_order).texttradeNo = json.loads(res_order)["tradeNo"]# 再請求獲取支付憑證接口url_pay = "https://gouwu.com/pay/pre/consum"data_pay = {"orderNo": tradeNo, # tradeNo通過下單接口獲取"product": "alipayWapClient"}res_pay = requests.post(url=url_pay, json=data_pay).textres_pay = json.loads(res_pay)# 斷言assert res_pay["code"]==0assert res_pay["data"]["payNo"]assert res_pay["data"]["certificate"]if __name__ == '__main__':pytest.main()

上面的代碼只是流水式的進行調用,我們還可以先將每個接口請求封裝成單獨的函數,在測試用例中只需按照順序調用這些函數即可,這個我們會在后續的文章中進行說明。

2. 使用Fixture函數

pytest中Fixture函數

定義Fixture函數,代碼示例如下:

@pytest.fixture()
def get_order():'''請求下單接口,創建訂單:return:'''url_order = "https://gouwu.com/trade/order/purchase"data_order = {"goodsId": 10,"goodsSkuId": 33,"num": 2,"tradePromotion": {"type": 1,"promotionId": 1},"tradeDirectionArticle": {"articleId": 1}}res_order = requests.post(url=url_order, json=data_order).texttradeNo = json.loads(res_order)["tradeNo"]yield tradeNo

在測試函數中調用上面定義的fixture函數,代碼示例如下:

def test_pay(get_order):'''下單->支付場景校驗:param get_order: 調用上面的Fixture函數,函數名get_order即返回的tradeNo:return:'''url_pay = "https://gouwu.com/pay/pre/consum"data_pay = {"orderNo": get_order,  # get_order即為上面定義的fixture函數返回值"product": "alipayWapClient"}res_pay = requests.post(url=url_pay, json=data_pay).textres_pay = json.loads(res_pay)# 斷言assert res_pay["code"] == 0assert res_pay["data"]["payNo"]assert res_pay["data"]["certificate"]

三. 總結

參數關聯在接口自動化測試中是必然會遇到的場景,設計關聯參數的用例會直接影響到用例的維護,當然這也是在接口自動化項目的架構設計時就需要考慮的問題。

對于剛入門的同學而言,我們需要明白的是,什么是參數關聯,以及可以怎樣去處理它。

總結:

感謝每一個認真閱讀我文章的人!!!

作為一位過來人也是希望大家少走一些彎路,如果你不想再體驗一次學習時找不到資料,沒人解答問題,堅持幾天便放棄的感受的話,在這里我給大家分享一些自動化測試的學習資源,希望能給你前進的路上帶來幫助。

軟件測試面試文檔

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

?

文檔獲取方式:

加入我的軟件測試交流群:822269834免費獲取~(同行大佬一起學術交流,每晚都有大佬直播分享技術知識點)

這份文檔,對于想從事【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!

以上均可以分享,只需要你搜索vx公眾號:程序員雨果,即可免費領取

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

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

相關文章

如何利用人工智能+物聯網技術實現自動化設備生產

隨著科技的發展與行業競爭的日益激烈&#xff0c;制造業也逐漸走向智能化發展。制造業的改革是利用物聯網技術和自動化設備&#xff0c;實現生產線的智能化和自適應生產&#xff0c;優化生產流程&#xff0c;提高生產效率和質量&#xff0c;為企業創造更大的價值。 方案概述 智…

Gif表情包怎么用圖片制作?一招簡單易上手

很多朋友對于gif動圖的名字不是很熟悉&#xff0c;但是對于“gif表情包”一定很熟悉吧&#xff01;在日常網絡聊天中經常能見到其的身影&#xff0c;能夠調節聊天的氣氛。想要制作gif表情包可以使用gif動圖在線制作&#xff08;https://www.gif.cn/&#xff09;網站-GIF中文網&…

【C語言期末】題目+解析

文章目錄 題目1.下面哪個不是C語言的基本數據類型&#xff1f;&#xff08; B &#xff09;2.C語言的標識符應以字母或&#xff08; A &#xff09;開頭。3.如果需要在C程序里調用標準函數庫中的printf函數&#xff0c;則應該在程序的開頭包含哪個頭文件&#xff1f;&#xff0…

學習Linux(2)-學習Linux命令

Linux目錄結構 Linux目錄結構-菜鳥教程 /bin&#xff1a;bin 是 Binaries (二進制文件) 的縮寫, 這個目錄存放著最經常使用的命令。 /boot&#xff1a;這里存放的是啟動 Linux 時使用的一些核心文件&#xff0c;包括一些連接文件以及鏡像文件。 /dev &#xff1a;dev 是 De…

TensorFlow 常用代碼

TensorFlow 是由 Google 開發的一個用于數值計算的開源軟件庫&#xff0c;主要用于構建和訓練機器學習模型。它的核心是使用數據流圖來描述計算任務。數據流圖是由節點和邊組成的有向圖&#xff0c;每個節點表示一個計算任務&#xff0c;每條邊表示數據傳輸。 TensorFlow 支持…

Dockerfile文件

什么是dockerfile? Dockerfile是一個包含用于組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。 docker build命令用于從Dockerfile構建映像。可以在docker build命令中使用-f標志指向文件系統中任何位置的Docke…

C語言-字符串操作函數-附加使用方式

文章目錄 前言字符串復制-strcpy字符串復制&#xff08;按照位數&#xff09;-strncpy字符串比較-strcmp字符串比較(按照位數)-strncmp不區分大小寫的字符串比較-strcasecmp不區分大小寫的比較(前n位)-strncasecmp字符串按照格式寫入-sprintf字符串按照格式和個數寫入-snprintf…

JUC包(面試常問)

1. Callable接口 類似于Runnable接口&#xff0c;Runnable描述的任務&#xff0c;不帶返回值&#xff1b;Callable描述的任務帶返回值。 public class Test {//創建線程&#xff0c;計算12...1000public static void main(String[] args) throws ExecutionException, Interru…

js/jQuery常見操作 之各種語法例子(包括jQuery中常見的與索引相關的選擇器)

js/jQuery常見操作 之各種語法例子&#xff08;包括jQuery中常見的與索引相關的選擇器&#xff09; 1. 操作table常見的1.1 動態給table添加title&#xff08;指定td&#xff09;1.1.1 給td動態添加title&#xff08;含&#xff1a;獲取tr的第幾個td&#xff09;1.1.2 動態加工…

KWin、libdrm、DRM從上到下全過程 —— drmModeAddFBxxx(23)

接前一篇文章:KWin、libdrm、DRM從上到下全過程 —— drmModeAddFBxxx(22) 上一回講解了i915_gem_object_lookup_rcu函數的第1個參數struct drm_file *file,本回講解其第2個參數u32 handle。 (2)參數u32 handle 說起來,handle要比struct drm_file *file參數好理解多了…

怎么更改android的包名,使其可以變成另外一個app

在 Android 中更改應用的包名并不是一項簡單的任務&#xff0c;因為包名在應用的整個代碼和配置文件中都被廣泛使用。但是&#xff0c;你可以通過以下步驟來更改應用的包名&#xff1a; 注意&#xff1a;在更改包名之前&#xff0c;請確保備份你的項目&#xff0c;以防發生意外…

thinkphp 結合swoole 聊天開發實例

好的&#xff0c;下面我為您介紹使用ThinkPHP和Swoole開發聊天應用的實例。 環境搭建 首先需要安裝PHP和Swoole擴展&#xff0c;可以使用以下命令&#xff1a; yum install php php-devel php-pear pecl install swoole新建項目 使用composer新建一個ThinkPHP項目&#xff…

每日一練【三數之和】

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

【開題報告】基于SSM的校園體育管預約系統的設計與實現

1.選題背景 隨著社會的發展和人們對健康生活的追求&#xff0c;體育鍛煉在大學生群體中越來越受到重視。校園體育場館是大學生進行體育活動和鍛煉的主要場所之一。然而&#xff0c;由于校園體育場館資源有限&#xff0c;管理不善和預約流程繁瑣等問題&#xff0c;導致場館利用…

【數據結構(九)】線索化二叉樹(3)

文章目錄 1. 前言——問題引出2. 線索二叉樹的基本介紹3. 線索二叉樹的應用案例3.1. 思路分析3.2. 代碼實現 4. 遍歷線索化二叉樹4.1. 代碼實現 1. 前言——問題引出 問題&#xff1a; ????將數列 {1, 3, 6, 8, 10, 14 } 構建成一顆二叉樹. &#xff08;n17個空指針域&…

1688API接口系列,商品詳情數據丨搜索商品列表丨商家訂單類丨1688開放平臺接口使用方案

1688商品詳情接口是指1688平臺提供的API接口&#xff0c;用于獲取商品詳情信息。通過該接口&#xff0c;您可以獲取到商品的詳細信息&#xff0c;包括商品標題、價格、庫存、描述、圖片等。 要使用1688商品詳情接口&#xff0c;您需要先申請1688的API權限&#xff0c;并獲取ac…

老有所依:TSINGSEE青犀養老院智能視頻監管方案

養老院智能監控方案是為了提高養老院內老人的安全和護理質量&#xff0c;利用智能技術與監控設備進行全方位的監控和管理&#xff0c;可以加強對老人的監護和護理&#xff0c;提高養老院的服務質量和安全性。 旭帆科技基于視頻技術與AI智能分析技術構建的養老院智能視頻監控方…

[動態規劃]最長公共子序列

題目六 最長公共子序列 題目描述 我們稱一個字符的數組S為一個序列。對于另外一個字符數組Z,如果滿足以下條件&#xff0c;則稱Z是S的一個子序列&#xff1a;&#xff08;1&#xff09;Z中的每個元素都是S中的元素&#xff08;2&#xff09;Z中元素的順序與在S中的順序一致。…

22 FlexSPI—讀寫外部 SPI NorFlash

文章目錄 22.1 SPI 協議簡介22.1.1 SPI物理層22.1.2 協議22.1.3 CPOL/CPHA 及通訊模式22.1.4 擴展 SPI 協議22.1.5 SDR 和 DDR 模式 22.2 RT1052 的 FlexSPI 特性及架構22.2.1 RT1052 的 FlexSPI 外設簡介22.2.2 RT1052 的 FlexSPI 架構剖析22.2.2.1 通訊引腳22.2.2.2 指令查找…

如何將html網頁免費轉為excel?

一、直接復制。 直接復制是最簡單有效、快捷的解決方案&#xff0c;操作方法如下&#xff1a; 1、用鼠標像平常復制文本一樣&#xff0c;將整個網頁表格選中。 2、點擊右鍵&#xff0c;點擊“復制”。 3、打開excel軟件&#xff0c;鼠標點擊任意單元格。 4、點擊右鍵&#…