• 设为首页
  • 点击收藏
  • 手机APP
    手机扫一扫下载
    华域联盟APP
  • 关注官方公众号
    微信扫一扫关注
    华域联盟公众号

用于测试php函数的代码

[复制链接]
sterben 发表于 2016-10-13 20:43:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
今天忽然想到的,就写了一段测试php函数的代码。
8 g, g& D4 c: s
* n4 M: D* w3 |; x, t8 M7 v6 T

<?php

/**
  B- ^6 ?9 s" X  y * 参数数组$ParamList阐明# U) i7 S1 T2 G# J1 f
*
1 v" a$ w; S0 _+ R7 U * 数组的第一维索引是需求测试的函数的参数名,第二维的每个元素是该参数需求测试的可能值,元素值能够为数组。  r7 Z+ `3 f" I: }5 S
*/

$ParamList = array("Param1" => array(3,4,3,2,1),8 ?1 _) g! C! C0 m. ^5 e5 d
                   "Param2" => array(3,2,5),1 {+ C/ Y2 a# g4 {* }2 J: l" ?
                   "Param3" => array(0,0.5,1,1.5));

// 测试函数7 M* d5 A3 Y6 l
sysTestFunction("Test", $ParamList);

/ E7 R- r  g: P! ~0 C/ j" o
// 待测试的函数
5 [1 E: q7 D, w* }function Test($Param1, $Param2, $Param3)/ ~$ u9 Z4 r9 G$ \
{  Z8 t) p3 w$ W! ^  ~( |
    return $Param1 . "|" . $Param2 . "|" . $Param3;5 [  q0 h, R' b& b9 N$ {
}


0 f0 k6 Y+ G  M: o$ l) a. r0 k/**
* }& G( }, U+ n+ O * 自动测试* U1 U/ K3 c2 R) w/ }. M
*
8 t/ o! G% y* k  C' E/ m * @author         李玉鹏<leeyupeng@163.com>
' ?! X& n6 W3 y * @param  string  $FunctionName  函数称号- b+ O+ }/ p, j$ Y' J8 A3 e# F
* @param  array   $ParamList     参数列表
% r& r% ?3 B6 y2 [- V% H * @return array$ i8 x! a. H! a" T5 ^
*/5 r; p* `; U* T9 f! j$ x( W' H! S
function sysTestFunction($FunctionName, $ParamList)
4 t6 i' u% A8 s0 P' }% Q{1 M1 l* e& j$ g$ C
    if(empty($FunctionName))+ t# d, w4 c# j  Q
    {; r8 Q/ \8 T6 M
        echo "函数名不能为空";
7 U  z( J7 s' g& g2 D        return false;5 u9 I* ?/ ]0 j- X
    }

    if(!is_array(current($ParamList)))% [6 k3 d# q, z. R  J3 {( y- U
    {0 Y3 C; W  q" ^6 O
        echo "参数不是2维数组";1 `1 J: W2 u4 w2 S- B
        return false;
  a' D1 b* @/ v+ t# v5 H8 X    }

    $TestParamList = sysCombineArray($ParamList);

    echo "开端测试函数" . $FunctionName . "<br />";
6 L) w1 i# K8 ]8 w1 z    foreach($TestParamList as $Key => $TestParamInfo)
7 a+ Z  c: g) X& e+ q3 w! I6 U" L    {
9 \* u4 c+ |1 e% W7 b4 _        echo "开端测试第" . $Key . "组参数:<br />";

        foreach($TestParamInfo as $ParamKey => $Param)
9 g# T: ]+ T  K  N7 Q3 a        {+ [/ ]2 b& y1 g  q8 P) I, o
            ${"Param" . $ParamKey} = $Param;- Z$ x; l: z- m( f, l' Y2 Z
            $TempParamList[] = "$Param" . $ParamKey;( P  R# f8 V+ S# c1 u
            if(is_array($Param))0 V+ b4 r4 h; ]' i/ p4 l
            {% b5 Q" A9 t6 |. E& z5 Y
                echo "参数" . $ParamKey . ",类型为数组:";
6 ~3 K& Y3 s4 C6 g& i& d) H                echo "<pre>";
+ I! _* h" }0 B& U; y                print_r($Param);
9 J' {2 o- [4 S            }* i) Q9 I  q  y' d: }4 x
            elseif(is_bool($Param))
