python3.5+selenium3.4自動化測試9_selenium框架2.0-unittest(上)

框架2.0_unittest

今天講的是unittest單元測試框架,在框架1.0的學習中我們不需要去理解什麼類和函數,但是到2.0就要開始接觸類的繼承和函數的調用。

先上個之前的例子

# _*_ coding: utf-8 _*_
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime

import HTMLTestRunner


class LoginReset(unittest.TestCase):
    def setUp(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.base_url="http://192.168.1.131"
        self.verificationErrors=[]
        self.accept_next_alert=True

    def test_loginreset(self):
        '''
        1.2.驗證登陸界面的reset按鈕
        '''
        driver=self.driver
        driver.get(self.base_url+"/")



        try:




            driver.implicitly_wait(10) #智能等待10

            driver.find_element_by_id("username").send_keys("admin")#見圖一by_id

            driver.find_element_by_id("secret").send_keys("password")

            driver.find_element_by_id("reset_button").click()


            time.sleep(10)#等待10


        except:

            driver.get_screenshot_as_file(u"D:/python/selenium/error_png/1.login/1.2/%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])


    def tearDown(self):
        time.sleep(3)
        self.driver.quit()
        self.assertEqual([],self.verificationErrors)
if __name__=="__main__":
    suite=unittest.TestSuite()
    suite.addTest(LoginReset("test_loginreset"))

    unittest.TextTestRunner().run(suite)

掌握的技能

1.unittest框架構成,多看下selenium ide錄製後的腳本

2.unittest可以理解爲由TestCase+TestResult這兩個模塊構成,通過執行的是TestCase中的run方法,並把結果給TestResult(或它的子類)

3.setUp()和setUp()

setUp()方法中進行測試前的初始化工作,
tearDown()方法中執行測試後的清除工作。
setUp()和tearDown()都是TestCase類中定義的方法 ,這個地方從代碼中可以看出很多時候是在執行打開瀏覽器和關閉瀏覽器的操作,但是這個是每執行一個case都要執行一次,這個地方可以思考如何把這兩個也寫到一個繼承testcase類的類,然後我們的框架在繼承這個類,這部分後面詳解

4.setUpClass()和tearDownClass()

setUpClass()在一個測試類中在所有test開始之前,執行一次且必須使用到Testsuite(只有在TestSuite的run方法裏面纔對其調用)tearDownClass()在一個測試類中在所有test結束之後,執行一次且必須使用到Testsuite(只有在TestSuite的run方法裏面纔對其調用),簡單說這兩個函數就是爲了執行所有case過程中只打開一次瀏覽器和關閉一次瀏覽器,跟setup()和tearDown()有區別

5.TestSuite可以理解是包含所有測試用例的一個容 器

6.TestResult和HTMLTestRunner,TextTestRunner,

每次執行用例時,都會把執行結果保存到TestResult中,
textTestRunner這個類,在開始就使用了類TextTestResult,而這個類也是繼承TestResult,而後在執行的過程中最終把TextTestResult實例對象傳遞給TestCase的run方法;
HTMLTestRunner模塊也是在繼承在TestResult類的基礎上的

7.創建多個以test開頭的測試用例進行測試,這個可以查看之前寫過python3.5+selenium3.4自動化測試4_隨機組合的用戶名和密碼登陸

補充下第3點後面的重新構建一個類和調用,剛纔在前文的代碼就可以分爲兩部分,先創建一個mytest.py文件

# _*_ coding: utf-8 _*_
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime



class MyTest(unittest.TestCase):
    """
    The base class is for all testcase.
    """
     def setUp(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.base_url="http://192.168.1.131"
        self.verificationErrors=[]
        self.accept_next_alert=True

    def tearDown(self):
        time.sleep(3)
        self.driver.quit()
        self.assertEqual([],self.verificationErrors)

繼承Mytest這個類

# _*_ coding: utf-8 _*_
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime

import HTMLTestRunner
import mytest


class LoginReset(mytest.Mytest):


    def test_loginreset(self):
        '''
        1.2.驗證登陸界面的reset按鈕
        '''
        driver=self.driver
        driver.get(self.base_url+"/")



        try:




            driver.implicitly_wait(10) #智能等待10

            driver.find_element_by_id("username").send_keys("admin")#見圖一by_id

            driver.find_element_by_id("secret").send_keys("password")

            driver.find_element_by_id("reset_button").click()


            time.sleep(10)#等待10


        except:

            driver.get_screenshot_as_file(u"D:/python/selenium/error_png/1.login/1.2/%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])



if __name__=="__main__":
    suite=unittest.TestSuite()
    suite.addTest(LoginReset("test_loginreset"))

    unittest.TextTestRunner().run(suite)

這樣就可以在任意時候統一修改瀏覽器和網址

用實際用例代碼長期更新,介紹selenium使用中的知識小點,希望大家關注

關注微信公衆號:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章