第二個UI腳本--Python+selenium之unittest+HTMLtestRunner及python的繼承


前面有一篇對於常見元素的識別和操作的python自動化腳本,這一篇就接着聊下python的類繼承,已經它的第三款unittest框架,和報告收集包HTMLtestRunner的應用。

還是直接上代碼吧。

unittest和HTMLtestrunner的應用:

# coding = utf-8
import time
import unittest
import HTMLTestRunner
import os
import sys
from selenium import webdriver

# 繼承unittest類
class testClass(unittest.TestCase):
    # unittest提供的初始化方法,setup,可以在這里進行一些初始化的准備工作
def setUp(self): print "setup" self.driver=webdriver.Firefox() self.driver.get("http://www.baidu.com") time.sleep(3)
    # 下面是測試方法
def testsearch2(self): input=self.driver.find_element_by_id('kw') search=self.driver.find_element_by_id('su') input.send_keys("byebye") search.click()
def testsearch(self): input=self.driver.find_element_by_id('kw') search=self.driver.find_element_by_id('su') input.send_keys("hello") search.click() print "assertion" self.assertTrue(search.is_displayed(),"baidu yixia should display")
    # 運行結束后的處理動作
def tearDown(self): print 'test down...' #driver.quit() self.driver.close() if __name__ == '__main__': #unittest.main(), 這里要說明一下, 如果測試方法是以test開頭的,那么unittest可以識別出來,這里就可以直接調用它的main方法來執行所有測試方法了,運行順序就是按測試方法的名字排序 #unittest.TestCase.assertTrue()

    #這塊是獲取項目路徑,后面在生成report時會放到改目錄下 current_path=os.getcwd() print 'current path: ',current_path project_path=os.path.dirname(current_path) print "project path:",project_path
    #這塊是通過unittest的testsuite方式來組織測試 testsuite
=unittest.TestSuite() #testsuite.addTest(testClass("testsearch2")) testsuite.addTest(testClass("testsearch")) temp=str(time.time()) filedir=project_path+"//report//"+temp os.makedirs(filedir) filename="//pyresult.html" filepath=filedir+filename fp=file(filepath,'wb')

    # 調用HTMLtestrunner來執行腳本並生成測試報告,html格式的 runner
=HTMLTestRunner.HTMLTestRunner(stream=fp,title='report',description='demo') runner.run(testsuite)

注: 上面帶#號的都是注釋, 由於直接編輯的原因,所以他沒有顯示成綠色,大家如果要復制出來,記得注意調整一下。

 

Python類的繼承:

#coding=utf-8
from pyse import Pyse
from time import sleep

class Page(object):
    #login_url = 'http://www.126.com'

    def __init__(self, selenium_driver, base_url, parent=None):
        self.base_url = base_url
        self.driver = selenium_driver
        self.timeout = 30
        self.parent = parent

    def _iopen(self,url):
        #url = self.base_url + url
        self.base_url=url
        self.driver.open(url)
        assert self.on_page(),'Did not land on %s' % url

    def iopen(self):
        self._iopen(self.url)

    def on_page(self):
        print 'get_url is: ',self.driver.get_url()
        print 'base_url is: ',self.base_url
        return self.driver.get_url() == self.base_url

class login(Page):
    def systemout(self):
        print 'pass'

def testlogin():
    driver=Pyse('ff')
    print 'get in'
    url='http://www.baidu.com/'
    lg=login(driver,'')
    lg._iopen(url)

if __name__=='__main__':
    testlogin()

這塊是python類的繼承,page繼承根object類,然后login繼承了page類,然后login就可以使用page類的方法了。

這里要說明的是,page類有2個方法,一個是_iopen(), 另一個是iopen(), 他們的區別就是,在用login的對象調用時:

調用iopen,不需要url參數,但是需要login類有url的成員,因為在其父類page里的self.url其實就是調用login自己的url成員。

而調用_iopen時,可以直接傳遞一個url參數。

 


免責聲明!

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



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