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

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

  • <strong id="5koa6"></strong>
  • 一個菜鳥測試工程師的簡易自動化測試框架

    發表于: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.kjueaiud.com

    老湿亚洲永久精品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>