* U8 N9 `8 Y( P8 ?            {
. X7 z3 M; `* {" s5 h- b                echo "参数" . $ParamKey . ",类型为boll:";
, j( L/ _" a9 O% V6 }* I                if($Param)
/ n# d+ `! x7 L5 O                {: g5 ]4 Q  F1 w* ^
                    echo "true";/ Z4 {+ A& ]/ w( P" m. v" \$ r
                }
3 f8 L1 U0 H# t- e# n                else+ ~/ w/ v) x8 T
                {
  T' |4 l3 M) Z6 y6 i$ Y: J- J# R                    echo "false";
# U1 a+ b! g/ A$ N                }) [* M9 p+ w7 q8 L
            }! a- j' G: i6 T& h+ O+ s
            else
: |; ]0 R# W; {) W. e& s8 w; _; W            {, d/ ?' \" E( j* q: g" w
                echo "参数" . $ParamKey . ",类型为字符串或数字:";) p% ^; v# E2 N* O
                echo $Param;( i9 |$ G# n4 p# t7 o
            }" i  Y) Y8 S3 O# J
            echo "<br />";1 |) v3 I: I) N
        }

        $Params = join(", ", $TempParamList);
( A( G7 A% @- {( v" M2 X        unset($TempParamList);

        eval("$TestReturnResult = " . $FunctionName . "(" . $Params . ");");3 M8 t( B2 |, R! d7 ^, X
        if(is_array($TestReturnResult))
, p- O5 t8 Z8 z        {
' o- L$ l. b- L5 s# F4 U! z            echo "函数返回数组:<pre>";2 v8 b: f! x' a3 [: Z' z/ n
            print_r($TestReturnResult);) Z1 K2 W/ h& R. G4 [
        }8 M" {; h: Y% E: X# h- T0 a
        elseif(is_bool($TestReturnResult))5 ]0 u. H: |* s: O
        {
6 g6 I/ ]( p6 d3 w9 A; A& T            if($TestReturnResult)$ g9 n4 O/ X( {8 z+ t
            {
/ E; R9 D1 j9 u0 S1 m" ^/ ~1 V                echo "函数返回true";
% z( f6 ?0 g4 V& H8 c3 D3 z. X            }
* A6 `1 v& @1 }) _" ?            else8 o' p3 r/ W; }6 f! h
            {
" V& a. p' ~) A                echo "函数返回false";
$ a' U  X0 T) q* s            }. G# e3 H2 D4 ]# e4 g# F! E
        }, v7 x* i# K$ t$ ?. V+ e& j
        else5 N2 U! P/ X+ T
        {  _: ^4 q, C! v, x# I
            echo "函数返回数字或字符串:" . $TestReturnResult;, [$ R1 f# u* d
        }) N/ O+ [# R' |
        echo "<br /><br />";
: r! m$ B( V) j! G2 \    }, D4 [1 i9 s) m2 M, T2 |2 {
}

/**
7 u0 C0 J: x9 b% u  L * 计算组合的函数( c2 }* X6 K' l/ c  ?5 [$ ]; y  l% I
*+ V1 y. F$ |, W& b! k
* @author                   李玉鹏<leeyupeng@163.com>3 U, ~" u+ ^& h# l1 @
* @param  array $CombinList 待排列组合的2维数组6 [2 E4 U0 C$ J6 }3 i, [4 x
* @return array             组合后的数组3 G4 W) d9 q$ e" Y- {
*/' g/ m  x& b- ~
function sysCombineArray($CombinList)5 _& k* t' w; V& Z# @  I
{
5 o7 F( Y5 y8 j    if(!is_array(current($CombinList)))$ w( `+ Q7 i5 `# S+ W
    {& O5 c& P' b/ \8 T* f, p
        echo "参数不是2维数组";
+ C2 m$ L/ _" N. O8 d        return false;3 ^% `+ ?& z3 i. x, S
    }

    /* 计算C(a,1) * C(b, 1) * ... * C(n, 1)的值 */
* _- Y1 T. v, \% Y    $CombineCount = 1;
+ G+ r0 z& g8 x( f. t/ @: U1 ]- d    foreach($CombinList as $Key => $Value)! Q  ~3 X1 J0 L; v
    {
: H- [3 A, O1 p        $CombineCount *= count($Value);" ?) m, s0 }: ^
    }

    $RepeatTime = $CombineCount;# }4 i. D% `  f+ ?* o/ a
    foreach($CombinList as $ClassNo => $ParamList)
( a/ L  i5 K& c! {1 \& U1 P* u    {
( a+ a% @, n( \, @- r        // $ParamList中的元素在拆分红组合后纵向呈现的最大重复次数3 q+ t+ e( V5 Z3 a- b+ G
        $RepeatTime = $RepeatTime / count($ParamList);

        $StartPosition = 1;

        foreach($ParamList as $Param); Y- M8 [6 c9 l/ m. `
        {
: k4 x) R" A* g            $TempStartPosition = $StartPosition;

            $SpaceCount = $CombineCount / count($ParamList) / $RepeatTime;

            for($J = 1; $J <= $SpaceCount; $J ++)3 q, q& Q4 [5 k% `
            {
/ c5 X/ p" w. h* i1 ~                for($I = 0; $I < $RepeatTime; $I ++)( o, k$ s0 ?8 ]- \
                {
: H1 D6 |/ h2 x1 O1 z- J6 u                   $Result[$TempStartPosition + $I][$ClassNo] = $Param;
6 V7 v) ?5 h3 X, s                }
, W2 p6 X! h  r+ d. I* c1 x                $TempStartPosition += $RepeatTime * count($ParamList);
2 T8 |0 ^: m7 @: l; o! e; h. [" X            }: |7 ^, D6 r- d2 C% D# k
            $StartPosition += $RepeatTime;6 Y9 c3 `+ ]" F' J
        }+ Q1 O; G) ^  u. k/ o6 T
    }

    return $Result;
1 I  D2 \& N) c; J/ I* u}1 h9 S7 e' a& r' ]; f" \
?>


3 Z: Z) e1 ]0 C0 t: ?4 ?
You look down on me today, tomorrow I can't let you have been

精彩评论1

arskg 发表于 2016-11-20 02:20:56 | 显示全部楼层
回帖是必需的,这个能够有!
8 M+ {8 G1 [4 y
6 h  R1 N1 ~& O" q# a3 s0 @
+ f$ L  B* V% P" D6 c6 Q# R! N2 I0 I2 U4 v
( K. W( m/ U* b2 T

1 N" L: E3 _+ Y- ^% K- G, Q- N- e' q: I  c: G
: @' G9 g$ L* h  ^; P/ ~2 V1 j" I
% A1 r/ D! x6 W
" j7 z) ~3 B) s2 {3 x; x" T. f) [

* t" i2 \/ _; o% x& ]
  r+ n! a2 U' j4 S: J& a, l
php?mod=logging&action=login'+'&referer='+encodeURIComponent(location))" src="static/image/common/sigline.gif" border="0" alt="" />) d8 B  e& p# \+ f) m
                               
php?mod=logging&action=login" onclick="showWindow('login', this.href+'&referer='+encodeURIComponent(location));">登录/注册后可看大图
' |* S( }/ k4 \9 V
美规12V9A开关电源适配器

关注0

粉丝6

帖子3328

发布主题
阅读排行 更多
广告位

扫描微信二维码

关注华域联盟公众号

随时了解更新最新资讯

admin@cnhackhy.com

在线客服(服务时间 9:00~18:00)

在线QQ客服

Powered by cnhackhy! © 2015-2019