您的当前位置:首页正文

Python+Selenium自动化测试框架

2024-11-09 来源:个人技术集锦

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()

框架缺点:

未能将测试数据及站点配置信息进行分离,如果站点数据有改动,或者页面元素有改动,依赖页面元素的测试用例都需要改动,维护不方便,欢迎大家提出改进意见

Top