測試弱密碼
背景
考慮這樣一個測試弱密碼的實例。
我們需要判斷用戶的密碼中包含簡單密碼,規則是這樣的,密碼必須至少6位,滿足6位的話判斷用戶的密碼不是password123或者password之類的弱密碼。
對於如下的測試數據,我們要如何使用unittest來進行相關測試呢?
[n {"name":"jack","password":"Iloverose"},n {"name":"rose","password":"Ilovejack"},n {"name":"tom","password":"password123"}n]n
Test fixture
前文我們也說過,text fixture的主要功能是初始化測試數據或環境以及清理測試數據或環境。
考慮上面的例子,對我們而已,在用例執行之前初始化上面的測試數據是有必要的,我們可以把上面的數據用python的數據結構來表示,比較合適的數據結構是python的字典。這樣做有如下的好處
- 統一初始化一些需要在多個用例之間共享的數據
- 可以在初始化的時候做一些數據的處理工作,比如過濾一些無效數據等
Test fixture最簡單的實現方式是通過自定義下面的2個方法:
TestCase.setUp
方法在每個測試方法運行之前都會運行一次,適合為每個用例都初始化一遍數據TestCase.tearDown
方法在每個測試方法運行之後都會運行一次,適合為每個用例都清理一遍數據
代碼
新建名為test_password_1.py
的文本文件,輸入如下內容
import unittestnnclass PasswordTeseCase(unittest.TestCase):nn def setUp(self):n print(set up)n self.test_data = [n dict(name=jack, password=Iloverose),n dict(name=rose, password=Ilovejack),n dict(name=tom, password=password123)n ]nn def test_week_password(self):n for data in self.test_data:n passwd = data[password]nn self.assertTrue(len(passwd) >= 6)nn msg = "user %s has a weak password" %(data[name])n self.assertTrue(passwd != password, msg)n self.assertTrue(passwd != password123, msg)nn def test_dummy(self):n passnnif __name__ == __main__:n unittest.main()n
運行
在命令行里輸入 python test_password_1.py
來運行用例,結果如下
$ python test_password_1.pynset upn.set upnFn======================================================================nFAIL: test_week_password (__main__.PasswordTeseCase)n----------------------------------------------------------------------nTraceback (most recent call last):n File "test_password_1.py", line 21, in test_week_passwordn self.assertTrue(passwd != password123, msg)nAssertionError: False is not true : user tom has a weak passwordnn----------------------------------nRan 2 tests in 0.001snnFAILED (failures=1)n
解釋一下
- setUp方法運行了2次,所以列印出了2次』set up』,這是因為上面的用例中有2個測試方法(2個方法名以test開頭的方法),setUp會在每個測試方法執行之前執行1次
- 由於用戶tom的密碼是弱密碼password123,所以上面的用例運行失敗了,列印出1個」F」,有幾個F就代表有幾個測試用例失敗
- 測試方法運行失敗時測試結果里會列印出失敗方法的方法名,因此好的測試方法名可以方便我們快速找出失敗用例
- 為了讓錯誤信息更加容易理解,我們經常會自定義斷言出錯提示消息,比如
msg = "user %s has a weak password" %(data[name])
。一旦斷言失敗,我們一眼就能看出是哪個用戶的密碼強度不夠
親自動手試一試
假設我們增加1條測試數據,如下所示
[n {"name":"jack","password":"Iloverose"},n {"name":"rose","password":"Ilovejack"},n {"name":"tom","password":"password123"},n {"name":"jerry","password":"password"}n]n
再運行上面的用例,觀察一下測試結果是否會有不同?如果沒有不同,那是為什麼?
西說自動化測試專欄作者
公眾號:testpu
推薦閱讀:
※HTTP介面功能自動化測試入門
※[貝聊科技]Appium 元素定位方式大揭秘
※如何學習自動化測試?
※Python實踐-Python自動化測試常用庫整理
※性能測試基礎