首页 > 编程知识 正文

自动化框架有哪几种,web端ui自动化测试框架

时间:2023-05-04 10:40:17 阅读:132496 作者:1202

1 .概要po模式是martin flower提出的ui测试模式。 selenium.dev也详细描述了该模型。 这种思路是将页面的元素操作封装到类中的方法,在测试过程中不需要关注页面的结构,而只需要关注要执行的操作。

在不使用po模式之前,测试函数基本上是如下代码。

这样的代码实现起来非常快速方便,但维护起来很麻烦。 首先,当前页面更改后,需要到处检查哪些代码需要更改,其次,阅读代码时只知道执行了什么操作,但不知道具体做了什么业务。

运行po模式时,代码分为page类和测试函数。 page类代码:

测试函数的写法可以更简单。

PO模式将页面逻辑与测试逻辑分开,在页面发生变化时无需修改车hi用例代码,具有以下优点

PO模式的优点:

页面逻辑和测试逻辑的分离、可维护性、可读性、可扩展性和可重用性的缺点:

PO封装有以下原则。 如果遵守的头发能带来更好的结果,请访问selenium.wiki。

页面包中不应该包含断言或测试。 否则,页面操作和测试操作无法分离。 可以放在页面上的唯一测试是确定是否找到元素。 不需要封装所有页面操作,需要封装什么? 您也可以使用多个页面重叠的组件方法,如导航对象和footer对象,来封装页面。 使用组件可以提高代码的重用性。 封装方法不应返回self、其他po,或基础数据结构、字符串、数据、元素对象等。 封装login_failed、login_success等多个方法,同一操作会导致不同的结果。 2 .实例创建ui自动化测试用例的过程:第一步,手动测试(设计测试用例) )。

优化方向:更好用更容易理解; 容易维护; 更通用; 扩展性强。

未使用PO模式之前:

fromseleniumimportwebdriverfromselenium.web driver.com mon.byimportbyclasstestsignin 3: deftest _ sign _ in (self ) 3333333333333650 输入user/login.html2,用户名: aaa、name=account 3、密码123、name=pass 4,然后单击登录按钮, CSS=.BTN-BTN : return : ' ' username=' AAA ' password=' 123 ' expected='密码的有效长度为6到30个字符' withwebdriver.ccord chrome driver 96.exe ' (as browser : browser.implicitly _ wait (5) browser.maximize_window ) # 输入访问URL=' https://log in.html ' browser.get (URL )用户名username _ El=browser.find _ element ) by.name, ' account'(username_El.clear ) username_El.send_keys )密码输入browser.find _ element by.name ' pass . send_keys(password )单击以登录到browser.find _ element (by.CSS _ selector,'.btn-btn ' ).click )

page类中的代码:

#封装的好处: # 1、测试函数中代码更简洁# 2、可读性强# 3、页面操作封装完成、隔离管理:前端接口变化、维护方便、只设置页面操作的函数#修改用例数据时,只需要维护数据模块。 或者测试逻辑改变后,只需修改测试用例函数。 # 4、PO页面的操作是可以重用from selenium.web driver.com mon.byimportbyclasslogin

Page: url = 'https://v4.ketangpai.com/User/login.html' def __init__(self, browser): self.browser = browser def load(self): """加载页面""" return self.browser.get(self.url) def login(self, username, password): """登录""" username_el = self.browser.find_element(By.NAME, 'account') username_el.clear() username_el.send_keys(username) # 输入密码 self.browser.find_element(By.NAME, 'pass').send_keys(password) # 点击登录 self.browser.find_element(By.CSS_SELECTOR, '.btn-btn').click() def get_error_tips(self): return self.browser.find_element(By.CSS_SELECTOR, '.error-tips').text

夹具conftest.py中代码:

import pytestfrom selenium import webdriverfrom pages.login_page import LoginPagefrom setting import config"""conftest.py存储所有的夹具好处:在测试用例中使用夹具时不需要导入"""def get_browser(): """获取浏览器""" browser = webdriver.Chrome(executable_path=config.driver_path) browser.implicitly_wait(5) browser.maximize_window() return browser@pytest.fixture()def browser(): driver = get_browser() yield driver driver.quit()# browser()这个夹具是login_page()夹具的前置夹具@pytest.fixture()def login_page(browser): return LoginPage(browser)

测试函数中代码(测试数据放在单独的文件内):

from data.login_data import login_failclass TestSignIn: def test_sign_in(self, login_page): """测试登录功能""" # 1、隔离测试数据,当需要添加,修改数据时可以在单独的模块中修改 username = login_fail['username'] password = login_fail['password'] expected = login_fail['expected'] # 2、浏览器管理应该可以重复使用,单独封装 # 3、需要把驱动进行隔离管理,1.可以存储多个浏览器驱动,2.可以灵活配置,想用哪个用哪个 # 4、base url 域名,ip # 访问url # url = config.host + 'User/login.html' # browser.get(url) login_page.load() # 5、登录操作可以重复使用:该项目通用 # 6、登录操作的特殊性:可以记住状态,token,session,cookie # po模式:页面操作和测试用例隔离 # 输入用户名 # login_page = LoginPage(browser) login_page.login(username, password) # 获取文本 actual = login_page.get_error_tips() # 断言 assert actual == expected

整理后,测试函数中代码:

from data.login_data import login_failclass TestSignIn: def test_sign_in(self, login_page): """测试登录功能""" # 1、准备数据 username = login_fail['username'] password = login_fail['password'] expected = login_fail['expected'] # 2、获取实际结果 login_page.load() login_page.login(username, password) actual = login_page.get_error_tips() # 3、断言 assert actual == expected

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。