Python+Senium自動化測試框架,採用POM測試框架,將測試拆解成測試報告,測試組件,測試用例,測試方法,頁面元素及其動作。其中頁面元素及其動作將封裝到page類中,頁面元素的操作步驟放到testcase中,組成一條測試用例。
創建一個main方法,將test case放入test suit中,執行並生成測試報告。工程結構圖如下:
Base page的代碼如下:
from selenium.webdriver.support.wait import WebDriverWait
'''
這個類主要是完成所有頁面的一些公共方法的封裝
'''
class Page(object):
#初始化
def __init__(self,se_driver):
self.driver = se_driver
#定義open方法
def open(self,url):
self.driver.get(url)
self.driver.maximize_window()
#定義script方法,用於執行js腳本
def script(self,src):
self.driver.execute_script(src)
#重寫元素定位的方法
def find_element(self,*loc):
return self.driver.find_element(*loc)
def input_text(self, loc, text):
self.find_element(*loc).send_keys(text)
def click(self, loc):
self.find_element(*loc).click()
def get_title(self):
return self.driver.title
|
login page代碼如下:
from selenium.webdriver.common.by import By
import time
from pages.base_page import Page
class LoginPage(Page):
user_loc = (By.CSS_SELECTOR,".user > input")
password_loc = (By.CSS_SELECTOR,".pass > input")
submit_loc = (By.LINK_TEXT,"登 錄")
def click_link(self):
self.find_element(*self.link_loc).click()
time.sleep(3)
def run_case(self,value1,value2):
self.input_text(self.user_loc, value1)
self.input_text(self.password_loc, value2)
time.sleep(20)
self.click(self.submit_loc)
time.sleep(5)
|
test login代碼如下:
import unittest
from selenium import webdriver
from pages.login_page import LoginPage
import time
class TestLogin(unittest.TestCase):
''' 登錄測試 '''
def setUp(self):
self.url = "*************"
self.driver = webdriver.Chrome()
def tearDown(self):
time.sleep(5)
self.driver.quit()
# self.assertEqual([],self.verificationErrors)
def test_login(self):
''' 登錄系統 '''
sp = LoginPage(self.driver)
sp.open(self.url)
sp.run_case("3333","11212")
|
main代碼如下:
import unittest
import HTMLTestRunner
import time
#relate path
testcase_path = ".\\testcase"
def creat_suite():
uit = unittest.TestSuite()
discover = unittest.defaultTestLoader.discover(testcase_path,pattern="test_*.py")
for test_suite in discover:
# print(test_suite)
for test_case in test_suite:
uit.addTest(test_case)
return uit
suite = creat_suite()
now=time.strftime("%Y-%m-%d-%H%M%S")
filename='.\\report\\TestReprot'+now+'.html'
fp = open(filename,"wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title="測試結果",description="執行結果")
runner.run(suite)
fp.close()
|
框架缺點:
未能將測試數據及站點配置信息進行分離,如果站點數據有改動,或者頁面元素有改動,依賴頁面元素的測試用例都需要改動,維護不方便,歡迎大家提出改進意見