本文目錄一覽:
- 1、做了一些Python的小練習題,如何實現自動讀取txt文件中的測試數據進行測試。
- 2、33 關 Python 遊戲,測試你的爬蟲能力到底及格不?
- 3、如何學習python自動化測試
- 4、Python題求解答!
做了一些Python的小練習題,如何實現自動讀取txt文件中的測試數據進行測試。
一些經驗,僅供參考:
方法1、可以使用CSV文件格式記錄數據,這時候可以視為一種簡易資料庫來處理數據;
方法2:按行讀取數據,每行進行解析;符合預定規則的則分解行信息為數據集,進行後續處理;
方法3:基於方法2,但有可能數據是有狀態的。這時候需要記錄狀態信息,在狀態分支裡面按規則處理;
具體處理方法的選用,還是要根據源數據格式的特徵分析。
# 輸入參數就是源數據文件名
# 返回值就是讀取出來的行集合,在後面循環從頭到尾處理即可。
def getlines(fn):
f = open(fn, “r”)
lines = f.readlines()
f.close()
return lines
33 關 Python 遊戲,測試你的爬蟲能力到底及格不?
作者 | 蘇克1900
責編 | 胡巍巍
本文經授權轉載自高級農民工
最近在網上看到一個非常有意思的 Python 遊戲 通關網站,一共有 33 關,每一關都需要利用 Python 知識解題找到答案,然後進入下一關。
很考驗對 Python 的綜合掌握能力,比如有的闖關需要用到正則表達式,有的要用到爬蟲。
我們平常學 Python 都是按章節順序、包或者模塊來學,容易前學後忘。正好可以拿這個網站來綜合測試一下對 Python 的掌握情況,以便查缺補漏。
來說說這個網站怎麼玩。
mark
這是網站主頁面,很有 歷史 感對吧,誕生了已有十幾年了。但千萬不要因為看著像老古董而小瞧它。
mark
我們來玩玩看,點擊「get challenged」開始挑戰。
第 0 關是 Warming up 熱身環節:
這一關要求是修改 URL 鏈接,給的提示是電腦上的數學表達式:2 的 38 次方,所以大概就是需要計算出數值,然後修改url 進入下一關。
所以這關就是考 Python 的基本數值運算,你知道怎麼算么?
打開 Python 自帶終端,一行代碼就能計算出結果:
mark
把原鏈接中的 0 替換為 274877906944 回車就會進入下一關:
mark
遊戲 這就正式開始了。圖片中的筆記本給了三組字母,很容易發現規律:前面的字母往後移動兩位就是後面的字母。
那麼需要做的就是根據這個規律把下面的提示字元串,做位移解密得到真正的句子含義:
這道題考察字元串編碼和 for 循環相關知識,代碼實現如下:
得到結果:
作者很風趣,當然不能手動去一個推算了,推薦用 string.maketrans 這個方法解決,我們上面採取的是比較直接的方法,官方給出了更為精簡的方法:
然後把 url 中的 map 改為ocr回車就來到了第 2 關:
mark
作者接著說過關的提示可能在書里(當然不可能了)也可能在網頁源代碼里。那就右鍵查看源代碼往下拉看到綠色區域,果然找到了問題:
mark
意思就是:要在下面這一大串字元里找到出現次數最少的幾個字元
考察了這麼幾個知識點:
如果是你,你會怎麼做?
來看下,十行代碼快速實現:
首先,用 Requests 請求網頁然後用正則提取出字元串,接著 for 循環計算每個字元出現的次數。
可以看到出現次數最少的就是最後幾個字元,合起來是「equality」,替換 url 字元就闖過過了第 2 關進入下一關繼續挑戰。是不是有點意思?
後面每一關都需要用到相關的 Python 技巧解決,比如第 4 關:
mark
這一關作者弄了個小惡作劇,需要手動輸入數值到 url 中然後回車,你以為這樣就完了么?並沒有它有會不斷重複彈出新的數值讓你輸入,貌似無窮盡。
所以,這一關肯定不能採取手動輸入的方法闖關,自然要用到 Python 了。要實現自動填充修改 url 回車跳轉到新 url,循環直到網頁再也無法跳轉為止這一功能。
如果是你,你會怎麼做?
其實,一段簡單的爬蟲加正則就能搞定。思路很簡單,把每次網頁中的數值提取出來替換成新的 url 再請求網頁,循環下去,代碼實現如下:
輸出結果如下:
可以看到,最終循環了 85 次找到了最後一個數字16044,輸入到 url 中就闖關成功。
33 關既有趣又能鍛煉使用 Python 解決問題的技巧,感興趣的話去玩玩看。
網址:
如果遇到不會做的題,可以在這裡找到參考答案:
中參考文教程:
官方參考教程:
作為碼一代,想教碼二代卻無從下手:
聽說少兒編程很火,可它有哪些好處呢?
孩子多大開始學習比較好呢?又該如何學習呢?
最新的編程教育政策又有哪些呢?
下面給大家介紹CSDN新成員: 極客寶寶(ID: geek_baby)
熱 文 推 薦
☞「年薪百萬程序員遭親媽拍賣」剛剛刷爆朋友圈!網友:是我本人!
☞ 真壕!騰訊員工平均月薪 7 萬!
☞ 高級!程序員用遞歸來撩妹?!| 程序員有話說
☞厲害!女學生偷師男子學校,變身區塊鏈開發工程師
☞這家公司的 IoT ,你可千萬別低估!
☞深扒! 幣安被盜的7074.18枚比特幣去哪了?
☞如何使用「番茄法」高效的寫演算法題?
☞面對互聯網一線大廠,這些技術你需要了解!
☞刺激!華為程序員年薪200萬 ?真相讓人心酸!
你點的每個「在看」,我都認真當成了喜歡
如何學習python自動化測試
目前大家對Python都有一個共識,就是他對測試非常有用,自動化測試里Python用途也很廣,但是Python到底怎麼進行自動化測試呢?今天就簡單的向大家介紹一下怎麼使用Python進行自動化測試,本文只是自己的一點點分享,若有錯誤,請大家多多批評指正。這裡主要介紹的是一些Python測試的框架
1、單元測試
a、unittest :Python自帶的單元測試框架
b、pyunit:Junit的Python版本
2、使用Pyhon進行Windows GUI測試
這部分的功能主要就是和大家平時使用的QTP類似。在Windows下我們可以使用pywinauto這個開源的框架:
來個小例子:
app.Notepad.MenuSelect(“Help-About Notepad”)
app.AboutNotepad.OK.Click()
app.Notepad.Edit.TypeKeys (“pywinauto Works!”, with_spaces = True)
呵呵,強大吧
3、使用Python進行Web自動化測試
使用Python進行Web自動化測試的工具有很多,這裡就向大家推薦一下我比較熟悉的Selenium(Web Driver)吧。
我的其他博客有關於Selenium的文章,大家可以看一下。
RF也是不錯的框架啊,基於關鍵字驅動的
twill: a simple scripting language for Web browsing
4、使用Python進行性能測試
a、Python Web Performance Tool
b、Pylot
c、Pymeter
Python題求解答!
單元測試
如果你聽說過「測試驅動開發」(TDD:Test-Driven Development),單元測試就不陌生。
單元測試是用來對一個模塊、一個函數或者一個類來進行正確性檢驗的測試工作。
比如對函數abs(),我們可以編寫出以下幾個測試用例:
輸入正數,比如1、1.2、0.99,期待返回值與輸入相同;
輸入負數,比如-1、-1.2、-0.99,期待返回值與輸入相反;
輸入0,期待返回0;
輸入非數值類型,比如None、[]、{},期待拋出TypeError。
把上面的測試用例放到一個測試模塊里,就是一個完整的單元測試。
如果單元測試通過,說明我們測試的這個函數能夠正常工作。如果單元測試不通過,要麼函數有bug,要麼測試條件輸入不正確,總之,需要修復使單元測試能夠通過。
單元測試通過後有什麼意義呢?如果我們對abs()函數代碼做了修改,只需要再跑一遍單元測試,如果通過,說明我們的修改不會對abs()函數原有的行為造成影響,如果測試不通過,說明我們的修改與原有行為不一致,要麼修改代碼,要麼修改測試。
這種以測試為驅動的開發模式最大的好處就是確保一個程序模塊的行為符合我們設計的測試用例。在將來修改的時候,可以極大程度地保證該模塊行為仍然是正確的。
我們來編寫一個Dict類,這個類的行為和dict一致,但是可以通過屬性來訪問,用起來就像下面這樣:
d = Dict(a=1, b=2)
d[‘a’]
1
d.a
1
mydict.py代碼如下:
class Dict(dict):
def __init__(self, **kw):
super(Dict, self).__init__(**kw)
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError(r”‘Dict’ object has no attribute ‘%s'” % key)
def __setattr__(self, key, value):
self[key] = value
為了編寫單元測試,我們需要引入Python自帶的unittest模塊,編寫mydict_test.py如下:
import unittest
from mydict import Dict
class TestDict(unittest.TestCase):
def test_init(self):
d = Dict(a=1, b=’test’)
self.assertEquals(d.a, 1)
self.assertEquals(d.b, ‘test’)
self.assertTrue(isinstance(d, dict))
def test_key(self):
d = Dict()
d[‘key’] = ‘value’
self.assertEquals(d.key, ‘value’)
def test_attr(self):
d = Dict()
d.key = ‘value’
self.assertTrue(‘key’ in d)
self.assertEquals(d[‘key’], ‘value’)
def test_keyerror(self):
d = Dict()
with self.assertRaises(KeyError):
value = d[’empty’]
def test_attrerror(self):
d = Dict()
with self.assertRaises(AttributeError):
value = d.empty
編寫單元測試時,我們需要編寫一個測試類,從unittest.TestCase繼承。
以test開頭的方法就是測試方法,不以test開頭的方法不被認為是測試方法,測試的時候不會被執行。
對每一類測試都需要編寫一個test_xxx()方法。由於unittest.TestCase提供了很多內置的條件判斷,我們只需要調用這些方法就可以斷言輸出是否是我們所期望的。最常用的斷言就是assertEquals():
self.assertEquals(abs(-1), 1) # 斷言函數返回的結果與1相等
另一種重要的斷言就是期待拋出指定類型的Error,比如通過d[’empty’]訪問不存在的key時,斷言會拋出KeyError:
with self.assertRaises(KeyError):
value = d[’empty’]
而通過d.empty訪問不存在的key時,我們期待拋出AttributeError:
with self.assertRaises(AttributeError):
value = d.empty
運行單元測試
一旦編寫好單元測試,我們就可以運行單元測試。最簡單的運行方式是在mydict_test.py的最後加上兩行代碼:
if __name__ == ‘__main__’:
unittest.main()
這樣就可以把mydict_test.py當做正常的python腳本運行:
$ python mydict_test.py
另一種更常見的方法是在命令行通過參數-m unittest直接運行單元測試:
$ python -m unittest mydict_test
…..
———————————————————————-
Ran 5 tests in 0.000s
OK
這是推薦的做法,因為這樣可以一次批量運行很多單元測試,並且,有很多工具可以自動來運行這些單元測試。
setUp與tearDown
可以在單元測試中編寫兩個特殊的setUp()和tearDown()方法。這兩個方法會分別在每調用一個測試方法的前後分別被執行。
setUp()和tearDown()方法有什麼用呢?設想你的測試需要啟動一個資料庫,這時,就可以在setUp()方法中連接資料庫,在tearDown()方法中關閉資料庫,這樣,不必在每個測試方法中重複相同的代碼:
class TestDict(unittest.TestCase):
def setUp(self):
print ‘setUp…’
def tearDown(self):
print ‘tearDown…’
可以再次運行測試看看每個測試方法調用前後是否會列印出setUp…和tearDown…。
小結
單元測試可以有效地測試某個程序模塊的行為,是未來重構代碼的信心保證。
單元測試的測試用例要覆蓋常用的輸入組合、邊界條件和異常。
單元測試代碼要非常簡單,如果測試代碼太複雜,那麼測試代碼本身就可能有bug。
單元測試通過了並不意味著程序就沒有bug了,但是不通過程序肯定有bug。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/197118.html