国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用

這篇具有很好參考價(jià)值的文章主要介紹了接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 接口自動(dòng)化思維梳理

1.1接口自動(dòng)化的優(yōu)點(diǎn)

接口測(cè)試自動(dòng)化,簡(jiǎn)單來(lái)講就是功能測(cè)試用例腳本化然后執(zhí)行腳本,產(chǎn)生一份可視化測(cè)試報(bào)告。不管什么樣的測(cè)試方式,都是為了驗(yàn)證功能與發(fā)現(xiàn) BUG。那為什么要做接口測(cè)試自動(dòng)化呢?一句話概括就是為了節(jié)省人力成本。
具體來(lái)說(shuō),包括以下幾點(diǎn):
● 減輕自己工作量,把測(cè)試從枯燥的重復(fù)勞動(dòng)的人工測(cè)試中解放出來(lái);
● 協(xié)助手工測(cè)試完成很難模擬或無(wú)法模擬的的工作;
● 提高工作效率,比如測(cè)試環(huán)境的自動(dòng)化編譯、打包、部署、持續(xù)集成甚至持續(xù)交付等。
● 協(xié)助定位問(wèn)題,比如接口層發(fā)現(xiàn)問(wèn)題了,可以通過(guò)添加的 traceID 定位到日志錯(cuò)誤或錯(cuò)誤代碼行。
● ?盡早發(fā)現(xiàn) Bug,自動(dòng)通知測(cè)試人員。 一旦發(fā)現(xiàn)問(wèn)題,立即通知測(cè)試人員,快速高效。

1.2 事前準(zhǔn)備的主要兩個(gè)核心

?文檔的準(zhǔn)備

磨刀不誤砍柴工,準(zhǔn)備好分詳細(xì)的接口相關(guān)文檔能夠幫助后續(xù)接口自動(dòng)化測(cè)試工作的高效展開(kāi)。相關(guān)文檔包括但不限于一下內(nèi)容:
①《需求文檔》明確定義了:接口背后的業(yè)務(wù)場(chǎng)景,該接口是干什么用的,用到哪里,每次調(diào)用會(huì)發(fā)生什么等;
②《接口文檔》明確定義了:接口名,各個(gè)入?yún)⒅?,各個(gè)返回值,和其他相關(guān)信息;
③《UI 交互圖》明確定義了:各單頁(yè)面需展示的數(shù)據(jù);頁(yè)面之間的交互等;
④《數(shù)據(jù)表設(shè)計(jì)文檔》,明確定義了:表字段規(guī)則、表 N 多 N 關(guān)系(一對(duì)一、一對(duì)多、多對(duì)多)等;
======================================================================
務(wù)必和相關(guān)需求方確認(rèn)好文檔中的信息是可靠且最新的,只有依賴可靠的文檔才能設(shè)計(jì)出正確詳盡的接口用例,才能得到最正確的結(jié)果。

明確接口測(cè)試自動(dòng)化所需功能

