Robot Framework--10 萬能的evaluate


轉自:http://blog.csdn.net/tulituqi/article/details/10124559

 

這一講我們重點來介紹一下一個常用的關鍵字evaluate。

我覺得這個關鍵字在RF里幾乎是無所不能,只要你略懂python語法,evaluate能讓你直接運行python腳本。這樣可以在Library沒有給你提供你想要的方法時,直接用python腳本來實現你想要的方法。

下面我們列舉一些常用的用法,這只是我演示的例子,實際的用途還有更多,歡迎大家自行研究。不熟悉python語法的就去查查python的幫助文檔。

 

1、生成隨機數

 首先在第一個用法的同時,介紹一下這個關鍵字。

Evaluate有2個參數,一個是表達式,一個是模塊。如圖中彈出的窗口,里面有樣例。他既可以進行邏輯運算,得到True或False的結果,如例1;也可以調用python的基礎函數,如例2,;還可以調用特定的庫,如例3;也可以調用多幾個庫,如例子4。

但是因為evaluate只能處理一行代碼(個人理解),所以如果是很復雜的代碼還是放到測試庫里去實現比較好。

接下來說第一個,生成隨機數,整數。其實和樣例一樣很簡單,沒用很復雜的,大家可以根據需要自己修改隨機數的范圍。

 

運行結果為:

 

2、字符串

主要是通過看python幫助找到了一些字符串的集合。

 

上面主要是列舉了一下string里的常量,相當於不同字符的集合吧,有什么用處呢?在第二行可以看到一個簡單的應用。看看運行結果:

每個都是所屬字符的集合,英文大家自己找一下翻譯吧。

PS:上面的像亂碼一樣的東東我也不知道是啥哈。。。

 

3、生成隨機字符串

剛才說了,第2個里面那么多常量有什么用呢?下面來結合一下。

我先選定一個string的常量,然后判斷他的長度,設定要生成多少位長度的字符串,然后使用循環生成我需要的隨機字符串。實際上該方法在我的QTLibrary里有實現,只不過想試一下,在RF里也可以實現同樣的方法。

放一下我的QTLibrary里面類似的方法如何實現的,核心代碼差不多,實際代碼略有差異。雖然RF里實現略復雜,但也能實現出來,不得不感嘆一下RF的強大,之前有人問過我RF的特點,我的理解是:”像寫案例一樣寫代碼,像寫代碼一樣寫案例“。

好了,還是運行一下RF里面的案例吧,中間加了很多log,只截一下前面和最后的運行結果:

 

4、去除字符兩邊的空格,及其他一些字符操作。

第2行是去掉字符串空格的操作,第3行是替換字符的操作。

第7、11行是用來處理一些中文顯示的,以后有機會細說中文處理的吧,雖然python本身就處理中文不是很好,有時候還是會有些問題,但第11行還是能把一些中文的unicode編碼轉成中文顯示出來的(很奇怪個別同事的電腦上配置和我一樣,但是在某些中文處理總報錯)。

第12行是計算字符串里的”行“字的個數。

最后幾行是一個字符串連接和字符串替換。

其他的行可能是之前寫的多余的代碼沒有去處理,可跳過。這是以前就寫在一起了,懶得分開了,大家將就着看吧。

好了,對照一下前面列的幾個點來看運行結果:

可以看到,一開始aaa是兩邊都有空格的,處理后沒有空格了。剩下的對照一下腳本看結果吧:

 

5、日期加減

其實昨天在群里討論到日期的地方,我整理了一下大概有三種:

a、如果對日期無要求的,直接寫死就好了。這個我就不列了,應該不難吧,有需要的再聯系我。

b、需要用當前的日期進行加減的,可以直接用get time這個關鍵字,后面可以跟上你需要返回的值,以及日期的加減,如第一行就是加一天。

c、需要用一個指定日期進行加減的,指定日期可能是從頁面獲取的。從第2行到第7行可以解決這個問題,當然我現在這是舉例,偷懶一下就用系統日期了;如果是從頁面獲取,那就是把第2行和第3行換成你的日期獲取的腳本即可。

有的命令比較長的,顯示不出完整的,我寫在下面。

第7行的代碼:

 

[python]  view plain copy print ?
 
  1. datetime.date(int('${year}'),int('${month}'),int('${day}'))+datetime.timedelta(days=int('${addDays}'))  

 

${addDays}是用來進行加減的,也可以寫成-2,后面運算時就會減2天,如果你想加減其他的,比如時分秒,就修改timedelta里面的days=這個參數,具體哪些可以用的查一下python幫助文檔。

順便說一下為什么寫成這樣帶引號的,首先datetime.date的幾個參數都要用int類型的,所以我用int了一下變量,但是后來發現,在int時,有時候會出現一些報錯,我不記得報錯原因了,但是有的機器報錯,有的不報,然后就給變量上加了引號來解決這個問題。歡迎各位自己嘗試一下。

第9行的代碼:

 

[python]  view plain copy print ?
 
  1. time.strftime("%Y-%m-%d-%H-%M-%S")  

這個是格式化時間顯示的,你可以根據自己的需要來處理。下面看看運行結果:

 

 

6、執行dos命令

 

RF里也可以執行dos命令,很神奇么?

我先在D盤SVN目錄下准備了一個qt目錄,然后執行rd來刪除他,最后用個dir命令來打印結果到D盤的test.txt文件里。

先運行一下看看:

看到結果很奇怪吧,這是啥意思呢?我之前根據結果,只知道0是成功,不成功的有1啊,2啊之類的。后來找度娘查了一下:

因此我們的第一個刪除目錄的命令肯定是失敗了,為啥呢?其實我是在目錄里放了個文件,用過dos的rd命令的都知道,這個命令刪除目錄需要目錄為空,除非你帶/s的參數,就算帶了/s還要有個確認的過程,所以還要帶上/q。

雖然第一個失敗了,但是第二個還是成功了的,因為他返回了0,所以我們看一下第二個的結果:

大家可以看到,我直接用的dir,他當前的目錄實際上是測試腳本所在的目錄。

然后我修改了一下腳本,先刪除一下那個文件,當然你也可以按我前面說的直接加上 /s /q 的參數。

再執行一次,看看結果:

 

7、打印系統值

這是順着前不久群里的朋友問的問題順手做了一個。

這幾個值的結果還略有不同,大家根據自己的需要選擇使用吧:

 

總結一下,Evaluate這個方法非常有用,你可以發揮你的想象,盡情的使用他吧。不過切記開頭說的,如果特別復雜的邏輯,還是用test library來實現吧。希望本篇對大家有所幫助。


***微信掃一掃,關注“python測試開發圈”,了解更多測試教程!***


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM