Tags: 敏捷測試, 自動(dòng)化測試, 軟件測試
DSL與自動(dòng)化測試 – 用Python實(shí)現簡(jiǎn)單的DSL
二.03, 2010 in python, 自動(dòng)化測試 2 Comments
自動(dòng)化測試,一個(gè)在測試領(lǐng)域中被廣為熟知,也是被談?wù)撟疃嗟母拍钪。DSL (Domain Specific Language),一種高度抽象,用于某個(gè)特定領(lǐng)域下編程語(yǔ)言。軟件測試在大多數情況下都是對某個(gè)特定行業(yè)的軟件系統進(jìn)行測試,所以這兩者應該可以很好的結合起來(lái),事實(shí)上也是這樣的,QTP里面的keyword view,其實(shí)就是DSL的一個(gè)實(shí)現。DSL一般可以分為兩個(gè)大的類(lèi)型,分別是External DSL 和 Internal DSL (引用自Martin Fowler)。External DSL 一般來(lái)說(shuō)是跟其實(shí)現語(yǔ)言不一樣的 DSL,常見(jiàn)的External DSL 有:SQL和XML配置文件;而Internal DSL 一般來(lái)說(shuō)就是該DSL使用某個(gè)現成的編程語(yǔ)言(就是所謂的host language),然后對host language進(jìn)行一些改造而成。 我們在測試中會(huì )遇到很多問(wèn)題,其中一些問(wèn)題,幾乎是所有公司所有團隊都會(huì )遇到的,例如測試覆蓋率不夠,測試的時(shí)間不夠等等。面對這些問(wèn)題,自動(dòng)化測試自然而然地成為解決這些問(wèn)題的首選方法。但是自動(dòng)化測試真的就是銀彈麼?不見(jiàn)得!以前曾經(jīng)在A(yíng)SP.NET QA 的博客中給他們留言,請教過(guò)關(guān)于自動(dòng)化測試的事情,我記得其中有一個(gè)回復是說(shuō),在某個(gè)release中過(guò)度地使用自動(dòng)化測試,一切東西都想實(shí)現自動(dòng)化測試,而忽略了產(chǎn)品本身的功能、特性的關(guān)注,結果就是超高的自動(dòng)化測試覆蓋率,但是很差的產(chǎn)品質(zhì)量。大家都去實(shí)現自動(dòng)化測試了,誰(shuí)來(lái)做功能點(diǎn)的覆蓋呢?某些領(lǐng)域的專(zhuān)家(SME),他們可能對測試技術(shù)是一無(wú)所知的,要把這些領(lǐng)域專(zhuān)家和測試實(shí)施結合起來(lái),DSL就是一個(gè)比較好的橋梁。 我在工作中遇到的問(wèn)題是,我需要測試一個(gè)類(lèi)似UV(獨立用戶(hù)訪(fǎng)問(wèn)數)統計的系統,統計UV的方法其實(shí)就是根據_uid cookie的值來(lái)判斷這個(gè)用戶(hù)在某段時(shí)間內訪(fǎng)問(wèn)過(guò)我們的系統多少次,訪(fǎng)問(wèn)了哪些站點(diǎn),進(jìn)行了什么樣的行為。其中有2個(gè)地方比較麻煩,第一就是在測試過(guò)程中要不斷地拷貝cookie,這樣拷來(lái)拷去兩三次以后很容易就混亂,出錯;第二就是需要記錄訪(fǎng)問(wèn)哪些站點(diǎn),這些站點(diǎn)都只是ID,也是需要不斷地修改請求,測試時(shí)間長(cháng)了也是很容易出錯。所以我就打算在原來(lái)的測試工具基礎上,實(shí)現一個(gè)簡(jiǎn)單的Internal DSL。先看成品: @tc def uniq_inventory_case01(): test= testTool() test.user(’a').view(’asset55100002′).anetwork(’55100′).onsite(’site55100503′).snetwork(’55100′).dnetwork(’55100′).times(1).go() test.user(’b').view(’asset55100002′).anetwork(’55100′).onsite(’site55100503′).snetwork(’55100′).dnetwork(’55100′).times(2).go() test.user(’b').view(’asset55100002′).anetwork(’55100′).onsite(’site55100504_noad’).snetwork(’55100′).dnetwork(’55100′).times(4).go() 實(shí)例化一個(gè)testTool對象,然后就是指定哪個(gè)用戶(hù):user(‘a(chǎn)’)或者user(‘b’),看的視頻的ID:view(‘a(chǎn)sset55100002′),這個(gè)視頻屬于哪個(gè)CRO呢?anetwork(’55100′);放在哪個(gè)網(wǎng)站呢?onsite(‘site55100503′);網(wǎng)站是誰(shuí)的呢?snetwork(’55100′);誰(shuí)是分發(fā)者呢?dnetwork(’55100′);看了多少次呢?times(4);最后一個(gè)有點(diǎn)兒丑陋的go()。 像這樣子一句話(huà)里面N個(gè)方法連著(zhù)用,就叫Method Chaining,Method Chaining通?梢宰尨a變得更加人性化,讀起來(lái)更加容易。但是使用Method Chaining通常會(huì )遇到一個(gè)問(wèn)題,就是很難判斷就是到了哪個(gè)方法才是終結呢?是不是有些方法的調用是可選的,有些是必選的呢?其中一個(gè)解決方法就是我用到的,放一個(gè).go()方法在最后,作為終結方法。要實(shí)現Method Chaining,其實(shí)只需要頂一個(gè)類(lèi),對于需要做連接的方法,最后都返回這個(gè)類(lèi)的實(shí)例。例如: def view(self, assetid): if assetid: self.asset_id = assetid return self def anetwork(self, networkid): if [...]
Tags: DSL, python, 自動(dòng)化測試
自動(dòng)化測試中的sleep
三.16, 2009 in 自動(dòng)化測試 2 Comments
最近在修改公司現有的一個(gè)自動(dòng)化測試框架,里面用了很多time.sleep()方法,看著(zhù)不是很爽,為什么我覺(jué)得sleep方法在自動(dòng)化測試中不應該過(guò)多的使用呢,我甚至覺(jué)得應該盡可能避免sleep方法的使用,sleep可以作為增加自動(dòng)化測試穩定性的手段,但是不能依賴(lài)sleep來(lái)讓自動(dòng)化系統穩定。 舉個(gè)例子,如果一個(gè)UI的自動(dòng)化測試,需要等待某個(gè)頁(yè)面load完成以后才進(jìn)行操作,那么需要對那個(gè)頁(yè)面是否已經(jīng)Load完成進(jìn)行判斷,而不應該sleep(x),x是一個(gè)magic number,有時(shí)候1、2秒就足以,有時(shí)候它卻不知道有多大,因為已經(jīng)超時(shí)了!那如果我們在check頁(yè)面狀態(tài)之前做一個(gè)短時(shí)間的sleep,那么在某些場(chǎng)合下可以增加這個(gè)自動(dòng)化測試的穩定性,但是最終整個(gè)自動(dòng)化測試的腳本是不會(huì )依賴(lài)于這個(gè)sleep的語(yǔ)句來(lái)達到穩定的。 在做自動(dòng)化測試的時(shí)候,最常見(jiàn)的兩種判斷就是1. 某程序已經(jīng)成功啟動(dòng),某頁(yè)面已經(jīng)加載完畢。 2. 某程序已經(jīng)正常關(guān)閉,某服務(wù)已經(jīng)順利停止。 回到實(shí)際的工作,我要判斷被測的程序是否已經(jīng)正常啟動(dòng),可以用系統提供的一些工具,或者調用一些接口,例如SNMP命令,或者是調用一下Lua腳本等,如果他們都返回我們期望的數據,那么可以認為程序已經(jīng)成功啟動(dòng)了。反之,如果前面的這些命令出錯了,那么我也可以認為程序已經(jīng)是關(guān)閉了的。 要實(shí)現自動(dòng)化測試,就必須要讓測試代碼每時(shí)每刻都掌握著(zhù)被測系統的狀態(tài),sleep方法會(huì )讓自動(dòng)化測試腳本的行為變得詭異。
Tags: 自動(dòng)化測試
四.26, 2009 in .NET, 自動(dòng)化測試 Leave a Comment
自己動(dòng)手創(chuàng )建Web測試驗證規則 ”Web測試”是由一系列 HTTP 請求組成,通過(guò)發(fā)出 HTTP 請求在協(xié)議層工作的測試類(lèi)型。在VSTS中自帶了若干個(gè)預先定義好的驗證規則,例如在返回的頁(yè)面上尋找某些字符,返回的文檔中是否包含某些Tag,等等。前一段時(shí)間在測試一個(gè)安全過(guò)濾器,這個(gè)過(guò)濾器的基本功能就是過(guò)濾用戶(hù)輸入中的一些有可能構成安全隱患的內容,例如
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/