python壓力測試腳本
以Python2.7操作為例:
1、首先需要打開電腦桌面,按開始的快捷鍵,點擊Python2.7如圖所示的選項進入。
B. 網站伺服器如何做訪問壓力測試
網站伺服器的壓力測試我覺得主要有一些幾點。
1.協議這邊基本上以http或者https為主了,如果使用其他協議需要分析其打解包的方法。
2.要產生一定的壓力,壓力源這邊一顫纖察定要有保證。一般都是用機器人來模擬壓力,關於機器人的邏輯可以茄茄根據具體業務來開發。
3.需要觀察在一定壓力下,伺服器的各項性能指標(cpu,內存,IO,網路流量)進行觀察,比如內存是否有泄漏,cpu利用率過高的情況。
4.壓力測試應該是一個持續性的過程,在這個過程中需要統計伺服器的性能數據,包括tps,以及機器的負載情況等。據此可以分析伺服器的瓶頸在何處,後續可以針對優化。
5.目前大部分的伺服器都部署在Linux系統上,測試同學還需要掌握相關的Linux命令以便可以更好的測試。
如果你覺得前面的太麻煩,可以來WeTest伺服器壓力測試高並發,實時性豎耐能報表,專家級性能優化建議,目前我們正在做網站壓測這一塊,你要做的僅僅是填下被測的URL即可,壓力源、數據統計這些瑣碎的工作交給我們就行了。
C. Python - pytest
目錄
pytest是Python的單元測試框架,同自帶的unittest框架類似,但pytest框架使用起來更簡潔,效率更高。
pytest特點
安裝
測試
在測試之前要做的准備
我的演示腳本處於這樣一個的目錄中:
踩坑:你創建的pytest腳本名稱中不允許含有 . ,比如 1.簡單上手.py ,這樣會報錯。當然,可以這么寫 1-簡單上手.py
demo1.py :
上例中,當我們在執行(就像Python解釋器執行普通的Python腳本一樣)測試用例的時候, pytest.main(["-s", "demo1.py"]) 中的傳參需要是一個元組或者列表(我的pytest是5.2.2版本),之前的版本可能需要這么調用 pytest.main("-s demo1.py") ,傳的參數是str的形式,至於你使用哪種,取決於報不報錯:
遇到上述報錯,就是參數需要一個列表或者元組的形式,而我們使用的是str形式。
上述代碼正確的執行結果是這樣的:
大致的信息就是告訴我們:
pytest.main(["-s", "demo1.py"])參數說明
除了上述的函數這種寫法,也可以有用例類的寫法:
用法跟unittest差不多,類名要以 Test 開頭,並且其中的用例方法也要以 test 開頭,然後執行也一樣。
執行結果:
那麼,你這個時候可能會問,我記得unittest中有setup和teardown的方法,難道pytest中沒有嘛?你怎麼提都不提?穩住,答案是有的。
接下來,我們來研究一下pytest中的setup和teardown的用法。
我們知道,在unittest中,setup和teardown可以在每個用例前後執行,也可以在所有的用例集執行前後執行。那麼在pytest中,有以下幾種情況:
來一一看看各自的用法。
模塊級別setup_mole/teardown_mole
執行結果:
類級別的setup_class/teardown_class
執行結果:
類中方法級別的setup_method/teardown_method
執行結果:
函數級別的setup_function/teardown_function
執行結果:
小結
該腳本有多種運行方式,如果處於PyCharm環境,可以使用右鍵或者點擊運行按鈕運行,也就是在pytest中的主函數中運行:
也可以在命令行中運行:
這種方式,跟使用Python解釋器執行Python腳本沒有什麼兩樣。也可以如下面這么執行:
當然,還有一種是使用配置文件運行,來看看怎麼用。
在項目的根目錄下,我們可以建立一個 pytest.ini 文件,在這個文件中,我們可以實現相關的配置:
那這個配置文件中的各項都是什麼意思呢?
首先, pytest.ini 文件必須位於項目的根目錄,而且也必須叫做 pytest.ini 。
其他的參數:
OK,來個示例。
首先,(詳細目錄參考開頭的目錄結構)在 scripts/test_case_01.py 中:
在 scripts/test_case_dir1/test_case02.py 中:
那麼,在不同的目錄或者文件中,共有5個用例將被執行,而結果則是兩個失敗三個成功。來執行驗證一下,因為有了配置文件,我們在終端中(前提是在項目的根目錄),直接輸入 pytest 即可。
由執行結果可以發現, 2 failed, 3 passed ,跟我們的預期一致。
後續執行相關配置都來自配置文件,如果更改,會有相應說明,終端都是直接使用 pytest 執行。
我們知道在unittest中,跳過用例可以用 skip ,那麼這同樣是適用於pytest。
來看怎麼使用:
跳過用例,我們使用 @pytest.mark.skipif(condition, reason) :
然後將它裝飾在需要被跳過用例的的函數上面。
效果如下:
上例執行結果相對詳細,因為我們在配置文件中為 addopts 增加了 -v ,之前的示例結果中,沒有加!
另外,此時,在輸出的控制台中, 還無法列印出 reason 信息,如果需要列印,則可以在配置文件中的 addopts 參數的 -s 變為 -rs :
如果我們事先知道測試函數會執行失敗,但又不想直接跳過,而是希望顯示的提示。
Pytest 使用 pytest.mark.xfail 實現預見錯誤功能::
需要掌握的必傳參數的是:
那麼關於預期失敗的幾種情況需要了解一下:
結果如下:
pytest 使用 x 表示預見的失敗(XFAIL)。
如果預見的是失敗,但實際運行測試卻成功通過,pytest 使用 X 進行標記(XPASS)。
而在預期失敗的兩種情況中,我們不希望出現預期失敗,結果卻執行成功了的情況出現,因為跟我們想的不一樣嘛,我預期這條用例失敗,那這條用例就應該執行失敗才對,你雖然執行成功了,但跟我想的不一樣,你照樣是失敗的!
所以,我們需要將預期失敗,結果卻執行成功了的用例標記為執行失敗,可以在 pytest.ini 文件中,加入:
這樣就就把上述的情況標記為執行失敗了。
pytest身為強大的單元測試框架,那麼同樣支持DDT數據驅動測試的概念。也就是當對一個測試函數進行測試時,通常會給函數傳遞多組參數。比如測試賬號登陸,我們需要模擬各種千奇百怪的賬號密碼。
當然,我們可以把這些參數寫在測試函數內部進行遍歷。不過雖然參數眾多,但仍然是一個測試,當某組參數導致斷言失敗,測試也就終止了。
通過異常捕獲,我們可以保證程所有參數完整執行,但要分析測試結果就需要做不少額外的工作。
在 pytest 中,我們有更好的解決方法,就是參數化測試,即每組參數都獨立執行一次測試。使用的工具就是 pytest.mark.parametrize(argnames, argvalues) 。
使用就是以裝飾器的形式使用。
只有一個參數的測試用例
來看(重要部分)結果::
可以看到,列表內的每個手機號,都是一條測試用例。
多個參數的測試用例
(重要部分)結果:
可以看到,每一個手機號與每一個驗證碼都組合一起執行了,這樣就執行了4次。那麼如果有很多個組合的話,用例數將會更多。我們希望手機號與驗證碼一一對應組合,也就是只執行兩次,怎麼搞呢?
在多參數情況下,多個參數名是以 , 分割的字元串。參數值是列表嵌套的形式組成的。
固件(Fixture)是一些函數,pytest 會在執行測試函數之前(或之後)載入運行它們,也稱測試夾具。
我們可以利用固件做任何事情,其中最常見的可能就是資料庫的初始連接和最後關閉操作。
Pytest 使用 pytest.fixture() 定義固件,下面是最簡單的固件,訪問主頁前必須先登錄:
結果:
在之前的示例中,你可能會覺得,這跟之前的setup和teardown的功能也類似呀,但是,fixture相對於setup和teardown來說更靈活。pytest通過 scope 參數來控制固件的使用范圍,也就是作用域。
比如之前的login固件,可以指定它的作用域:
很多時候需要在測試前進行預處理(如新建資料庫連接),並在測試完成進行清理(關閉資料庫連接)。
當有大量重復的這類操作,最佳實踐是使用固件來自動化所有預處理和後處理。
Pytest 使用 yield 關鍵詞將固件分為兩部分, yield 之前的代碼屬於預處理,會在測試前執行; yield 之後的代碼屬於後處理,將在測試完成後執行。
以下測試模擬資料庫查詢,使用固件來模擬資料庫的連接關閉:
結果:
可以看到在兩個測試用例執行前後都有預處理和後處理。
pytest中還有非常多的插件供我們使用,我們來介紹幾個常用的。
先來看一個重要的,那就是生成測試用例報告。
想要生成測試報告,首先要有下載,才能使用。
下載
如果下載失敗,可以使用PyCharm下載,怎麼用PyCharm下載這里無需多言了吧。
使用
在配置文件中,添加參數:
效果很不錯吧!
沒完,看我大招
Allure框架是一個靈活的輕量級多語言測試報告工具,它不僅以web的方式展示了簡潔的測試結果,而且允許參與開發過程的每個人從日常執行的測試中最大限度的提取有用信息。
從開發人員(dev,developer)和質量保證人員(QA,Quality Assurance)的角度來看,Allure報告簡化了常見缺陷的統計:失敗的測試可以分為bug和被中斷的測試,還可以配置日誌、步驟、fixture、附件、計時、執行 歷史 以及與TMS和BUG管理系統集成,所以,通過以上配置,所有負責的開發人員和測試人員可以盡可能的掌握測試信息。
從管理者的角度來看,Allure提供了一個清晰的「大圖」,其中包括已覆蓋的特性、缺陷聚集的位置、執行時間軸的外觀以及許多其他方便的事情。allure的模塊化和可擴展性保證了我們總是能夠對某些東西進行微調。
少扯點,來看看怎麼使用。
Python的pytest中allure下載
但由於這個 allure-pytest 插件生成的測試報告不是 html 類型的,我們還需要使用allure工具再「加工」一下。所以說,我們還需要下載這個allure工具。
allure工具下載
在現在allure工具之前,它依賴Java環境,我們還需要先配置Java環境。
注意,如果你的電腦已經有了Java環境,就無需重新配置了。
配置完了Java環境,我們再來下載allure工具,我這里直接給出了網路雲盤鏈接,你也可以去其他鏈接中自行下載:
下載並解壓好了allure工具包之後,還需要將allure包內的 bin 目錄添加到系統的環境變數中。
完事後打開你的終端測試:
返回了版本號說明安裝成功。
使用
一般使用allure要經歷幾個步驟:
來看配置 pytest.ini :
就是 --alluredir ./report/result 參數。
在終端中輸入 pytest 正常執行測試用例即可:
執行完畢後,在項目的根目下,會自動生成一個 report 目錄,這個目錄下有:
接下來需要使用allure工具來生成HTML報告。
此時我們在終端(如果是windows平台,就是cmd),路徑是項目的根目錄,執行下面的命令。
PS:我在pycharm中的terminal輸入allure提示'allure' 不是內部或外部命令,也不是可運行的程序或批處理文件。但windows的終端沒有問題。
命令的意思是,根據 reportresult 目錄中的數據(這些數據是運行pytest後產生的)。在 report 目錄下新建一個 allure_html 目錄,而這個目錄內有 index.html 才是最終的allure版本的HTML報告;如果你是重復執行的話,使用 --clean 清除之前的報告。
結果很漂亮:
allure open
默認的,allure報告需要HTTP伺服器來打開,一般我們可以通過pycharm來完成,另外一種情況就是通過allure自帶的open命令來完成。
allure的其他用法
當然,故事還是沒有完!在使用allure生成報告的時候,在編寫用例階段,還可以有一些參數可以使用:
allure.title與allure.description
feature和story
由上圖可以看到,不同的用例被分為不同的功能中。
allure.severity
allure.severity 用來標識測試用例或者測試類的級別,分為blocker,critical,normal,minor,trivial5個級別。
severity的默認級別是normal,所以上面的用例5可以不添加裝飾器了。
allure.dynamic
在之前,用例的執行順序是從上到下依次執行:
正如上例的執行順序是 3 1 2 。
現在,來看看我們如何手動控制多個用例的執行順序,這里也依賴一個插件。
下載
使用
手動控制用例執行順序的方法是在給各用例添加一個裝飾器:
那麼, 現在的執行順序是 2 1 3 ,按照order指定的排序執行的。
如果有人較勁傳個0或者負數啥的,那麼它們的排序關系應該是這樣的:
失敗重試意思是指定某個用例執行失敗可以重新運行。
下載
使用
需要在 pytest.ini 文件中, 配置:
給 addopts 欄位新增(其他原有保持不變) --reruns=3 欄位,這樣如果有用例執行失敗,則再次執行,嘗試3次。
來看示例:
結果:
我們也可以從用例報告中看出重試的結果:
上面演示了用例失敗了,然後重新執行多少次都沒有成功,這是一種情況。
接下來,來看另一種情況,那就是用例執行失敗,重新執行次數內通過了,那麼剩餘的重新執行的次數將不再執行。
通過 random 模塊幫助我們演示出在某次執行中出現失敗的情況,而在重新執行的時候,會出現成功的情況,看結果:
可以看到,用例 02 重新執行了一次就成功了,剩餘的兩次執行就終止了。
一條一條用例的執行,肯定會很慢,來看如何並發的執行測試用例,當然這需要相應的插件。
下載
使用
在配置文件中添加:
就是這個 -n=auto :
並發的配置可以寫在配置文件中,然後其他正常的執行用例腳本即可。另外一種就是在終端中指定,先來看示例:
結果:
pytest-sugar 改變了 pytest 的默認外觀,添加了一個進度條,並立即顯示失敗的測試。它不需要配置,只需 下載插件即可,用 pytest 運行測試,來享受更漂亮、更有用的輸出。
下載
其他照舊執行用例即可。
pytest-cov 在 pytest 中增加了覆蓋率支持,來顯示哪些代碼行已經測試過,哪些還沒有。它還將包括項目的測試覆蓋率。
下載
使用
在配置文件中:
也就是配置 --cov=./scripts ,這樣,它就會統計所有 scripts 目錄下所有符合規則的腳本的測試覆蓋率。
執行的話,就照常執行就行。
結果:
更多插件參考:https://zhuanlan.hu.com/p/50317866
有的時候,在 pytest.ini 中配置了 pytest-html 和 allure 插件之後,執行後報錯:
出現了這個報錯,檢查你配置的解釋器中是否存在 pytest-html 和 allure-pytest 這兩個模塊。如果是使用的pycharm ide,那麼你除了檢查settings中的解釋器配置之外,還需要保證運行腳本的編輯器配置是否跟settings中配置一致。
D. 7種檢測Python程序運行時間、CPU和內存佔用的方法
1. 使用裝飾器來衡量函數執行時間
有一個簡單方法,那就是定義一個裝飾器來測量函數的執行時間,並輸出結果:
import time
from functoolsimport wraps
import random
def fn_timer(function):
@wraps(function)
def function_timer(*args, **kwargs):
t0= time.time()
result= function(*args, **kwargs)
t1= time.time()
print("Total time running %s: %s seconds" %
(function.__name__, str(t1- t0))
)
return result
return function_timer
@fn_timer
def random_sort(n):
return sorted([random.random() for i in range(n)])
if __name__== "__main__":
random_sort(2000000)
輸出:Total time running random_sort: 0.6598007678985596 seconds
使用方式的話,就是在要監控的函數定義上面加上 @fn_timer 就行了
或者
# 可監控程序運行時間
import time
import random
def clock(func):
def wrapper(*args, **kwargs):
start_time= time.time()
result= func(*args, **kwargs)
end_time= time.time()
print("共耗時: %s秒" % round(end_time- start_time, 5))
return result
return wrapper
@clock
def random_sort(n):
return sorted([random.random() for i in range(n)])
if __name__== "__main__":
random_sort(2000000)
輸出結果:共耗時: 0.65634秒
2. 使用timeit模塊
另一種方法是使用timeit模塊,用來計算平均時間消耗。
執行下面的腳本可以運行該模塊。
這里的timing_functions是Python腳本文件名稱。
在輸出的末尾,可以看到以下結果:4 loops, best of 5: 2.08 sec per loop
這表示測試了4次,平均每次測試重復5次,最好的測試結果是2.08秒。
如果不指定測試或重復次數,默認值為10次測試,每次重復5次。
3. 使用Unix系統中的time命令
然而,裝飾器和timeit都是基於Python的。在外部環境測試Python時,unix time實用工具就非常有用。
運行time實用工具:
輸出結果為:
Total time running random_sort: 1.3931210041 seconds
real 1.49
user 1.40
sys 0.08
第一行來自預定義的裝飾器,其他三行為:
real表示的是執行腳本的總時間
user表示的是執行腳本消耗的CPU時間。
sys表示的是執行內核函數消耗的時間。
注意:根據維基網路的定義,內核是一個計算機程序,用來管理軟體的輸入輸出,並將其翻譯成CPU和其他計算機中的電子設備能夠執行的數據處理指令。
因此,Real執行時間和User+Sys執行時間的差就是消耗在輸入/輸出和系統執行其他任務時消耗的時間。
4. 使用cProfile模塊
5. 使用line_profiler模塊
6. 使用memory_profiler模塊
7. 使用guppy包
E. 【Python】【壓力測試】Locust壓力測試工具
性能測試參數
熟悉 Apache ab 工具的同學都知道,它是沒有界面的,通過命令行執行。 Locust 同樣也提供的命令行運行,好處就是更節省客戶端資源。
啟動參數:
--no-web 表示不使用Web界面運行測試。
-c 設置虛擬用戶數。
-r 設置每秒啟動虛擬用戶數。
-t 設置設置運行時間。
出現的報錯及解決辦法:
使用Locust進行性能測試,Locust no-web模式執行命令locust -f zkxl_verify_ locust.py --host= https://www..com --no-web -c 10 -r 2 -t 1m
提示locust: error: unrecognized arguments: --no-web -c
參考locust官方文檔 https://docs.locust.io/en/latest/running-locust-without-web-ui.html?highlight=no-web
將命令參數--no-web 更改為 --headless,將命令中指定用戶並發數的參數 -c 改為 -u,即更改命令為:locust -f zkxl_verify_ locust.py --host= https://www..com --headless -u 10 -r 2 -t 1m 即可.
locust的測試數據可以保存到CSV文件中,有兩種方法可以進行此操作:
首先,通過Web UI運行Locust時,可以在「Download Data」選項卡下得到CSV文件。
其次,可以使用標簽運行Locust,該標簽將定期保存兩個CSV文件。如果計劃使用--no-web標簽以自動化方式運行Locust
文件將被命名為example_response_times.csv 和 example_stats.csv (使用--csv=example)並記錄Locust構建的信息。
如果你想要更快(慢)的寫入速度,也可以自動以寫入頻率:
此數據將寫入兩個文件,並將_response_times.csv和_stats.csv添加到你提供的名稱中:
和
打開命令提示符(或Linux終端),輸入 locust --help 。
參考: 官方文檔
一旦單台機器不夠模擬足夠多的用戶時,Locust支持運行在多台機器中進行壓力測試。
為了實現這個,你應該在 master 模式中使用 --master 標記來啟用一個 Locust 實例。這個實例將會運行你啟動測試的 Locust 交互網站並查看實時統計數據。master 節點的機器自身不會模擬任何用戶。相反,你必須使用 --slave 標記啟動一台到多台 Locustslave 機器節點,與標記 --master-host 一起使用(指出master機器的IP/hostname)。
常用的做法是在一台獨立的機器中運行master,在slave機器中每個處理器內核運行一個slave實例。
在 master 模式下啟動 Locust:
在每個 slave 中執行(192.168.0.14 替換為你 msater 的IP):
參數
--master
設置 Locust 為 master 模式。網頁交互會在這台節點機器中運行。
--slave
設置 Locust 為 slave 模式。
--master-host=X.X.X.X
可選項,與 --slave 一起結合使用,用於設置 master 模式下的 master 機器的IP/hostname(默認設置為127.0.0.1)
--master-port=5557
可選項,與 --slave 一起結合使用,用於設置 master 模式下的 master 機器中 Locust 的埠(默認為5557)。注意,locust 將會使用這個指定的埠號,同時指定埠+1的號也會被佔用。因此,5557 會被使用,Locust將會使用 5557 和 5558。
--master-bind-host=X.X.X.X`
可選項,與 --master 一起結合使用。決定在 master 模式下將會綁定什麼網路介面。默認設置為*(所有可用的介面)。
--master-bind-port=5557
可選項,與 --master 一起結合使用。決定哪個網路埠 master 模式將會監聽。默認設置為 5557。注意 Locust 會使用指定的埠號,同時指定埠+1的號也會被佔用。因此,5557 會被使用,Locust 將會使用 5557 和 5558。
--expect-slaves=X
在 no-web 模式下啟動 master 時使用。master 將等待X連接節點在測試開始之前連接。
如下圖,我啟動了一個 master 和兩個 slave,由兩個 slave 來向被測試系統發送請求。
client屬性:
TaskSet類:實現了虛擬用戶所執行任務的調度演算法,包括規劃任務執行順序(schele_task)、挑選下一個任務(execute_next_task)、執行任務(execute_task)、休眠等待(wait)、中斷控制(interrupt)等等。
在此基礎上,我們就可以在TaskSet子類中採用非常簡潔的方式來描述虛擬用戶的業務測試場景,對虛擬用戶的所有行為(任務)進行組織和描述,並可以對不同任務的權重進行配置。
在TaskSet子類中定義任務信息時,可以採取兩種方式, @task 裝飾器和 tasks 屬性。
@task(1)中的數字表示任務的執行頻率,數值越大表示執行的頻率越高
採用tasks屬性定義任務:
tasks = {test_job1:1, test_job2:2}中,test_job1:1,test_job2:2表示事件執行的頻率,即test_job2的執行頻率是test_job1的兩倍
on_start函數是在Taskset子類中使用比較頻繁的函數。在正式執行測試前執行一次,主要用於完成一些初始化的工作。
例如,當測試某個搜索功能,而該搜索功能又要求必須為登錄態的時候,就可以先在on_start中進行登錄操作,HttpLocust使用到了requests.Session,因此後續所有任務執行過程中就都具有登錄態了
在TaskSequence類中,[email protected]_task()可以用來控制任務的執行順序;裡面的數值越小執行越靠前;
在Taskset類中,內置WAIT_TIME功能,它用於確定模擬用戶在執行任務之間將等待多長時間。Locust提供了一些內置的函數,返回一些常用的wait_time方法。
1、 between(min,max)函數 :用得比較多的函數
wait_time = between(3.0, 10.5):任務之間等待的時間是3到10.5秒之間的任意時間
還可以用任意函數來定義等待時間, 比如平均1秒的等待時間
wait_time = lambda self: random.expovariate(1) 1000
2、 constant(number) 函數:
wait_time=constant(3):任務之間等待的時候是3秒鍾,且等待的時候不能超過任務運行的總時間,也就是在執行py文件時設置的時間
3、 constant_pacing(number) *函數:
wait_time=constant_pacing(3):所以任務每隔3秒執行,但是當到達運行的總時間時,任務運行結束;
現實中有很多任務其實也是有嵌套結構的,比如用戶打開一個網頁首頁後,用戶可能會不喜歡這個網頁直接離開,或者喜歡就留下來,留下來的話,可以選擇看書、聽音樂、或者離開;
在有Taskset嵌套的情況下,執行子任務時, 通過 self.interrupt() 來終止子任務的執行, 來回到父任務類中執行, 否則子任務會一直執行;
在上一頁的案例中,在stay這個類中,對interrupt()方法的調用是非常重要的,這可以讓一個用戶跳出stay這個類有機會執行leave這個任務,否則他一旦進入stay任務就會一直在看書或者聽音樂而難以自拔。
在進行介面多用戶並發測試時,數據的重復使用可能會造成腳本的失敗,那麼需要對用戶數據進行參數化來使腳本運行成功。
已登錄功能為例:
創建 login_user() 方法,定義登錄字典 users , 通過randint 隨機獲取字典中的用戶數據。
在 login() 登錄任務中,調用 login_user() 方法實現 隨機用戶的登錄。
在此我們舉出網路搜索的例子,假設每個人搜索的內容是不相同的;那麼我們可以假設把數據放到隊列中,然後從隊列中依次把數據取出來;
可以利用python中Queue隊列來進行處理;
Queue的種類 :
Queue.Queue(maxsize=0):先進先出隊列
Queue.LifoQueue(maxsize=0):後進先出隊列
Queue.PriorityQueue(maxsize=0):構造一個優先隊列
參數maxsize是個整數,指明了隊列中能存放的數據個數的上限。一旦達到上限,插入會導致阻塞,直到隊列中的數據被消費掉。如果maxsize小於或者等於0,隊列大小沒有限制
Queue的基本方法 :
個別情況下測試數據可重復使用,因此我們可以把參數化數據定義為一個列表,在列表中取出數據;
在某些請求中,需要攜帶之前response中提取的參數,常見場景就是session_id。Python中可用通過re正則匹配,對於返回的html頁面,可用採用lxml庫來定位獲取需要的參數;
我們以Phpwind登陸的來進行舉例,在登陸的介面中需要把token參數傳給伺服器,token的值由頁的介面返回;
方法一:使用正則表達式
方法二:採用lxml庫來定位獲取需要的參數
技術點:
1、導模塊:lxml模塊
2、etree.HTML() 從返回html頁面獲取html文件的dom結構
3、xpath() 獲取token的xpath路徑
catch_response = True :布爾類型,如果設置為 True, 允許該請求被標記為失敗。
通過 client.get() 方法發送請求,將整個請求的給 response, 通過 response.status_code 得請求響應的 HTTP 狀態碼。如果不為 200 則通過 response.failure('Failed!') 列印失敗!
參考文章:
https://www.jianshu.com/p/a48f4af81e67
https://www.cnblogs.com/fnng/p/6081798.html
http://class.itest.info/locust 【蟲師】
https://cloud.tencent.com/developer/article/1594240 【官方文檔的中文翻譯】