1 自动化测试框架
应用框架的作用:
1、降低冗余
2、便于维护和理解
3、高内聚低耦合
4、便于公司管理、便于团队管理(统一规范等)
自动化测试设计模式一般基于两种设计模式:关键字驱动、页面对象模型
页面对象模型:简称POM/PO,将系统的所有业务流程,以页面的对象进行封装和处理,在进行调用,实现业务自动化测试。
结构分层(数据与代码分离,逻辑代码和测试代码分离)
- 基类:提供基础的函数,给所有页面对象执行
- 页面对象类:封装各个页面,生成页面对象,便于调用
- 测试用例层:基于POM的所有内容实现的测试用例
- 测试数据层:提供所有测试过程中所需的数据内容
WebUI自动化测试是基于selenium来实现的
基于关键字驱动,所有元素信息保存在文件中;基于POM,所有元素信息与页面对象关联
示例
目录清单
(1)基类
class BasePage:
# 构造函数
def __init__(self,driver):
self.driver = driver
# 访问URL
def open(self, url):
self.driver.get(url)
# 退出
def quit(self):
self.driver.quit()
# 元素定位
def locator(self, loc):
return self.driver.find_element(*loc)
# 输入
def input(self, loc, text):
self.locator(loc).send_keys(text)
# 点击
def click(self, loc):
self.locator(loc).click()
(2)页面对象类
登录页面对象类
"""
登录页面对象类
"""
from selenium import webdriver
from selenium.webdriver.common.by import By
from base.base_page import BasePage
class LoginPage(BasePage):
# URL
url = "http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html"
# 页面元素
username = (By.NAME,'accounts')
pwd = (By.NAME,'pwd')
button = (By.XPATH,'/html/body/div[4]/div/div[2]/div[2]/form/div[3]/button')
# 登录业务实现
def login(self,user,pwd):
self.open(self.url)
self.input(self.username,user)
self.input(self.pwd,pwd)
self.click(self.button)
(3)测试用例层
"""
测试用例层,将所有的测试流程以及测试用例的设计,都放置这个层级中
"""
import pytest
from selenium import webdriver
from common.yaml_util import YamlUtil
from page_object.login_page import LoginPage
class TestCases:
# 测试用例
@pytest.mark.parametrize('data', YamlUtil().get(r'../data/login.yml'))
def test_login(self, data):
driver = webdriver.Chrome(r"E:\chromedriver_win32\chromedriver.exe")
lp = LoginPage(driver)
lp.login(data[&#