① 校驗(yàn)(斷言)
測(cè)試斷言是自動(dòng)化測(cè)試中的測(cè)試通過(guò)條件,用于判斷測(cè)試用例是否符合預(yù)期。所以支持對(duì)返回值校驗(yàn)是一 個(gè)必須的功能。
②?數(shù)據(jù)隔離
數(shù)據(jù)隔離是指:
具體的請(qǐng)求接口、參數(shù)、校驗(yàn)等數(shù)據(jù)做到與代碼相隔離,便于維護(hù),一旦需要調(diào)整接口用 例、新增接口用例時(shí)可很快速的找到位置。
隔離的另一個(gè)好處就是可復(fù)用,框架可以推廣給其他團(tuán)隊(duì),使 用者可以使用相同的代碼,只需要根據(jù)要求填寫(xiě)各自用例即可測(cè)試起來(lái)。
③?數(shù)據(jù)傳遞
做到數(shù)據(jù)隔離可維護(hù)后,數(shù)據(jù)傳遞是另外一個(gè)更重要的需求。
接口測(cè)試時(shí),首先我們會(huì)實(shí)現(xiàn)單接口解耦, 后續(xù)按照業(yè)務(wù)場(chǎng)景組合多個(gè)接口。而數(shù)據(jù)傳遞是則是組合多個(gè)接口的必要條件,它讓接口用例之間可以做 到向下傳參。
舉個(gè)例子:我們通過(guò)設(shè)備信息查詢接口查詢到當(dāng)前天貓精靈音箱的設(shè)備信息,該接口會(huì)返回 一個(gè) UUID,接下來(lái)我們要通過(guò)用戶信息查詢接口去查詢當(dāng)前設(shè)備綁定的用戶信息,此時(shí)第二個(gè)接口的請(qǐng) 求數(shù)據(jù)是需要從第一個(gè)接口用例中的返回中提取的
④?功能函數(shù)
實(shí)際的業(yè)務(wù)場(chǎng)景測(cè)試會(huì)需要各種輔助功能的支持,比如隨機(jī)生成時(shí)間戳,請(qǐng)求 ID,隨機(jī)的手機(jī)號(hào)碼或位 置信息等等,此時(shí)我們就需要代碼可以支持做到識(shí)別對(duì)應(yīng)關(guān)鍵字時(shí)可以執(zhí)行對(duì)應(yīng)的功能函數(shù)進(jìn)行填充。
⑤?日志
日志包含執(zhí)行的具體執(zhí)行接口、請(qǐng)求方式、請(qǐng)求參數(shù)、返回值、校驗(yàn)接口、請(qǐng)求時(shí)間、耗時(shí)等關(guān)鍵信息, 日志的好處一來(lái)是可以便于在新增用例有問(wèn)題時(shí)快速定位出哪里填寫(xiě)有問(wèn)題,二來(lái)是發(fā)現(xiàn) bug 時(shí)方便向 開(kāi)發(fā)反饋提供數(shù)據(jù),開(kāi)發(fā)可以從觸發(fā)時(shí)間以及參數(shù)等信息快速定位到問(wèn)題所在。
⑥?可配置
目前測(cè)試環(huán)境包括但不限于日常、預(yù)發(fā)一、預(yù)發(fā)二、線上等等,因此用例不單單只能在一個(gè)環(huán)境上執(zhí)行, 需要同一份接口用例可以在日常、預(yù)發(fā)、線上等多個(gè)環(huán)境都可以執(zhí)行。
所以框架需要做到可配置,便于切 換,調(diào)用不同的配置文件可以在不同的環(huán)境執(zhí)行。
⑦?可視化報(bào)告
用例執(zhí)行后,就是到了向團(tuán)隊(duì)展示結(jié)果的時(shí)候了,一個(gè)可視化的報(bào)告可以便于團(tuán)隊(duì)成員了解到每次自動(dòng)化 接口用例執(zhí)行的成功數(shù)、失敗數(shù)等數(shù)據(jù)。
⑧?可持續(xù)集成
對(duì)于已經(jīng)有測(cè)試用例并測(cè)試完成的接口,我們希望能夠形成回歸用例,在下一個(gè)版本迭代或上線之前,通 過(guò)已有用例進(jìn)行一個(gè)回歸測(cè)試,確保新上線的功能不影響已有功能。
因此,這就需要接口自動(dòng)化測(cè)試是可 持續(xù)集成的而不是一次性的。

2. Requests庫(kù)的基本介紹及安裝

2.1?Requests庫(kù)簡(jiǎn)介

Requests 是用Python語(yǔ)言編寫(xiě),基于 urllib,采用 Apache2 Licensed 開(kāi)源協(xié)議 的 HTTP 庫(kù)。它比 urllib 更加方便,可以節(jié)約我們大量的工作,完全滿足 HTTP 測(cè)試需求。

官網(wǎng)介紹:https://cn.python-requests.org/zh_CN/latest/

Requests 也可用于爬蟲(chóng)

2.2 Requests庫(kù)安裝

安裝命令:
pip install requests
驗(yàn)證命令:
pip show requests

3.?Requests庫(kù)的實(shí)戰(zhàn)應(yīng)用

3.1 Requests庫(kù)請(qǐng)求源碼理解

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

Requests庫(kù)常用方法

