unittest框架及自動化測試

以前在公司作過自動化測試的知識分享,如今把它記錄下來。
 
•1、如何更好的編寫測試用例
•1.模塊化:將一些基礎的、共有的步驟代碼獨立爲單獨的模塊,使用時再調用。好處:可使代碼複用,減小代碼編寫,利於變更時維護。好比登陸,退出等操做。
•2.參數化:將參數變化的輸入,能夠讀取文件,或者產生隨機數。好比新增操做,不少時候要求數據惟一,參數化後能夠有效解決這個問題。
•2、如何方便的組織、運行測試用例
•1.用例的組織架構劃分清晰。這樣利於查找、維護
•2.命名規範。這樣便於識別哪些是測試用例
•3、用例執行結果的要求
•1.能導出結果,進行統計,並顯示錯誤
 
•3、Unittest模塊的簡單介紹
•   unittest是一個單元測試的工具,提供了一些方法來方便進行單元測試。咱們在這裏用到它主要是解決上面說的幾個問題,再概況一下就是
•一、提供用例組織與執行方法
•①unittest 所提供有 TestSuite()類,其中的addTtest()方法,能夠將命名規範的用例「組裝」起來(一個py文件能夠有幾個用例)
•②defaultTestLoader 類,discover() 方法能夠識別必定命名規則的文件,結合①就能夠將不一樣文件中所有的測試用例組裝好
•③TextTestRunner()類, 經過它下面的 run()方法來運行 suite 所組裝的測試用例
•二、提供比較方法
• 用例的執行,總會有預期結果。unittest提供了不少比較的方法,好比assertEqual(a, b),用法:assertEqual(first, second, msg=……..),這是相等的方法,最後的msg是當不相等時,提供的提示信息。

三、提供豐富的日誌、清晰的報告
  使用擴展HTMLTestRunner生出測試報告
 
4、實例
•文件結構:
•…/ program/ all_test.py
•                     login.py
•                     xitongguanli/ test_1.py
•                                        / test_2.py
•解釋:①all_test.py,是組裝、運行測試用例
•           ②login.py是一個獨立出來的登陸模塊
•           ③test開頭的文件,就是測試用例所在的文件
 
1.all_test.py
#coding=utf-8
import unittest
import HTMLTestRunner
import time

def creatsuite():
    testunit=unittest.TestSuite()
    #定義測試文件查找的目錄
    test_dir='F:\\python\\selemium\\program'
    #定義 discover 方法的參數
    discover=unittest.defaultTestLoader.discover(test_dir,
                                                 pattern ='test_*.py',
                                                 top_level_dir=None)
    #discover 方法篩選出來的用例,循環添加到測試套件中
    for test_suite in discover:
        for test_case in test_suite:
            testunit.addTests(test_case)
            print testunit
    return testunit
alltestnames = creatsuite() 
if __name__ == '__main__':
    now = time.strftime("%Y-%m-%d %H_%M_%S")
    filename = 'F:\\python\\selemium\\program\\'+now+'result.html'
    fp = file(filename,'wb')
    runner = HTMLTestRunner.HTMLTestRunner(
        stream = fp,
        title = u'測試報告',
        description = u'用例的執行狀況')
    
    runner.run(alltestnames)
    fp.close()

2.login.pycss

#coding=utf-8
from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")

def login():
    driver.find_element_by_xpath("//div/div/div[@id='u1']/a[7]").click()
    driver.find_element_by_css_selector("#TANGRAM__PSP_8__userName").clear()
    driver.find_element_by_css_selector("#TANGRAM__PSP_8__userName").send_keys("xxxx")
    driver.find_element_by_css_selector("#TANGRAM__PSP_8__password").send_keys("xxxxxxx")
    driver.find_element_by_css_selector("#TANGRAM__PSP_8__submit").click()

3.test_1.pyhtml

#coding=utf-8
from selenium import webdriver
import unittest, time, login
import random

random1 = random.randint(100000, 200000)

class MyTest(unittest.TestCase):
    u'''百度搜索用例'''

    def setUp(self):
        self.driver = login.driver
        #self.driver.maximize_window()
        #self.driver.implicitly_wait(10)
        #self.base_url = "http://www.baidu.com"

    def test_baidu(self):
        driver = self.driver
        login.login()
        time.sleep(2)
        #driver.get(self.base_url + "/")
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys(random1)
        driver.find_element_by_id("su").click()
        time.sleep(2)
        title = driver.title
        #self.assertEqual(title, random1+u"_百度搜索")
        
    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

 

 最後的結果是這樣子的:python

相關文章
相關標籤/搜索