一,安装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
四,正常结果
来源:CSDN
作者:share_9527
链接:https://blog.csdn.net/weixin_39682289/article/details/104010749