本文目錄一覽:
thinkphp怎麼用phpunit寫測試用例
測試用例
本例中,根目錄的index.php的配置如下:
?php
define(‘APP_NAME’, ‘example’);
define(‘APP_PATH’, ‘../example/’);
define(‘APP_PHPUNIT’, false);
define(‘APP_DEBUG’, true);
require(‘../ThinkPHP/ThinkPHP.php’);
?
首次訪問之後,生成以下目錄結構:
在example站點中新建文件夾,命名為「Testcase」。
測試Model
創建HelloModel.class.php:
?php
class HelloModel extends Model
{
public function sayHello()
{
print ‘Hello’;
return ‘Hello’;
}
}
在Test文件夾中新建Test.php文件作為PHPUnit,其中注意require ThinkPHP作為初始化框架環境,另外在Think.class.php中,修改
start()函數中,App::run()為 !APP_PHPUNIT App::run();
該區分站點運行與測試用例。
?php
define(‘APP_NAME’, ‘example’);
define(‘APP_PATH’, ‘./../../example/’);
define(‘APP_PHPUNIT’, true);
require(‘./../../ThinkPHP/ThinkPHP.php’);
class TestSayHello extends PHPUnit_Framework_TestCase {
public function setUp() { }
public function tearDown(){ }
}
在TestSayHello中加入測試用例:
public function testHelloModel()
{
$hello = D(‘Hello’);
$this-assertTrue( $hello-sayHello(‘Hello’) == ‘Hello’);
}
測試Action
修改IndexAction.class.php如下:
?php
class IndexAction extends Action
{
public function index()
{
$hello = D(“Hello”);
return $hello-sayHello();
}
}
瀏覽器訪問Index效果:
在TestSayHello中加入測試用例:
public function testHelloAction()
{
$hello = new IndexAction();
$this-assertTrue($hello-index() == ‘Hello’);
}
運行效果
運行Test.php效果如下:
Test通過,至此給ThinkPHP加上了單元測試。
php 高並發解決思路解決方案
php 高並發解決思路解決方案,如何應對網站大流量高並發情況。本文為大家總結了常用的處理方式,但不是細節,後續一系列細節教程給出。希望大家喜歡。
一 高並發的概念
在互聯網時代,並發,高並發通常是指並發訪問。也就是在某個時間點,有多少個訪問同時到來。
二 高並發架構相關概念
1、QPS (每秒查詢率) : 每秒鐘請求或者查詢的數量,在互聯網領域,指每秒響應請求數(指 HTTP 請求)
2、PV(Page View):綜合瀏覽量,即頁面瀏覽量或者點擊量,一個訪客在 24 小時內訪問的頁面數量
–註:同一個人瀏覽你的網站的同一頁面,只記做一次 pv
3、吞吐量(fetches/sec) :單位時間內處理的請求數量 (通常由 QPS 和並發數決定)
4、響應時間:從請求發出到收到響應花費的時間
5、獨立訪客(UV):一定時間範圍內,相同訪客多次訪問網站,只計算為 1 個獨立訪客
6、帶寬:計算帶寬需關注兩個指標,峰值流量和頁面的平均大小
7、日網站帶寬: PV/統計時間(換算到秒) * 平均頁面大小(kb)* 8
三 需要注意點:
1、QPS 不等於並發連接數(QPS 是每秒 HTTP 請求數量,並發連接數是系統同時處理的請求數量)
2、峰值每秒請求數(QPS)= (總 PV 數*80%)/ (六小時秒數*20%)【代表 80%的訪問量都集中在 20%的時間內】
3、壓力測試: 測試能承受的最大並發數 以及測試最大承受的 QPS 值
4、常用的性能測試工具【ab,wrk,httpload,Web Bench,Siege,Apache JMeter】
四 優化
1、當 QPS 小於 50 時
優化方案:為一般小型網站,不用考慮優化
2、當 QPS 達到 100 時,遇到數據查詢瓶頸
優化方案: 資料庫緩存層,資料庫的負載均衡
3、當 QPS 達到 800 時, 遇到帶寬瓶頸
優化方案:CDN 加速,負載均衡
4、當 QPS 達到 1000 時
優化方案: 做 html 靜態緩存
5、當 QPS 達到 2000 時
優化方案: 做業務分離,分散式存儲
五、高並發解決方案案例:
1、流量優化
防盜鏈處理(去除惡意請求)
2、前端優化
(1) 減少 HTTP 請求[將 css,js 等合併]
(2) 添加非同步請求(先不將所有數據都展示給用戶,用戶觸發某個事件,才會非同步請求數據)
(3) 啟用瀏覽器緩存和文件壓縮
(4) CDN 加速
(5) 建立獨立的圖片伺服器(減少 I/O)
3、服務端優化
(1) 頁面靜態化
(2) 並發處理
(3) 隊列處理
4、資料庫優化
(1) 資料庫緩存
(2) 分庫分表,分區
(3) 讀寫分離
(4) 負載均衡
5、web 伺服器優化
(1) nginx 反向代理實現負載均衡
(2) lvs 實現負載均衡
如何使用ab對WebSocket伺服器做並發性能測試
Apache伺服器自帶了ab壓力測試工具,可以用來測試網站性能,使用簡單方便。
工具/原料
Apache
方法/步驟
打開Apache伺服器的安裝路徑,在bin目錄中有一個ab.exe的可執行程序,就是我們要介紹的壓力測試工具。
在Windows系統的命令行下,進入ab.exe程序所在目錄,執行ab.exe程序。注意直接雙擊無法正確運行。
執行ab命令成功後,可以看到如圖提示。該幫助很清楚詳細的介紹了ab的用法以及各個參數的含義。
ab 的用法是:ab [options] [http://]hostname[:port]/path
例如:ab -n 5000 -c 200
上例表示總共訪問這個腳本5000次,200並發同時執行。
ab常用參數的介紹:
-n :總共的請求執行數,預設是1;
-c: 並發數,預設是1;
-t:測試所進行的總時間,秒為單位,預設50000s
-p:post時的數據文件
-w: 以html表的格式輸出結果
執行測試用例:ab -n 1000 -c 100 -w c:\1.html
上面的測試用例表示100並發的情況下,共測試訪問index.php腳本1000次,並將測試結果保存到c:\1.html文件中。
測試報告如圖,可知在該100並發訪問的情況下,共測試訪問1000次,失敗了852次。可知該腳本在此環境無法滿足100並發訪問的要求。
修改參數繼續測試。測試並發50和30兩種情況,由測試報告得知,在並發訪問降到30時,錯誤的訪問數降為39。
步驟閱讀
用PHP 編寫支持高並發的網站,需要做什麼處理
一般來說,解決WEB高並發的有效手段都是採用可線性擴展的多層分散式架構,
我生產項目的架構是這樣的,就在這裡拋磚引玉一下。
Webserver (Nginx) :這一層是可以輕鬆分散式部署的,結合智能DNS解析可以簡易地防止單點故障、實現區域訪問加速,結合LVS很容易實現負載均衡。這一層主要是負責處理靜態請求和轉發PHP請求至第二層的PHP處理節點,至於靜態資源地址()可以單獨拿出來部署,或者直接使用商用的雲存儲服務(國內七牛不錯,國外有Amazon S3)
PHP處理節點:一個節點其實就是一個監聽特定埠的系統進程,webserver的請求通過負載均衡器(我用的AWS的loadbalancer)進行分發,很好實現分散式和負載均衡。我現在用的還是php自帶的php-fpm,其實facebook出的hhvm性能非常強悍,但是還不能100%通過我項目的單元測試,等hhvm成熟過後可以平滑替換
高速緩存:用的memcached,這一層的作用主要是減輕資料庫IO和加快熱數據訪問,緩存策略與程序耦合度較高,不贅述,但簡單地說有兩種方式,一種是在程序的全局層面加一個緩存處理,這種方法代碼耦合度低,但是有效命中率不高,有些項目不一定適應,另一種是在具體的數據存取處加緩存處理,這種辦法程序耦合度較高,但是緩存命中率非常高,幾乎沒有無效緩存存在,我用的是這種。
資料庫 :我現在的項目數據規模不大,暫時只用了單台資料庫,但是程序邏輯上已做好了資料庫線性擴展的準備。其實資料庫層的擴展是老生常談了,常用手段是分庫分表,這一塊需要在前期的代碼就打下基礎,另外更平滑地手段是使用中間件,比如360的Atlas,阿里巴巴的cobar,淘寶的TDDL,中間件可以在不大範圍變更代碼的情況下擴展,但是具體的使用場景還是有限的,具體項目還需單獨考察。
其他:根據不同的項目,架構還可以選擇性地使用隊列,我現在用的beantalkd,Redis也是一個很好的選擇。隊列常用的使用環境是郵件發送和站內消息推送上面,但是在某些場景下也可以作為核心資料庫的緩衝,對應對大並發或者突發性流量也是不錯的選擇
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/302859.html