Requests庫(kù)常用的方法及對(duì)應(yīng)的參考如下 :
● requests.requests()
● requests.get(‘https://github.com/timeline.json’) :GET請(qǐng)求
● requests.post(“http://httpbin.org/post”) :POST請(qǐng)求
● requests.put(“http://httpbin.org/put”) :PUT請(qǐng)求(提交修改全部的數(shù) 據(jù))
● requests.delete(“http://httpbin.org/delete”) :DELETE請(qǐng)求
● requests.head(“http://httpbin.org/get”) :HEAD請(qǐng)求
● requests.patch(“http://httpbin.org/get”) :PATCH請(qǐng)求(提交修改部分 數(shù)據(jù))
● requests.options(‘https://github.com/timeline.json’) :OPTIONS請(qǐng) 求(跨域預(yù)檢請(qǐng)求)

requests方法的請(qǐng)求參數(shù)詳解

requests.requests(method, url, **kwargs)
● method:請(qǐng)求方式:GET, PUT,POST,HEAD, PATCH, delete, OPTIONS7種方式
● url:網(wǎng)絡(luò)鏈接
● kwargs: (13個(gè)可選參數(shù))

kwargs可選參數(shù)如下:

參數(shù)值
參數(shù)概述
params
字典或者字節(jié)序列,作為參數(shù)增加到url中
json
JSON格式的數(shù)據(jù),作為requests的內(nèi)容
headers
字典,HTTP定制頭
data
是第二個(gè)控制參數(shù),向服務(wù)器提交數(shù)據(jù),[POST請(qǐng)求用的居多]
cookies
字典或CookieJar, Requests中的cookie
auth
元組,支持HTTP認(rèn)證功能
files
字典類(lèi)型,傳輸文件
timeout
設(shè)置的超時(shí)時(shí)間,秒為單位
proxies
字典類(lèi)型,設(shè)定訪問(wèn)代理服務(wù)器,可以增加登錄認(rèn)證
allow_redirects
True/False,默認(rèn)為T(mén)rue, 重定向開(kāi)關(guān)
stream
True/False,默認(rèn)為T(mén)rue,獲取內(nèi)容立即下載開(kāi)關(guān)
verity
True/False,默認(rèn)為T(mén)rue, 認(rèn)證SSL證書(shū)
cert
本地SSL證書(shū)路徑

3.2 接口測(cè)試實(shí)戰(zhàn)

1. 導(dǎo)入對(duì)應(yīng)的包: import requests
2. 弄清楚對(duì)應(yīng)的接口四要素:接口URL、請(qǐng)求方法、請(qǐng)求參數(shù)、響應(yīng)數(shù)據(jù),
3. 把這些內(nèi)容用代碼依次實(shí)現(xiàn)。

GET 請(qǐng)求示例

# get()方法的參數(shù)
requests.get(url, params=None, **kwargs)
- url: 頁(yè)面的url鏈接
- params: url中的額外參數(shù),字典或字節(jié)流,非必選

代碼示例1:一個(gè)簡(jiǎn)單的get請(qǐng)求

import requests

url = "http://xxxx.com/"
res = requests.get(url)

#獲取對(duì)應(yīng)的響應(yīng)數(shù)據(jù):可以對(duì)數(shù)據(jù)格式進(jìn)行指定
print(res.text)  #text得到的是一個(gè)html信息

執(zhí)行后終端輸出一個(gè)巨長(zhǎng)的html

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

代碼示例二:使用params把分開(kāi)的url參數(shù)、路徑拼接到url,實(shí)現(xiàn)正常請(qǐng)求

#案例二: 把url參數(shù)的環(huán)境變量和對(duì)應(yīng)的參數(shù)/路徑分開(kāi)
url = "http://xxx.com/"
url_path = "s=api/user/login"
res = requests.get(url, params=url_path)   # 執(zhí)行的時(shí)候會(huì)自動(dòng)把參數(shù)拼接到url中
print(res.url)  # 輸出的查看url是否是一個(gè)正確且完整的url

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

3.3 常用響應(yīng)( Response)數(shù)據(jù)

在接口的響應(yīng)數(shù)據(jù)當(dāng)中,常用用來(lái)判斷請(qǐng)求參數(shù)的如下:
響應(yīng)參數(shù)方法
響應(yīng)參數(shù)概述
r.status_code
響應(yīng)狀態(tài)碼
r.content
字節(jié)方式的響應(yīng)體,會(huì)自動(dòng)為你解碼 gzip 和 deflate 壓
r.headers
以字典對(duì)象存儲(chǔ)服務(wù)器響應(yīng)頭,但是這個(gè)字典比較特殊,
字典鍵不區(qū)分大小寫(xiě),若鍵不存在則返回None
r.json()
Requests中內(nèi)置的JSON解碼器,必須帶上()
r.url
獲取url
r.encoding
編碼格式
r.cookies
獲取cookie
r.raw
返回原始響應(yīng)體
r.text
字符串方式的響應(yīng)體,會(huì)自動(dòng)根據(jù)響應(yīng)頭部的字符編碼進(jìn)
行解碼
r.raise_for_status()
失敗請(qǐng)求(非200響應(yīng))拋出異常

狀態(tài)碼

狀態(tài)代碼有三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類(lèi)別,共分五種類(lèi)別
1xx:指示信息--表示請(qǐng)求已接收,繼續(xù)處理
2xx:成功--表示請(qǐng)求已被成功接收、理解、接受
3xx:重定向--要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作
4xx:客戶端錯(cuò)誤--請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn)
5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求
常見(jiàn)狀態(tài)碼:
200 OK//客戶端請(qǐng)求成功
400 Bad Request//客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被服務(wù)器所理解
401 Unauthorized//請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用
403 Forbidden//服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)
404 Not Found//請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的URL
500 Internal Server Error//服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 Server Unavailable//服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常

代碼示例

上面提到的所有的Response響應(yīng)參數(shù)方法

語(yǔ)法結(jié)構(gòu):定義的返回值的接收對(duì)象.方法名

部分示例如下:

import requests

url = "http://xxxx.com/"
url_path = "s=api/user/login"
res = requests.get(url, params=url_path)   # 執(zhí)行的時(shí)候會(huì)自動(dòng)把參數(shù)拼接到url中
# print(res.text)
print("url:",res.url)
print("json串:",res.json())
print("狀態(tài)碼:",res.status_code)

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

反過(guò)來(lái)說(shuō),如果發(fā)送請(qǐng)求之后,得到的響應(yīng)數(shù)據(jù)不是我想要的呢?

解決思路:
首先把請(qǐng)求數(shù)據(jù)打印出來(lái)
打印請(qǐng)求的語(yǔ)法結(jié)構(gòu):接收返回值對(duì)象.request.方法名

代碼示例如下:

import requests


url = "http://xxxx.com/"
res = requests.get(url)

print("查看請(qǐng)求方法:",res.request.method)
print("查看請(qǐng)求url:",res.request.url)
print("查看請(qǐng)求body:",res.request.body)
print("查看請(qǐng)求頭:",res.request.headers)

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

3.4 POST接口測(cè)試實(shí)戰(zhàn)

之前我們一直也在強(qiáng)調(diào),POST的請(qǐng)求參數(shù)的類(lèi)型很多。

而控制它的就是由 請(qǐng)求頭當(dāng)中的 Content-Type 。

所以我們?cè)陂_(kāi)發(fā)的過(guò)程中需要注意客戶端發(fā)送請(qǐng)求 (Request)時(shí)的Content-Type設(shè)置,如果設(shè)置的不準(zhǔn)確,很有可能導(dǎo)致請(qǐng)求失 敗,甚至也會(huì)返回415錯(cuò)誤。

注:415 錯(cuò)誤是 Unsupported media type,即不支持的媒體類(lèi)型。

---------------->>>

一般Content-Type的使用遵守原則:

● 如果普通表單提交:Content-Type:application/x-www-form-urlencoded

● json格式: Content-Type:application/json

● 如果是文件上傳:Content-Type:multipart/form-data

案例1:普通表單提交

post請(qǐng)求默認(rèn)是以form表單提交的

encoding = "utf8"
"""
post請(qǐng)求:登陸接口、
請(qǐng)求參數(shù)數(shù)據(jù)類(lèi)型x-www-form-urlencoded格式(form表單提交)
接口請(qǐng)求四要素:url、請(qǐng)求方法、請(qǐng)求參數(shù)、響應(yīng)數(shù)據(jù)
"""
import requests

# ur完整的請(qǐng)求l
url = "http://域名/路徑/xxx"
# 公共參數(shù)
pulic_data = {"application":"app","application_client_type":"weixin"}
# 請(qǐng)求參數(shù):body
data = {"accounts":"hailey","pwd":"hailey123","type":"username"}

# ------------------發(fā)送請(qǐng)求------------------
res = requests.post(url,params=pulic_data,data=data)

# ------------------獲取響應(yīng)數(shù)據(jù)------------------
print(res.json())
print("響應(yīng)頭:",res.headers)

# ------------------獲取請(qǐng)求數(shù)據(jù)------------------
print("請(qǐng)求頭:",res.request.headers)

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

案例2:json格式

想要指定請(qǐng)求參數(shù)的數(shù)據(jù)類(lèi)型為json:

方法1:只需要加一個(gè)json參數(shù),把data賦給json即可

--------------->>

案例1、案例2,我這邊使用的是同一個(gè)測(cè)試網(wǎng)址,是因?yàn)樵摼W(wǎng)址做了特殊處理,只要提交的請(qǐng)求參數(shù)正確,不論哪種請(qǐng)求的數(shù)據(jù)類(lèi)型都可以兼容。

實(shí)際工作中,是否能夠做到這樣兼容,需要看公司的代碼邏輯有沒(méi)有這樣處理

# 指定請(qǐng)求數(shù)據(jù)為json格式提交:方法1

import requests
url = "http://域名/路徑/xxx"
pulic_data = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "hailey", "pwd": "hailey123", "type": "username"}

# 指定請(qǐng)求參數(shù)的數(shù)據(jù)類(lèi)型為json,只需要加一個(gè)json參數(shù),把data賦給json即可
res = requests.post(url,params=pulic_data,json=data) 
print("請(qǐng)求數(shù)據(jù):",res.request.headers)
print("響應(yīng)數(shù)據(jù):",res.headers)

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

想要指定請(qǐng)求參數(shù)的數(shù)據(jù)類(lèi)型為json:并且能不能請(qǐng)求參數(shù)的還是以data提交,只設(shè)置一下請(qǐng)求頭為json呢?

方法2:

① 添加請(qǐng)求頭設(shè)置

② data是字典類(lèi)型,需要轉(zhuǎn)換為json類(lèi)型,不然打印響應(yīng)信息會(huì)報(bào)錯(cuò)

------------>>

方式2處理起來(lái)稍微麻煩點(diǎn),但是如果是封裝的代碼,就可以靈活處理,只設(shè)置請(qǐng)求頭,可以在不同的地方使用不同的請(qǐng)求數(shù)據(jù)類(lèi)型

具體代碼如下:

import json
import requests

url = "http://xxx.com/index.php?s=/api/user/login"
pulic_data = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "hailey", "pwd": "hailey123", "type": "username"}

json_data = json.dumps(data)  # 將data字典轉(zhuǎn)為json
header = {'Content-Type':'application/json;charset=utf-8'}  # 添加請(qǐng)求頭設(shè)置
res = requests.post(url,params=pulic_data,headers=header,data=json_data)

print("請(qǐng)求數(shù)據(jù):", res.request.headers)
print("響應(yīng)數(shù)據(jù):", res.request.headers)

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

案例3:文件上傳

基于flask框架實(shí)現(xiàn)的文件上傳進(jìn)行上傳文件。
Flask是一個(gè)基于Python開(kāi)發(fā)并且依賴jinja2模板和Werkzeug WSGI服務(wù)的一個(gè)微型框架。
 # Flask框架安裝
 
pip install flask   # 安裝命令
pip show flask      # 安裝驗(yàn)證

flask的簡(jiǎn)單應(yīng)用

定義一個(gè)Flask 應(yīng)用程序?qū)ο?app = Flask ( __name__ )
靜態(tài)路由: @app . route ( '/upload' )
指定允許的請(qǐng)求方法:@app.route('/login', methods=['GET', 'POST'])

上傳文件接口

flask應(yīng)用的完整代碼(基于這段代碼,才能完成下面的上傳操作)

# flie name:uploadFile.py

from flask import Flask, request, jsonify
import os

# 創(chuàng)建了一個(gè)名為 app 的 Flask 應(yīng)用程序?qū)ο蟆?app = Flask(__name__)

# 設(shè)置接口的路徑,以及對(duì)應(yīng)的請(qǐng)求方式
@app.route('/upload', methods=['POST'])
def upload():
    # 當(dāng)沒(méi)有image屬性提示用戶
    if 'image' not in request.files:
        data = {
            'msg': '當(dāng)前未填寫(xiě)image參數(shù)',
            'code': 400,
        }
        return jsonify(data)

    # 獲取到當(dāng)前圖片請(qǐng)求中的文件
    file = request.files['image']

    print(file.filename)

    #  把對(duì)應(yīng)的圖片進(jìn)行保存到當(dāng)前的目錄下的img目錄(保存在當(dāng)前服務(wù)器某個(gè)目錄下)
    save_path = os.path.join('img', file.filename)
    file.save(save_path)

    data = {
        'msg': '上傳成功',
        'code': 200
    }
    return jsonify(data)


if __name__ == '__main__':
    app.run()

先把代碼運(yùn)行,讓服務(wù)啟動(dòng)(啟動(dòng)的是我們本地電腦的服務(wù)),不要手動(dòng)停止

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

上傳文件請(qǐng)求

# file name:p3_file.py
# 基于flask實(shí)現(xiàn)文件上傳

import requests

# url:服務(wù)器 + 代碼中定義的路徑
url = "http://127.0.0.1:5000/upload"

# 請(qǐng)求參數(shù):image
file_data = {"image":open("python進(jìn)階.png","rb")}

res = requests.post(url,files=file_data)
print("響應(yīng)數(shù)據(jù):",res.json())
print("響應(yīng)的數(shù)據(jù)類(lèi)型:",res.headers)

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

案例4:保持Session

如下代碼,有兩個(gè)接口:登錄接口,查詢信息接口,必須登錄之后才可以查詢用戶信息。
當(dāng)接口之間有上下游關(guān)聯(lián)時(shí),就需要 保持Session,即會(huì)話機(jī)制
Session也是一種鑒權(quán),從頭到尾,關(guān)閉就會(huì)失效
具體項(xiàng)目不同,有的只有token鑒權(quán),沒(méi)有Session鑒權(quán)

保持Session接口

由于手上沒(méi)有可用的具有Session鑒權(quán)的項(xiàng)目,這里還是使用falks實(shí)現(xiàn)一個(gè)本地服務(wù)器,設(shè)置Session機(jī)制來(lái)演示效果;

以下是falks代碼:

file name:loginApi.py

from flask import Flask, request, jsonify, session
import os

app = Flask(__name__)
app.secret_key = os.urandom(24)  # 設(shè)置一個(gè)密鑰,用于加密 session 數(shù)據(jù)

# 模擬用戶信息,實(shí)際項(xiàng)目中需要替換為真實(shí)的用戶信息
data = {
    "username": "hailey",
    "password": "admin"}

# 登錄接口
@app.route('/login', methods=['POST'])
def login():
    data = request.get_json()
    username = data.get('username')
    password = data.get('password')

    if username in users and users[username] == password:
        # 登錄成功,設(shè)置session
        session['logged_in'] = True
        return 'Login successful', 200
    else:
        return 'Login failed', 401

# 查詢信息接口,需要登錄才能訪問(wèn)
@app.route('/get_info')
def get_info():
    if 'logged_in' in session and session['logged_in']:
        # 用戶已登錄,返回用戶信息
        return 'User Info: OK'  # 返回用戶信息
    else:
        # 用戶未登錄,返回未授權(quán)的狀態(tài)碼
        return 'Unauthorized', 401

if __name__ == '__main__':
    app.run(debug=True)

還是先把代碼運(yùn)行,讓服務(wù)啟動(dòng)(啟動(dòng)的是我們本地電腦的服務(wù)),不要手動(dòng)停止

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

發(fā)送Session接口

錯(cuò)誤示范

# file name:p4_session.py

import requests

data = {
    "username": "hailey",
    "password": "admin"}

#方法1:顯示對(duì)應(yīng)的未授權(quán)
response = requests.post("http://127.0.0.1:5000/login",json=data)
print("響應(yīng)內(nèi)容:",response.text)
response = requests.get("http://127.0.0.1:5000/get_info")
print(":",response.text)

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

正確姿勢(shì)

在requests庫(kù)中,如果需要進(jìn)行session保持
1、需要實(shí)例化一個(gè)對(duì)象
2. 通過(guò)對(duì)應(yīng)的對(duì)象去進(jìn)行方法調(diào)用
import requests

data = {
    "username": "hailey",
    "password": "admin"}


session = requests.Session()  #示例化對(duì)象
res = session.post("http://127.0.0.1:5000/login",json=data)
print("響應(yīng)內(nèi)容:",res.text)
res = session.get("http://127.0.0.1:5000/get_info")
print("get_info:",res.text)

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python

3.5 josn概述補(bǔ)充

JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,常用于數(shù)據(jù)的序列化和傳輸。它基于JavaScript的語(yǔ)法,但可以被多種編程語(yǔ)言支持和解析。

下面是一個(gè)簡(jiǎn)單的JSON示例:

{
"name": "John",
"age": 30,
"isStudent": false,
"grades": [85, 92, 78],
"address": {
"street": "123 Main St",
"city": "New York"
}
}

JSON的優(yōu)點(diǎn)

1. 簡(jiǎn)潔:相對(duì)于其他數(shù)據(jù)交換格式,JSON的語(yǔ)法簡(jiǎn)潔明了,易于閱讀和編寫(xiě)。
2. 可讀性好:JSON使用人類(lèi)可讀的文本格式,便于開(kāi)發(fā)人員理解和調(diào)試。
3. 平臺(tái)無(wú)關(guān):JSON可以被多種編程語(yǔ)言支持和解析,使得不同平臺(tái)之間的數(shù)據(jù)交換變得更加容易。
4. 支持復(fù)雜數(shù)據(jù)結(jié)構(gòu):JSON支持嵌套的對(duì)象和數(shù)組,可以表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
在編程中,您可以使用相應(yīng)編程語(yǔ)言提供的JSON庫(kù)或工具來(lái)解析和生成JSON數(shù)據(jù),以實(shí)現(xiàn)數(shù)據(jù)的序列化、傳輸和解析。

3.6?斷言(Assert)

斷言(Assertion)是一種在編程中常用的技術(shù),用于檢查代碼中的條件是否滿足,以確保程序的正確性。斷言通常在程序中的關(guān)鍵位置或重要的檢查點(diǎn)處使用,用于驗(yàn)證預(yù)期的條件是否為真。
斷言的基本概念是
在代碼中插入一條斷言語(yǔ)句,該語(yǔ)句會(huì)在運(yùn)行時(shí)進(jìn)行條件判斷:
????????如果條件為假(False),則會(huì)觸發(fā)斷言錯(cuò)誤,并中斷程序的執(zhí)行。
????????如果條件為真(True),則程序會(huì)繼續(xù)執(zhí)行。

使用斷言的目的

斷言通常用于以下目的
1. 調(diào)試和驗(yàn)證 :斷言可以用于驗(yàn)證程序的正確性和邏輯,幫助開(kāi)發(fā)人員在調(diào)試過(guò)程中發(fā)現(xiàn)問(wèn)題和錯(cuò)誤。通過(guò)斷言,可以檢查程序中的假設(shè)是否成立,并在條件不滿足時(shí)提前發(fā)現(xiàn)問(wèn)題。
2. 防御性編程 :斷言可以用于檢查輸入?yún)?shù)有效性或執(zhí)行結(jié)果的正確性,以避免程序在非預(yù)期情況下繼續(xù)行。
3. 測(cè)試和驗(yàn)證 :斷言可以用于編寫(xiě)單元測(cè)試或驗(yàn)證代碼的正確性,幫助捕捉潛在的錯(cuò)誤和異常情況。

