成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

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

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

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

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

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

  4. 容易出錯(cuò)。

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

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

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

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

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

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

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

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

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

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

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

配置語法

  首先我們需要來定義一下我們的配置語法。前面講到,數(shù)據(jù)是由行和列組成,每一列中有若干字段,每一個(gè)字段有自己的生成數(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 的形式來定義這個(gè)字段的屬性。

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

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

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

  上面的 example.ini 文件中定義了四個(gè)字段,字段和字段之間使用兩個(gè)空格分隔,第一個(gè)字段的取值范圍為 10-20,前綴為 int_,第二個(gè)字段取值范圍是大小寫英文字母,前綴為 char_,第三個(gè)字段取值范圍是混合的,第四個(gè)字段則從 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#

代碼實(shí)現(xiàn)

  第一步:解析 ini 文件

  error_reporting(0);

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

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

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

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

  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)處理每一個(gè) item,如果是一個(gè)區(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; // 初始化這個(gè)列表的指針。

  $fields[$fieldName] = $field; // 寫回整個(gè) 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 行的代碼就完成了一個(gè)基本的數(shù)據(jù)生成工具。這其實(shí)已經(jīng)可以滿足基本的數(shù)據(jù)生成任務(wù)了。但是還需要進(jìn)一步進(jìn)行完善。

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

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

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

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

  清單三:example.ini 中新增一個(gè)字段

  [field5]

  prefix=""

  datatype="custom" " 定義這個(gè)字段的數(shù)據(jù)類型為 custom

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

  第二:列表可以更加靈活

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

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

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

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

  第三:不同的輸出格式

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

  結(jié)束語

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

 

【編輯推薦】

  1. 軟件測試項(xiàng)目的啟動(dòng)、規(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順序圖

2009-09-28 11:01:48

2016-11-29 09:12:21

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

2023-03-09 07:51:23

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

2022-09-15 23:58:51

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

2022-09-06 15:00:09

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

2012-02-20 10:12:04

2009-06-25 17:24:06

Hibernate主鍵

2009-12-29 10:32:24

WPF Listbox

2022-08-24 17:04:19

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

2011-04-18 17:03:59

動(dòng)態(tài)測試軟件測試

2025-01-10 10:15:00

AI視覺模型

2021-11-28 15:15:13

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

2021-12-09 09:00:00

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

2011-05-16 14:24:02

軟件測試

2011-04-18 11:30:12

排錯(cuò)調(diào)試軟件測試

2010-05-26 16:44:19

SVN版本號

2011-01-19 10:54:14

軟件評測師
點(diǎn)贊
收藏

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

主站蜘蛛池模板: www.伊人.com| 欧美激情欧美激情在线五月 | 在线免费观看a级片 | 日韩精品一区二区三区在线播放 | 高清视频一区二区三区 | 91久久久久久久 | 亚洲成人在线视频播放 | 久久精品国产一区二区电影 | 美女视频三区 | 久久精品无码一区二区三区 | 亚洲一区二区三区在线视频 | 免费看色| 黄色网页在线 | 欧美在线亚洲 | 日韩电影中文字幕在线观看 | 亚洲综合免费 | 国产日韩一区二区 | 免费国产一区 | 日韩一区二区三区在线观看视频 | 精品国产乱码久久久久久丨区2区 | 久久久久久高潮国产精品视 | 国内精品久久精品 | 精品久久精品 | 精品视频一区二区三区四区 | 午夜网 | 中文av字幕 | 成人日b视频 | 国产成人精品免费视频 | 成人性生交大免费 | 一区二区三区在线电影 | 午夜av电影 | 国产午夜精品一区二区三区在线观看 | 欧美性猛交 | 国产精品国产成人国产三级 | 日韩欧美黄色 | 青青久久av北条麻妃海外网 | 一区网站| 免费xxxx大片国产在线 | 亚洲黄色在线免费观看 | 国产精品18hdxxxⅹ在线 | 精品国产一区二区三区久久狼黑人 |