一,安裝PhpUnit
1.下載phpunit:點擊進入
2.配置phpunit:
1)添加環境變量
右鍵 我的電腦 ,選擇 屬性 。點擊左側的 高級系統設置 。此時彈出 系統屬性 ,選擇 高級 選項卡,點擊右下角的 環境變量 。 在用戶變量裏面,雙擊 PATH ,在 變量值 後面添加 ;D:\repository\CourseManagement\mobile_api_test
(注意最前面的分號,路徑填存放phpunit.phar的路徑)。配置這個是爲了在任意位置都能使用PHPUnit,不配置的話,需要在phpunit.phar的路徑下才能使用PHPUnit。
2)配置:
進入存放phpunit.phar的路徑,命令窗口運行
echo @php "%~dp0phpunit.phar" %* > phpunit.cmd
二,項目目錄文件
1.API請求類
目錄:./lib/CurlClient.php
<?php
/**
* 封裝curl的http客戶端操作類
*/
class CurlClient {
/**
* 執行get請求
*
* @access public
* @param string $url 遠程地址
* @param string $cookie cookie
* @param array $options curl配置
* @param integer $time_out 讀取數據超時時間
* @param integer $con_timeout 連接超時時間
* @return array
*/
public function get($url,$cookie="", array $options=array(), $time_out=30, $con_timeout=20) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $con_timeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $time_out);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
foreach ($options as $key => $val) {
curl_setopt($ch, $key, $val);
}
unset($val);
// 執行遠程請求,並清除utf8的bom輸出
$content = $this -> remove_utf8_bom(curl_exec($ch));
// 執行之後才能獲取狀態碼
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode != 200){
die("網絡錯誤");
}
return $content;
}
/**
* 執行post請求
*
* @access public
* @param string $url 遠程地址
* @param mixed $data 數據集合
* @param string $cookie cookie
* @param array $options curl配置
* @param integer $timeout 讀取數據超時時間
* @param integer $con_timeout 連接超時時間
* @return string
*/
public function post($url, $data=null,$cookie="",$is_show_header=0, array $options=array(), $timeout=30, $con_timeout=20) {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HEADER, $is_show_header);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $con_timeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
!empty($data) and curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
foreach ($options as $key => $val) {
curl_setopt($ch, $key, $val);
}
unset($val);
// 執行遠程請求,並清除utf8的bom輸出
$ch_res = curl_exec($ch);
if($is_show_header){
$content = $this -> get_cookie($ch_res);
}else{
$content = $this -> remove_utf8_bom($ch_res);
}
//執行之後才能獲取狀態碼
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpcode != 200){
die("網絡錯誤");
}
curl_close($ch);
return $content;
}
/**
* 清除utf-8的bom頭
*
* @access public
* @param string $text 字符串
* @return string
*/
private function remove_utf8_bom($text) {
$bom = pack('H*', 'EFBBBF');
$text = preg_replace("/^{$bom}+?/", '', $text);
return $text;
}
private function get_cookie($text){
list($header, $body) = explode("\r\n\r\n", $text);
preg_match("/set\-cookie:([^\r\n]*)/i", $header, $matches);
$cookie = explode(';', $matches[1])[0];
return $cookie;
}
}
/* End of this file */
2.基礎配置類:配置域名,引用請求類
目錄:./project/config.php
<?php
require_once(dirname(__FILE__)."/../lib/CurlClient.php");
define("PREFIX", "http://localhost.insure.qy.com");
3.API單元測試類:
目錄:./project/TestAPI.php
<?php
require_once(dirname(__FILE__) . '/config.php');
use PHPUnit\Framework\TestCase;
class TestAPI extends TestCase
{
/** 測試登錄,並保持cookie */
public function testLogin()
{
$param = array(
"ajax_act"=>"login",
'data' => '{"acct":"admin","password":"adminpass","code":"","cache_acct":1}'
);
$url = '/index.php?m=login';
$cookie = $this->get_post_cookie($url, $param);
file_put_contents("./cookie.txt",$cookie);
$this->assertEquals(1, 1);
}
/** 100 保存表單 */
public function testForm100()
{
$param = array(
'data' => '{"title_item":"input157846865167924"}'
);
$url = '/index.php?model=form&m=ajax&cmd=100';
$this->call_post($url, $param);
}
/** 101 獲取表單列表 */
public function testForm101()
{
$param = array();
$url = '/index.php?model=form&m=ajax&cmd=101';
$this->call_post($url, $param);
}
private function call_get($path, $param, $expect = '0')
{
$curl = new CurlClient();
$url = PREFIX . "$path?" . http_build_query($param);
$buf = $curl->get($url);
$obj = json_decode($buf, True);
$this->assertEquals($obj['errcode'], $expect);
return $obj;
}
private function call_post($path, $param, $expect = '0')
{
$curl = new CurlClient();
$url = PREFIX . $path ;
$cookie = file_get_contents("./cookie.txt");
$buf = $curl->post($url,$param,$cookie);
$obj = json_decode($buf, True);
if($obj['errcode'] != 0) {
print_r([
"url"=>$url,
"obj"=>$obj
]);
die;
}
$this->assertEquals($obj['errcode'], $expect);
return [$obj,$cookie];
}
private function get_post_cookie($path, $param)
{
$curl = new CurlClient();
$url = PREFIX . $path ;
$cookie = $curl->post($url,$param,"",1);
return $cookie;
}
}
三,測試運行
phpunit TestFormApi.php
四,正常結果