代碼示例

# assert 表達(dá)式,表達(dá)式失敗之后顯示的字符串
import requests

url = "http://xxxx.com/index.php?s=/api/user/login"
# 公共參數(shù)
pulic_data = {"application":"app","application_client_type":"weixin"}
# 請(qǐng)求參數(shù):body
data = {"accounts":"hailey","pwd":"hailey123","type":"username"}

# ------------------發(fā)送請(qǐng)求------------------
res = requests.post(url,params=pulic_data,data=data)

# ------------------獲取響應(yīng)數(shù)據(jù)------------------
print(res.json())
response = res.json()

# ------------------獲取數(shù)據(jù),進(jìn)行斷言處理------------------
# 斷言成功
# assert "登錄成功" == response["msg"],"期望結(jié)果是:{0},實(shí)際結(jié)果是:{1}".format("登錄成功",response["msg"])

# 斷言失敗
assert "登錄失敗" == response["msg"],"期望結(jié)果是:{0},實(shí)際結(jié)果是:{1}".format("登錄失敗",response["msg"])

接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用,軟件測(cè)試,python文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-816763.html

到了這里,關(guān)于接口測(cè)試 03 -- 接口自動(dòng)化思維 & Requests庫(kù)應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 接口自動(dòng)化測(cè)試-Requests模塊實(shí)戰(zhàn)詳解,一篇打通...

    什么是requests? requests是一個(gè)很實(shí)用的Python HTTP客戶端庫(kù),編寫(xiě)爬蟲(chóng)和測(cè)試服務(wù)器響應(yīng)數(shù)據(jù)時(shí)經(jīng)常會(huì)用到, Requests是Python語(yǔ)言的第三方的庫(kù),專(zhuān)門(mén)用于發(fā)送HTTP請(qǐng)求 下載 請(qǐng)求方式 1、get請(qǐng)求 2、post請(qǐng)求 3、響應(yīng)的內(nèi)容 4、超時(shí)設(shè)置 5、添加請(qǐng)求頭信息

    2024年02月13日
    瀏覽(19)
  • python3+requests+unittest接口自動(dòng)化測(cè)試

    python3+requests+unittest接口自動(dòng)化測(cè)試

    python3 + pycharm編輯器 (該套代碼只是簡(jiǎn)單入門(mén),有興趣的可以不斷后期完善) (1)run.py主運(yùn)行文件,運(yùn)行之后可以生成相應(yīng)的測(cè)試報(bào)告,并以郵件形式發(fā)送; (2)report文件夾存放測(cè)試結(jié)果報(bào)告; (3)unit_test文件夾是存放測(cè)試用例(demo.py和test_unittest.py用例用法介紹,實(shí)際

    2024年02月09日
    瀏覽(26)
  • python接口自動(dòng)化測(cè)試 requests庫(kù)的基礎(chǔ)使用

    python接口自動(dòng)化測(cè)試 requests庫(kù)的基礎(chǔ)使用

    目錄 簡(jiǎn)單介紹 Get請(qǐng)求 Post請(qǐng)求 其他類(lèi)型請(qǐng)求 自定義headers和cookies SSL 證書(shū)驗(yàn)證 響應(yīng)內(nèi)容 獲取header 獲取cookies requests庫(kù)簡(jiǎn)單易用的HTTP庫(kù) ? 格式: ?requests.get(url)? 注意: 若需要傳請(qǐng)求參數(shù),可直接在?url?最后的???后面,也可以調(diào)用?get()?時(shí)多加一個(gè)參數(shù)?params?,傳入請(qǐng)求

    2023年04月26日
    瀏覽(22)
  • 【實(shí)戰(zhàn)詳解】如何快速搭建接口自動(dòng)化測(cè)試框架?Python + Requests

    【實(shí)戰(zhàn)詳解】如何快速搭建接口自動(dòng)化測(cè)試框架?Python + Requests

    本文主要介紹如何使用Python語(yǔ)言和Requests庫(kù)進(jìn)行接口自動(dòng)化測(cè)試,并提供詳細(xì)的代碼示例和操作步驟。希望能對(duì)讀者有所啟發(fā)和幫助。 隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,越來(lái)越多的應(yīng)用程序采用Web API(也稱為RESTful API)作為數(shù)據(jù)交換的主要方式。針對(duì)API進(jìn)行自動(dòng)化測(cè)試已經(jīng)變得非

    2024年02月09日
    瀏覽(24)
  • 【Python+requests+unittest+excel】實(shí)現(xiàn)接口自動(dòng)化測(cè)試框架

    【Python+requests+unittest+excel】實(shí)現(xiàn)接口自動(dòng)化測(cè)試框架

    一、框架結(jié)構(gòu): ?工程目錄 二、Case文件設(shè)計(jì) 三、基礎(chǔ)包 base 3.1 封裝get/post請(qǐng)求(runmethon.py) 3.2 封裝mock(mock.py) 四、數(shù)據(jù)操作包 operation_data 4.1 獲取excel單元格中的內(nèi)容(get_data.py) ? 4.2?獲取excel中每個(gè)列(data_config.py) 4.3?解決數(shù)據(jù)依賴(dependent.py?) 五、工具類(lèi)包 to

    2024年02月15日
    瀏覽(25)
  • Python+Requests+PyTest+Excel+Allure 接口自動(dòng)化測(cè)試實(shí)戰(zhàn)

    Python+Requests+PyTest+Excel+Allure 接口自動(dòng)化測(cè)試實(shí)戰(zhàn)

    本文主要介紹了Python+Requess+PyTest+Excel+Allure 接口自動(dòng)化測(cè)試實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧 Unittest是Python標(biāo)準(zhǔn)庫(kù)中自帶的單元測(cè)試框架,Unittest有時(shí)候也被稱為PyUnit,就像

    2024年02月07日
    瀏覽(100)
  • 一個(gè)簡(jiǎn)單的接口自動(dòng)化測(cè)試框架:Python+Requests+Pytest+Allure

    一個(gè)簡(jiǎn)單的接口自動(dòng)化測(cè)試框架:Python+Requests+Pytest+Allure

    project:api_test ——api_keyword ————api_key.py:接口驅(qū)動(dòng)類(lèi) ——case ————test_cases.py:測(cè)試套件和測(cè)試用例 ——report_allure( 無(wú)需創(chuàng)建 ):allure報(bào)告 ——result( 無(wú)需創(chuàng)建 ):測(cè)試用例運(yùn)行結(jié)果 ——VAR ————VAR.py:常量類(lèi) conftest.py:項(xiàng)目級(jí)別fixture main.py:主函數(shù)

    2024年02月03日
    瀏覽(95)
  • Python接口自動(dòng)化測(cè)試-篇1(postman+requests+pytest+allure)

    Python接口自動(dòng)化測(cè)試-篇1(postman+requests+pytest+allure)

    Python接口自動(dòng)化測(cè)試是一種使用Python編程語(yǔ)言來(lái)編寫(xiě)腳本以自動(dòng)執(zhí)行針對(duì)應(yīng)用程序接口(APIs)的測(cè)試過(guò)程。這種測(cè)試方法專(zhuān)注于檢查系統(tǒng)的不同組件或服務(wù)之間的交互,確保它們按照預(yù)期規(guī)范進(jìn)行通信,而不涉及用戶界面(UI)的驗(yàn)證。 目錄 一、接口測(cè)試基礎(chǔ) 二、工具實(shí)現(xiàn)

    2024年04月17日
    瀏覽(93)
  • web自動(dòng)化測(cè)試進(jìn)階篇03 ———自動(dòng)化并發(fā)測(cè)試應(yīng)用

    web自動(dòng)化測(cè)試進(jìn)階篇03 ———自動(dòng)化并發(fā)測(cè)試應(yīng)用

    ? ? ?? 作者簡(jiǎn)介:博主是一位測(cè)試管理者,同時(shí)也是一名對(duì)外企業(yè)兼職講師。 ?? 主頁(yè)地址:【Austin_zhai】 ?? 目的與景愿:旨在于能幫助更多的測(cè)試行業(yè)人員提升軟硬技能,分享行業(yè)相關(guān)最新信息。 ?? 聲明:博主日常工作較為繁忙,文章會(huì)不定期更新,各類(lèi)行業(yè)或職場(chǎng)問(wèn)

    2024年02月06日
    瀏覽(19)
  • (Python)Requests+Pytest+Allure接口自動(dòng)化測(cè)試框架從0到1搭建

    (Python)Requests+Pytest+Allure接口自動(dòng)化測(cè)試框架從0到1搭建

    前面,已經(jīng)學(xué)習(xí)了如何用SpringBoot寫(xiě)接口以及與Mysql數(shù)據(jù)庫(kù)進(jìn)行交互,具體可查閱下面的這篇博客,今天學(xué)習(xí)一下基于Python的接口自動(dòng)化測(cè)試框架的搭建,主要包括以下內(nèi)容:利用request庫(kù)發(fā)送請(qǐng)求,請(qǐng)求數(shù)據(jù)參數(shù)化處理,還涉及到數(shù)據(jù)庫(kù)(Mysql+MongDB)方面的交互,包括如何取數(shù)

    2024年02月13日
    瀏覽(722)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包