• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 軟件測試中通用測試數據生成方法(2)

    發表于:2014-09-01來源:uml.org.cn作者:不詳點擊數: 標簽:軟件測試
    清單二:生成的數據 int_10 char_A abc 100 int_11 char_B 123 102 int_12 char_C xyz 104 int_13 char_D 100 106 int_14 char_E 101 108 int_15 char_F 102 110 int_16 char_G 103 112 int_17 char_H 104

      清單二:生成的數據

      int_10 char_A abc 100

      int_11 char_B 123 102

      int_12 char_C xyz 104

      int_13 char_D 100 106

      int_14 char_E 101 108

      int_15 char_F 102 110

      int_16 char_G 103 112

      int_17 char_H 104 114

      int_18 char_I 105 116

      int_19 char_J 106 118

      代碼實現:

      第一步:解析 ini 文件

      error_reporting(0);

      $iniFile = $argv[1]; // 第一個參數為配置文件。

      $dataCount = $argv[2]; // 第二個參數為要生成的記錄數。

      $fields = parse_ini_file($iniFile, true); // 將 ini 配置文件轉換為一個數組。

      第二步:生成每一個字段的取值列表

      foreach($fields as $fieldName => $field)

      {

      $list = array();

      $equalPos = strpos($field['datatype'], '='); // 取得等號的為止。 range=[]

      $range = substr($field['datatype'], $equalPos + 2, -1); // 取得 range 的列表(去掉了 [])

      $items = explode(',', $range); // 得到所有的 item 元素。

      /* 循環處理每一個 item,如果是一個區間,則調用 range 函數。 */

      foreach($items as $item)

      {

      if(strpos($item, '-'))

      {

      list($min, $max) = explode('-', $item);

      $list = array_merge($list, range($min, $max)); // 追加到 field 的 list 列表中。

      }

      else

      {

      $list[] = $item;

      }

      }

      $field['list'] = $list; // 將最終的 list 列表賦值給 field 。

      $field['pointer'] = 0; // 初始化這個列表的指針。

      $fields[$fieldName] = $field; // 寫回整個 fields 數組。

      }

      第三步:循環輸出數據

      /* 循環輸出數據。 */

      for($i = 0; $i < $dataCount; $i ++)

      {

      foreach($fields as $fieldName => $field)

      {

      $pointer = $field['pointer'];

      /* 如果指針已經到到了列表的尾部,重新指向列表開始。 */

      if($pointer == count($field['list'])) $pointer = 0;

      echo $field['prefix']; // 輸出前綴。

      echo $field['list'][$pointer]; // 輸出當前指針所對應的列表中的取值。

      echo $field['postfix']; // 輸出后綴。

      $pointer ++;

      $fields[$fieldName]['pointer'] = $pointer;

      }

      echo "\n";

      }

      這樣我們用了不到 50 行的代碼就完成了一個基本的數據生成工具。這其實已經可以滿足基本的數據生成任務了。但是還需要進一步進行完善。

      需要進一步完善的地方

      第一:數據的擴展性

      雖然 list 類型已經足夠靈活,但有時候還無法滿足需要。比如一個比較復雜的字段,由若干小字段組成。這時可以將這個復合字段再通過一個 ini 文件來定義,這樣就有了無限可能。

      比如,我們在 example.ini 文件中增加一個日期的字段,格式為 yyyy 年 mm 月 dd 日的格式

      清單三:example.ini 中新增一個字段

      [field5]

      prefix=""

      datatype="custom" " 定義這個字段的數據類型為 custom

      datacfg="custom.ini" " 定義這個字段的配置文件為 custom.ini

      postfix=""

      清單四:custom.ini

      [field5.1]

      prefix=""

      datatype="list, range=[1980-1999]"

      postfix=" 年 "

      [field5.2]

      prefix=""

      datatype="list, range=[1-12]"

      postfix=" 月 "

      [field5.3]

      prefix=""

      datatype="list, range=[1-31]"

      postfix=" 日 "

      這可以通過 php 中的遞歸函數來實現這個解析。即當解析到一個字段發現是自定義類型的時候,就讀取這個字段所對應的 ini 配置文件,然后再解析它的每一個字段。具體的代碼就不給出了,讀者朋友們可以嘗試實現。

      第二:列表可以更加靈活

      列表 range 參數還可以更加靈活,比如:

      1. 可以指定步長:range=[1-100:2],表示從 1 到 100,步長為 2 遞增。

    原文轉自:http://www.uml.org.cn/Test/201204263.asp

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>