一個菜鳥測試工程師的簡易自動化測試框架

發表于:2012-08-23來源:test China作者:AskaNeverEnd點擊數: 標簽:自動化測試框架
作為一個無 dev 經驗的 tester 來說,目前遇到許多新的問題,關于 tester 以后的人員基本素質的構成,現在也有許多說法,在這里,不想過多的鋪開討論了。 作為一個 tester,本身當然必須對test這件事情感興趣,才能把工作做好。 有的人天生喜歡找茬,喜歡提意

  引子

  作為一個無 dev 經驗的 tester 來說,目前遇到許多新的問題,關于 tester 以后的人員基本素質的構成,現在也有許多說法,在這里,不想過多的鋪開討論了。 作為一個 tester,本身當然必須對test這件事情感興趣,才能把工作做好。 有的人天生喜歡找茬,喜歡提意見,在我看來,就是一個不錯的 tester 的料。 當你天天對著同一個產品的不同版本不停的測試的時候,自然會產生一些怨言,由此產生懈怠。

  “某些功能點我都連著測試了 N 個版本了,肯定不會出錯了” “這種基本功能點,怎么可能出錯”這樣的論調是很有可能產生的。于是,一個 tester 很有可能在某次 release 的過程中,經驗主義的放過了某些功能點的測試。 幾天后,一個用戶反饋上來,那個功能點出了問題.........

  “偷懶”這個詞語,在測試過程中,不應該算一個貶義詞(當然了,故意漏過功能點不測試,不在此列)。因為“偷懶”催生新的技術,“偷懶”節省更多的時間。 我相信,自動化測試就是這樣來的。

  正題

  任何事情都可以分解為很小的部分,讓我們先分析一下,手工執行測試案例的一個過程:

  打開被測軟件

  執行測試案例

  給出測試結果

  然后,我們不斷重復這個過程。 最后給出測試報告。

  顯然,我們的自動化測試也要滿足上面的這個過程中的所有要求。 既然是自動化,首先要求是所有的測試用例可以無人值守運行;其次,每個測試用例都由機器來模擬人對軟件的操作;第三,某個測試用例失敗不能影響其他測試用例的繼續執行;第四,測試數據和測試用例最好分離開來;最后一點,測試結束之后,給個報告或者給個圖告知測試結果。

  根據上面的分析,我們逐個來一一解決,當然了,本篇都是很初級的解決方式,相信有許多大牛會有更好的方式來解決。

  無人值守運行,那么 python 的 unittest 的框架就能達到這個目的。

  模擬人的操作, selenium 可以勝任。

  測試用例間無影響, 同1

  數據分離, 那把測試數據都扔xml里。

  待完善 (本例中 只是在部分方法中添加錯誤提示)

  開始動手

  對 python 的 unittest 進行一些小手術,當然了,如果只追求簡單,直接用也行。

  def assertLogEqual(self, arg1, arg2):

  print "[assertLogEqual('"+arg1+"', '"+arg2+"')]: "

  if arg1 != arg2:

  self.anyfailure = True

  print " -> Failed: not equal"

  self.result_note = " '%s' and 's%' is not equal\n "%(arg1,arg2)

  else:

  print " ->OK"

  self.result_note = "%s OK\n" % self.result_note

  self.assertEqual(arg1, arg2)

  def assertLogTrue(self, arg1, note=""):

  print "[assertLogTrue("+str(arg1)+")]: "+note

  if arg1 is False:

  self.anyfailure = True

  print " -> Failed: Excepting True"

  self.result_note = " %sError: %s\n " % (self.result_note, note)

  else:

  print " ->OK"

  self.resulte_note = "%s OK\n" % self.result_note

  self.assertTrue(arg1)

  def assertLogFalse(self, arg1, note=""):

  print "[assertLogFalse("+str(arg1)+")]: "+note

  if arg1 is True:

  print " ->FAILED: Expecting False."

  self.anyfailure = True

  self.result_note = "%sError: %s\n" % (self.result_note, note)

  else:

  self.result_note = "%sOK\n" % self.result_note

  print " ->OK"

  self.assertFalse(arg1)

  自己新建一個類,繼承unittest,然后修改必要的一些方法,并添加部分方法,譬如設置testName啊,設置標記值來標記case知否執行結束啊。這些都是可以根據自己喜好來加入的方法。

  def setTestName(self, tname):

  self.testname = tname

  def getTestName(self):

  return self.testname

  def setCompleted(self):

  self.completed = True

  def isCompleted(self):

  return self.completed

  對于unittest框架的修改 就寫這么多。

  對selenium的基本方法做一些小改動,動機優化 unittest 框架一致,只是為了讓你的用例跑起來的時候更加讓人理解。我們相當于在 selenium 的基本方法外面又封裝了一層。下面是部分方法示例:

  def open(self,url):

  self.sel.open(url)

  def GetValue(self, element):

  value = self.sel.get_value(element)

  self.assertLogTrue(True, "Value for element %s is %s" %(element, value))

  return value

  def isTextPresent(self, text):

  val = self.sel.is_text_present(text)

  if val is False:

  self.assertLogTrue(val, note="error occured *************" + text +\

  " not found")

  else:

  print 'present (%s,%s)' % (text,val)

  return val

  def Select(self, element, selection):

  if self.isElementPresent(element):

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97