自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

軟件測試中通用數(shù)據(jù)生成方法

開發(fā) 測試
軟件測試的數(shù)據(jù)生成和維護(hù)在軟件測試中是非常重要的一環(huán)。本文介紹使用PHP加上簡單的配置達(dá)到數(shù)據(jù)生成和維護(hù)的目的。

  軟件測試中非常重要的一個工作就是生成和維護(hù)測試數(shù)據(jù),而這個工作恰恰是繁瑣、重復(fù)而極易出錯的。無疑找到一種通用的數(shù)據(jù)生成方法是極具意義的。本文闡釋了如何使用腳本語言 PHP,加上簡單的 ini 配置文件來達(dá)到這個目的的。

  測試的數(shù)據(jù)生成和維護(hù)在軟件測試中是非常重要的一環(huán)。很多用例實際上就是在修改所測程序的輸入數(shù)據(jù)以確保程序的邏輯是按照自己的預(yù)期進(jìn)行地。

  比如我們測試一個用戶登錄系統(tǒng),我們需要測試正常用戶名 + 正常密碼、正常用戶名 + 錯誤密碼、錯誤用戶名 + 錯誤密碼等基本的用例。在執(zhí)行用例之前,就需要事先在數(shù)據(jù)庫中設(shè)置好相應(yīng)的數(shù)據(jù),比如有一條記錄為正常用戶名 + 正常密碼,然后我們在登陸界面輸入該用戶名和密碼,預(yù)期結(jié)果為正常登陸。

  不同的程序有不同格式的輸入數(shù)據(jù)。但不管格式千變?nèi)f化,我們總可以把它們歸結(jié)為基于行和列的格式,就像數(shù)據(jù)庫中的表一樣。一行為一條記錄,每一條記錄都有相同的字段組成,每一個字段有自己的數(shù)據(jù)格式,字段和字段之間可能有分隔符。

  我們可以在執(zhí)行每一個用例時,手工修改數(shù)據(jù),然后再執(zhí)行用例。但這樣存在一些問題。

  1. 重復(fù),數(shù)據(jù)重用性差。當(dāng)前用例所需的數(shù)據(jù)很有可能在下個用例中被破壞了。

  2. 效率低,尤其是當(dāng)數(shù)據(jù)格式比較復(fù)雜,而且又需要大量數(shù)據(jù)的時候。

  3. 不靈活。但數(shù)據(jù)發(fā)生變動的時候,數(shù)據(jù)的維護(hù)成本會很高。

  4. 容易出錯。

  那有沒有一種方法來解決這個問題呢?答案是肯定的。下面我們一起來實現(xiàn)一個簡單的工具來解決這個問題。

  需要實現(xiàn)的基本功能

  首先我們來列舉一下這個軟件測試工具需要實現(xiàn)的基本功能:

  1. 通用性:能夠描述各種不同格式的數(shù)據(jù)。

  2. 擴(kuò)展性:當(dāng)需要新的數(shù)據(jù)格式時,可以任意擴(kuò)展。

  3. 易用性:配置文件不易復(fù)雜。

  4. 跨平臺:我們需要一款可以在windows、linux、FreeBSD等系統(tǒng)下面運(yùn)行的工具。

  我們選擇的開發(fā)工具

  我們選擇的開發(fā)工具是 PHP,配置文件采用了 ini 格式的文件。

  之所以選擇 PHP,是因為 PHP 是解釋性腳本語言,其弱類型的特點(diǎn)以及強(qiáng)大的數(shù)組、字符串處理功能,十分適合我們這種應(yīng)用場合。而且 PHP 有著良好的擴(kuò)平臺性,使用 PHP 開發(fā)的腳本基本上不用修改就可以在各個平臺下面運(yùn)行。

  之所以選擇 ini 格式的文件來作為配置,是因為 ini 文件相比較于 xml 而言比較簡單。而且程序處理起來也非常的方便。在 PHP 中使用 parse_ini_file 的內(nèi)置函數(shù)就可以解析整個 ini 文件。

配置語法

  首先我們需要來定義一下我們的配置語法。前面講到,數(shù)據(jù)是由行和列組成,每一列中有若干字段,每一個字段有自己的生成數(shù)據(jù)類型,有自己的前綴,字段和字段之間還有分隔符。我們最終的配置語法格式如下:

  清單一:example.ini

  [field1]

  datatype="list, range=[10-20]"

  prefix="int_"

  postfix=" "

  [field2]

  datatype="list, range=[A-Z, a-z]"

  prefix="char_"

  postfix=" "

  [field3]

  prefix=""

  datatype="list, range=[abc,123,xyz, 100-110]"

  postfix=" "

  [field4]

  prefix=""

  datatype="list, range=[100-200:2]"

  postfix=" "

  我們來解釋一下語法的格式:

  1. 字段名使用[]引起來。后面使用 key=value 的形式來定義這個字段的屬性。

  2. 字段有三個基本的屬性:datatype 指定字段的取值范圍,prefix 設(shè)定字段的前綴,postfix 則設(shè)定字段的后綴。

  3. datatype 中最基本的數(shù)據(jù)類型就是 list,一個無所不包的列表。你所需要指定的就是這個字段的取值范圍參數(shù) range。

  4. range 參數(shù)可以采用 1-10 這樣的區(qū)間表達(dá),也可以用逗號“ , ”來連接多個區(qū)間或者元素。區(qū)間還可以指定遞增的步長。

  上面的 example.ini 文件中定義了四個字段,字段和字段之間使用兩個空格分隔,第一個字段的取值范圍為 10-20,前綴為 int_,第二個字段取值范圍是大小寫英文字母,前綴為 char_,第三個字段取值范圍是混合的,第四個字段則從 100 到 200,遞增步長為 2 。

  清單二:生成的數(shù)據(jù)

  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

