各位小夥伴,你們好啊,最近小編我一直在搜狗手機助手項目組進行測試手段改進相關的工做,其中一項改進就是開展服務端的測試,而服務端的改進首先從接口測試開始,下面針對實施的過程與你們分享一下。php
當前存在的問題:html
測試範圍:目前測試工做的重點是在Android客戶端,對於服務端測試的投入不多,這樣對於質量保證工做來說是存在質量隱患的;nginx
測試手段:針對服務端接口的測試,目前使用的手段是。對客戶端進行不一樣的操做,經過觀察客戶端不一樣的響應效果,來判斷服務端邏輯的正確與否;git
測試深度:目前的測試層次維持在接口表層,僅爲入口級別,對於接口內部的深層邏輯,沒法有效驗證;github
測試度量:針對服務端測試質量的度量,僅爲接口功能需求層面,對於代碼層面的度量,目前是沒有的,因此沒法評估測試的質量是否符合要求。web
實施過程
首先咱們制定的是目標,在此次改進工做中,咱們指望所能到達到的效果是:shell
極高的自動化程度json
極低的人工成本後端
極好的測試效果服務器
在這個目標中,體現出的了3個關鍵詞,分別是 「自動化」 、「可度量」、「高效率」。
因此咱們制定了一套系統性的服務端接口測試質量度量實施計劃,分別包括如下三部分:
測試環境自動部署;
測試用例自動執行;
結果統計與報告自動輸出。
測試環境自動部署
咱們目前所使用的測試環境均爲開發提供的,測試對於該服務器無任何操做權限,限制了咱們工做的展開,因此咱們獨立搭建了一套測試環境。
測試服務器的自動部署
咱們後端工程環境是這樣的:
系統環境:CentOS7.2 + Nginx1.16.0 + PHP7.3.6
開發語言:PHP
開發使用的框架:SuperPHP + MySql + Redis + memcache + mcrypt
根據代碼工程的部署步驟,咱們經過shell腳本實現了自動化操做。
代碼覆蓋率統計程序的自動部署
在測試質量度量方面,咱們引入了「代碼覆蓋率」這樣一個指標項,統計腳本的運行環境須要:
Xdebug
php-code-coverage
composer
1) 安裝並配置Xdubug
git clone git://github.com/xdebug/xdebug.git
cd xdebug
find / -name phpize
/usr/bin/phpize
find / -name php-config
./configure --enable-xdebug --with-php-config=/usr/local/php/bin/php-config
make
make install
2)配置php-code-coverage庫
下載並安裝composer
curl -sS https://getcomposer.org/installer | php
php composer.phar --version
Composer version 1.6.5 2018-05-04 11:44:59
將 composer.phar 放到工程根目錄下
新建composer.json文件
# composer.json
{
"require": {
"phpunit/php-code-coverage": "^7.0",
"ext-dom": "*",
"ext-xmlwriter": "*",
"phpunit/php-file-iterator": "^2.0.2",
"phpunit/php-token-stream": "^3.0.1",
"phpunit/php-text-template": "^1.2.1",
"sebastian/code-unit-reverse-lookup": "^1.0.1",
"sebastian/environment": "^4.1",
"sebastian/version": "^2.0.1",
"theseer/tokenizer": "^1.1",
"phpunit/phpunit": "^8.0",
"phpunit/phpcov": "*"
}
}
運行如下命令,安裝第三方庫,會在同級目錄中生成vendor目錄
php composer.phar install
3)插樁
這裏的插樁操做很是簡單,僅須要兩個步驟:
新建一個用來統計覆蓋率的腳本,名稱prepend.php;
<?php
require_once dirname(__FILE__).'/vendor/autoload.php'; # 在composer生成的vender同級目錄。
use SebastianBergmann\CodeCoverage\CodeCoverage;
$coverage = new CodeCoverage;
$coverage->filter()->addDirectoryToWhitelist('/xxxxx/index.php'); # 白名單,即須要統計的工程文件或文件夾。
$coverage->start('<Site coverage>');#開始統計
register_shutdown_function('__coverage_stop',$coverage);#註冊關閉方法
function __coverage_stop(CodeCoverage $coverage){
$coverage->stop();#中止統計
$cov = '<?php return unserialize(' . var_export(serialize($coverage), true) . ');';#獲取覆蓋結果,注意使用了反序列化
//echo $cov;
file_put_contents('/usr/local/nginx/html/report/cov/site.' . date('U') .'.'.uniqid(). '.cov', $cov);#將結果寫入到文件中
}
將該腳本插入到須要統計的功能代碼中
include_once("/xxxx/prepend.php");
1)統計部分接口,能夠在每一個須要統計的接口函數中插入;
2)統計整個工程,能夠在工程入口函數中插入。
至此測試所須要的環境已部署完成。
測試用例自動執行
因爲目前的測試手段爲接口測試,而市面上的接口測試工具、開源框架有不少,如Postman、soupUI、httprunner等等,因此你們能夠根據具體狀況自由選擇。
咱們團隊的接口測試自動化執行採用瞭如下兩種形式。
1)團隊自建的接口自動化平臺,大部分的通用接口,都可以使用該平臺進行測試;
2)團隊自建的接口自動化框架,某些複雜邏輯的接口測試,在平臺沒法搞定的狀況下使用。
結果統計與報告自動輸出
咱們目前的報告主要包括接口測試執行結果報告、代碼覆蓋度統計報告。
接口測試執行結果報告
代碼覆蓋度統計報告
phpcov merge --html="/usr/local/nginx/html/report/coverageInfo/coverage_html" coverageInfo/ -vvv
自動化串聯
以上的實施過程當中,每一個環節能夠作到自動化操做,可是爲了達到咱們的目標,實現高度的自動化和極低的人工成本,當前的狀態是徹底不夠的,因此咱們又引入了Jenkins。經過Jenkins,咱們實現了徹底自動化,從代碼拉取到產出報告,總時長僅爲7.6秒。
寫在後面的話
以上是咱們在服務端測試覆蓋度提高方面的嘗試,在這個嘗試中目前仍然存在一些問題,包括接口測試用例數量少、代碼行覆蓋度低的狀況,這些都是須要咱們在後期不斷地改進。也但願各位小夥伴多多給咱們提些改進建議,咱們在這裏一塊兒交流。
本文分享自微信公衆號 - 搜狗測試(SogouQA)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。