在使用自動化測試登錄頁面前,先學習一下理論。什麼是HTML測試報告?爲什麼要生成測試報告?以及生成測試報告的方式。
一、什麼是HTML測試報告
概念:HTML測試報告就是執行完測試用例後以HTML(網頁)方式將執行結果生成報告。
二、爲什麼要生成測試報告
- 測試報告是本次測試目的最終體現形態
- 測試報告內包含了由本次測試用例的詳情
三、HTML生成報告的方式
- Export Test Results (UnitTest自帶的)
- HTML TestRunner(Python 標準庫單元測試模塊的擴展)
四、Export Test Results的使用
當我們在使用UnitTest庫的時候,運行代碼,會自動調用Export Test Results插件:
代碼
import unittest
def add(x, y):
return x+y
class TestCase_01(unittest.TestCase):
def test_01(self):
# 斷言相等,arg1等於arg2實際結果
self.assertEqual(2, add(1, 1))
def test_02(self):
# 斷言arg1是arg2的子串,如果不是返回fail
self.assertIn("ac","abcdefg")
if __name__ == '__main__':
unittest.main()
Export Test Results工具使用
測試報告截圖,如下:
五、HTML TestRunner的使用(日常使用重點)
HTML TestRunner 是 Python 標準庫單元測試模塊的擴展。它生成易於使用的 HTML 測試報告。
爲什麼說它是日常使用的重點呢?既然是自動化測試,那麼你在運行之後再點一下是什麼鬼?如果有一百個用例文件需要測試呢?點一百次?這是不符合日常使用的。所以,Python封裝了一個單元測試模塊的擴展HTML TestRunner,易於使用的 HTML 測試報告。
-
HTML TestRunner下載
python2版下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html,首先要下 HTMLTestRunner.py 文件,將下載的文件放入…\python\Lib目錄下)。
python3版下載地址鏈接:https://pan.baidu.com/s/1prHP_QwcRCnWoQnL3kb0aw ,提取碼:dcnp ,因爲我是python3版本,而在使用過程中,我是直接調用的,並沒有放入…\python\Lib目錄下)。 -
創建一個cases文件夾,在文件內創建兩個用例(將下代碼複製兩份即可):
代碼
import unittest
def add(x, y):
return x+y
class TestCase_01(unittest.TestCase):
def test_01(self):
# 斷言相等,arg1等於arg2實際結果
self.assertEqual(2, add(1, 1))
def test_02(self):
self.assertIn("ac","abcdefg")
def test_03(self):
# 斷言相等,arg1等於arg2實際結果
self.assertEqual(3, add(1, 1))
- 創建一個".py",調用HTML TestRunner文件,代碼如下:
注意點:因爲我HTMLTestRunner.py放在tool文件下,使用".tools.HTMLTestRunner"調用時,加".“有歧義會報錯,所以在運行之前可以保留”.",還能有提示,在運行時刪除,就不會報錯
# 調用unittest模塊
import unittest
# 因爲我HTMLTestRunner.py放在tool文件下,使用".tools.HTMLTestRunner"調用時,
# 加"."有歧義會報錯,所以在運行之前可以保留".",還能有提示,在運行時刪除,就不會報錯
from tools.HTMLTestRunner import HTMLTestRunner
# defaultTestLoader搜索cases目錄下所有py文件,*表示匹配所有文件
suite = unittest.defaultTestLoader.discover("./cases", pattern="*.py")
with open("./reports/測試報告.html", "wb") as f:
runner = HTMLTestRunner(stream=f,title="測試報告",description="測試用例")
runner.run(suite)
- 運行結果,保存,在瀏覽器中打開:
六、使用HTML TestRunner實現自動化測試,並輸出測試報告
- 先作準備工作,創建login文件夾,在login文件夾下分別創建reports、image、tools文件夾,reports存放測試報告,image存放每個實例的截圖(爲減少扯淡保存證據),tools存放HTML TestRunner.py文件。
- 先編寫自動化測試腳本代碼login.py文件:
代碼如下:
from selenium import webdriver
import unittest
import time
# 以參數的形式傳入瀏覽器、用戶名、密碼
def iwebshop_login_test(driver=None, username=None, password=None):
# 測試網址
driver.get("http://127.0.0.1:8088/iwebshop")
# 搜索“登錄”,點擊
driver.find_element_by_link_text("登錄").click()
driver.implicitiy_wait(5)
# 以name屬性定位用戶名,輸入值
driver.find_element_by_name("login_info").send_keys(username)
# 以name屬性定位密碼,輸入值
driver.find_element_by_name("password").send_keys(password)
# 點擊class_name屬性,對應的是登錄
driver.find_element_by_class_name("submit_login").click()
# 暫停1秒
time.sleep(1)
# 截圖,保存到image
driver.save_screenshot("./image/" + username + password + "登錄.png")
return driver.find_element_by_class_name("loginfo").test
# 下面爲測試用例,每個實例修改用戶名和密碼即可
class TestCase_01(unittest.TestCase):
def test_login01(self):
# 定義瀏覽器
self.driver = webdriver.Chrome()
# 用戶名爲zhangsan
username = "zhangsan"
# 斷言arg1是arg2的子串
self.assertIn(username, iwebshop_login_test(self.driver, username, "123123"))
# 退出
self.driver.quit()
def test_login02(self):
# 定義瀏覽器
self.driver = webdriver.Chrome()
# 用戶名爲lisi
username = "lisi"
# 斷言arg1是arg2的子串
self.assertIn(username, iwebshop_login_test(self.driver, username, "123123"))
# 退出
self.driver.quit()
def test_login03(self):
# 定義瀏覽器
self.driver = webdriver.Chrome()
# 用戶名爲lisi
username = "zhangsan1"
# 斷言arg1是arg2的子串
self.assertIn(username, iwebshop_login_test(self.driver, username, "1123123"))
# 退出
self.driver.quit()
- 編寫測試報告生成腳本文件HTML_TestRunner.py,代碼如下:
代碼
import unittest
from .tools.HTMLTestRunner import HTMLTestRunner
from .login import TestCase_01
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestCase_01))
with open("./reports/登錄測試.html", "wb") as f:
runner = HTMLTestRunner(stream=f, title="iwebshop登錄測試", description="iwebshop登錄是否成功的測試")
runner.run(suite)
- 運行結果,保存,在瀏覽器中打開查看:
a. 運行腳本,實例的截圖:
b. 測試報告截圖,zhangsan1實例失敗,如下:
七、最後
自動化腳本在工作中可以幫助測試人員節省很多的時間和精力,代碼相當簡單,假設我們有一百個用例需要測試,複製粘貼就完事了,運行最多幾分鐘就ok。最後,你們學會了嗎?
注:文中部分描述可能出現實例和用例兩種叫法,其實是一樣的,在Python中可以叫實例,而在測試中叫用例。