#p#

代碼實現(xiàn)

  第一步:解析 ini 文件

  error_reporting(0);

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

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

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

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

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

  {

  $list = array();

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

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

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

  /* 循環(huán)處理每一個 item,如果是一個區(qū)間,則調(diào)用 range 函數(shù)。 */

  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 數(shù)組。

  }

  第三步:循環(huán)輸出數(shù)據(jù)

  /* 循環(huán)輸出數(shù)據(jù)。 */

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

  {

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

  {

  $pointer = $field['pointer'];

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

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

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

  echo $field['list'][$pointer]; // 輸出當(dāng)前指針?biāo)鶎?yīng)的列表中的取值。

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

  $pointer ++;

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

  }

  echo "\n";

  }

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

需要進(jìn)一步完善的地方

  第一:數(shù)據(jù)的擴(kuò)展性

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

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

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

  [field5]

  prefix=""

  datatype="custom" " 定義這個字段的數(shù)據(jù)類型為 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 中的遞歸函數(shù)來實現(xiàn)這個解析。即當(dāng)解析到一個字段發(fā)現(xiàn)是自定義類型的時候,就讀取這個字段所對應(yīng)的 ini 配置文件,然后再解析它的每一個字段。具體的代碼就不給出了,讀者朋友們可以嘗試實現(xiàn)。

  第二:列表可以更加靈活

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

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

  2. 可以指定輸出的格式:range=[1-100:2]&format=0.2f,這個地方的 format 可以是 sprintf 函數(shù)的格式標(biāo)簽。

  3. 可以指定是否隨機(jī)。現(xiàn)在生成的數(shù)據(jù)是按照列表中的順序來生成的??梢酝ㄟ^一個 rand 參數(shù)來指定是否隨機(jī)。

  第三:不同的輸出格式

  我們現(xiàn)在輸出的是行與列的格式,其實我們還可以定義其他不同的輸出格式。比如輸出為數(shù)據(jù)庫的 insert sql 語句。輸出為 xml 格式的數(shù)據(jù)。這些實現(xiàn)起來都不是特別的麻煩,代碼中做些處理就可以了。

  結(jié)束語

  PHP 是一款非常優(yōu)秀的腳本語言(雖然它主要用在 web 開發(fā)上)。使用 PHP 可以快速地寫出很多小工具來幫助我們來完成某個任務(wù)。本文只是給出了一個數(shù)據(jù)生成方法的簡單實現(xiàn),各位讀者朋友完全可以發(fā)揮自己的想象,開發(fā)出更加靈活、好用的工具來。具體到我們公司的應(yīng)用,我們現(xiàn)在基本上可以使用這個工具來生成各種各樣不同的測試數(shù)據(jù)。而且有了這些固定的測試數(shù)據(jù),就可以實現(xiàn)自動化測試。

 

【編輯推薦】

  1. 軟件測試項目的啟動、規(guī)劃與需求分析
  2. 編程對軟件測試人員意味著什么?
  3. 話說軟件測試中的“易用性”測試
  4. 大多數(shù)軟件測試員應(yīng)具備的素質(zhì)
  5. 軟件測試中的軟件管理和測試流程
責(zé)任編輯:佚名 來源: ITpub
相關(guān)推薦

2009-06-16 11:13:38

Javadoc生成方法Javadoc

2024-04-01 13:08:24

唯一IDC#后端

2010-06-11 10:02:02

UML順序圖

2016-11-29 09:12:21

數(shù)據(jù)庫分布式ID

2009-09-28 11:01:48

2023-03-09 07:51:23

性能提升數(shù)據(jù)庫

2022-09-06 15:00:09

機(jī)器學(xué)習(xí)集成數(shù)據(jù)集

2022-09-15 23:58:51

機(jī)器學(xué)習(xí)集成數(shù)據(jù)

2012-02-20 10:12:04

2009-12-29 10:32:24

WPF Listbox

2009-06-25 17:24:06

Hibernate主鍵

2022-08-24 17:04:19

軟件測試數(shù)據(jù)集合測試效果

2011-04-18 17:03:59

動態(tài)測試軟件測試

2025-01-10 10:15:00

AI視覺模型

2021-11-28 15:15:13

軟件測試域測試開發(fā)

2010-05-26 16:44:19

SVN版本號

2021-12-09 09:00:00

軟件測試負(fù)面測試指南

2023-08-04 07:33:57

jsencryptRSA算法

2011-05-16 14:24:02

軟件測試

2011-04-18 11:30:12

排錯調(diào)試軟件測試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號