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() |
框架缺点:
未能将测试数据及站点配置信息进行分离,如果站点数据有改动,或者页面元素有改动,依赖页面元素的测试用例都需要改动,维护不方便,欢迎大家提出改进意见