本文目錄一覽:
python中matplotlib怎麼畫圖
首先,你要先安裝matplotlib、numpy庫。可以使用pip進行庫的安裝。
分享一段我寫的代碼,是非常簡單、基礎的,你有興趣可以看看,複製過去練習練習,有什麼不懂可以問我。
import numpy as np
import pylab as plt
plt.figure(1)
plt.figure(2)
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)
x = np.linspace(0, 3, 100)
for i in xrange(5):
plt.figure(1)
plt.plot(x, np.exp(i * x / 3))
plt.sca(ax1)
plt.plot(x, np.sin(i * x ))
plt.sca(ax2)
plt.plot(x, np.cos(i*x))
plt.show()
效果圖:
請採納,謝謝!
【Python】【壓力測試】Locust壓力測試工具
性能測試參數
熟悉 Apache ab 工具的同學都知道,它是沒有界面的,通過命令行執行。 Locust 同樣也提供的命令行運行,好處就是更節省客戶端資源。
啟動參數:
–no-web 表示不使用Web界面運行測試。
-c 設置虛擬用戶數。
-r 設置每秒啟動虛擬用戶數。
-t 設置設置運行時間。
出現的報錯及解決辦法:
使用Locust進行性能測試,Locust no-web模式執行命令locust -f zkxl_verify_ locust.py –host= –no-web -c 10 -r 2 -t 1m
提示locust: error: unrecognized arguments: –no-web -c
參考locust官方文檔
將命令參數–no-web 更改為 –headless,將命令中指定用戶並發數的參數 -c 改為 -u,即更改命令為:locust -f zkxl_verify_ locust.py –host= –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類:實現了虛擬用戶所執行任務的調度演算法,包括規劃任務執行順序(schedule_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!’) 列印失敗!
參考文章:
【蟲師】
【官方文檔的中文翻譯】
python怎麼畫曲線
打開Python,使用import導入numpy和matplotlib.pyplot模塊。輸入函數數據,然後使用plt.show()展示繪製的圖像即可。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286095.html