測試套件中的addTest


addTest:用例按順序執行

問題:

  1. 我們知道測試用例的執行順序是根據測試用例名稱順序執行的,在不改變用例名稱的情況下,我們怎么來控制用例執行的順序呢?
  2. 一個測試文件,我們直接執行該文件即可,但如果有多個測試文件,怎么進行組織,總不能一個個文件執行吧?

要解決上面兩個問題,我們就要用到測試套件(TestSuite)了

代碼如下:

import unittest
import warnings
from selenium import webdriver
from time import sleep
# 驅動文件路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\IEDriverServer.exe'

class CmsLoginTest(unittest.TestCase):
def setUp(self):
# 這行代碼的作用是忽略一些告警打印
warnings.simplefilter("ignore", ResourceWarning)
self.driver = webdriver.Ie(executable_path=driverfile_path)
self.driver.get("http://172.21.13.83:28080/")

def tearDown(self):
self.driver.quit()

def test_login1(self):
'''用戶名、密碼為空'''
self.driver.find_element_by_css_selector("#imageField").click()
error_message1 = self.driver.find_element_by_css_selector("[for='loginName']").text
error_message2 = self.driver.find_element_by_css_selector("[for='textfield']").text
self.assertEqual(error_message1, '用戶名不能為空')
self.assertEqual(error_message2, '密碼不能為空')

def test_login3(self):
'''用戶名、密碼正確'''
self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("autotest")
self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("111111")
self.driver.find_element_by_css_selector("#imageField").click()
sleep(1)
self.driver.switch_to.frame("topFrame")
username = self.driver.find_element_by_css_selector("#nav_top>ul>li>a").text
self.assertEqual(username,"autotest")

def test_login2(self):
'''用戶名正確,密碼錯誤'''
self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("autotest")
self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("123456")
self.driver.find_element_by_css_selector("#imageField").click()
error_message = self.driver.find_element_by_css_selector(".errorMessage").text
self.assertEqual(error_message, '密碼錯誤,請重新輸入!')

def test_login4(self):
'''用戶名不存在'''
self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("test007")
self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("123456")
self.driver.find_element_by_css_selector("#imageField").click()
error_message = self.driver.find_element_by_css_selector(".errorMessage").text
self.assertEqual(error_message, '用戶不存在!')


if __name__ == "__main__":
# 構造測試套件
suite = unittest.TestSuite()
suite.addTest(CmsLoginTest("test_login1"))
suite.addTest(CmsLoginTest("test_login2"))
suite.addTest(CmsLoginTest("test_login4"))
suite.addTest(CmsLoginTest("test_login3"))
# 執行測試
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
注:verbosity 參數可以控制輸出的錯誤報告的詳細程度,默認是 1;如果設為 0,則不輸出每一用例的執行結果;如果設為 2,則輸出詳細的執行結果

一個一個地添加測試用例到測試套件中,有點麻煩,其實我們可以把要執行的測試用例用個列表來管理,然后再把這個列表添加到測試套件中,如下代碼:

if __name__ == "__main__":
    # 構造測試套件
    suite = unittest.TestSuite()
    test_cases = [CmsLoginTest("test_login1"),CmsLoginTest("test_login2"),CmsLoginTest("test_login4"),
                  CmsLoginTest("test_login3")]
    suite.addTests(test_cases)
    # 執行測試
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

下面我們就來講講多個文件的測試用例組織。

假如我有兩個系統的登錄需要測試,測試用例分別放在兩個文件中(cmslogin.py,smelogin.py),現在我需要把這兩個文件中的用例添加到一個測試套件中來執行,為此我們要重新建立一個叫run_all.py的文件

import unittest
from cmslogin import CmsLoginTest
from smelogin import SmeLoginTest

if __name__ == "__main__":
    # 構造測試套件
    suite = unittest.TestSuite()
    test_cases = [CmsLoginTest("test_login1"),CmsLoginTest("test_login2"),CmsLoginTest("test_login4"),
                  CmsLoginTest("test_login3"),SmeLoginTest("test_login1"),SmeLoginTest("test_login2")]
    suite.addTests(test_cases)
    # 執行測試
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)
還可以用addTests + TestLoader方法來添加用例,但是這種方法是無法對case進行排序的
import unittest
from cmslogin import CmsLoginTest
from smelogin import SmeLoginTest

if __name__ == "__main__":
    # 構造測試套件
    suite = unittest.TestSuite()
    # 第一種方法:傳入'模塊名.TestCase名'
    suite.addTests(unittest.TestLoader().loadTestsFromName('cmslogin.CmsLoginTest'))
    suite.addTests(unittest.TestLoader().loadTestsFromName('smelogin.SmeLoginTest'))
    # 這里還可以把'模塊名.TestCase名'放到一個列表中
    suite.addTests(unittest.TestLoader().loadTestsFromNames(['cmslogin.CmsLoginTest','smelogin.SmeLoginTest']))
    # 第二種方法:傳入TestCase
    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(CmsLoginTest))
    # 執行測試
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)






免責聲明!

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



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