UI自动化测试-数据驱动(ddt)

UI⾃动化测试-数据驱动(ddt)
在不使⽤ddt的情况下,我们是完全可以实现UI⾃动化测试⽤例的,如下,我编写了⼀条成功⽤例,⼀条失败⽤例pages⽬录下新建home_page.py⽂件(这⾥⾯放的是登录后的页⾯操作),代码如下:
from selenium.webdrivermon.by import By
from setting import config
from selenium.webdriver import Chrome
from selenium.webdriver.support import expected_conditions as when
from selenium.webdriver.support.wait import WebDriverWait
class HomePage:
url = config.host + 'Main/index.html'
def __init__(self, browser: Chrome):
self.browser = browser
def load(self):
非诚勿扰2 诗
"""加载页⾯"""
(self.url)
def is_loaded(self, timeout=10):
"""页⾯已经被加载"""
# ⽤显性等待等待url包含self.url
return WebDriverWait(self.browser, timeout).until(when.url_contains(self.url))
def get_username(self):
"""获取登录后的⽤户名称"""
el = self.browser.find_element(By.CSS_SELECTOR, '.avatar')
_attribute('title')
login_data.py代码修改如下:
login_fail = {'username': 'aaa', 'password': '123', 'expected': '密码有效长度是6到30个字符'}
login_success = {'username': '186********', 'password': '123456', 'expected': '沫沫'}
conftest.py代码修改如下:
import pytest
import os曹素华
from selenium import webdriver
from setting import config
from pages.login_page import LoginPage
from pages.home_page import HomePage
driver = os.path.join(config.driver_dir, '')
# 打开浏览器
def get_browser():
# 因为要在测试⽤例后执⾏闭关浏览器,因为不要使⽤with的打开⽅式    browser = webdriver.Chrome(executable_path=driver)
browser.implicitly_wait(5)
browser.maximize_window()
return browser
# 设置夹具
@pytest.fixture()
def browser():
driver = get_browser()
yield driver
driver.quit()
# 依赖上⼀个夹具(上⼀个夹具是这个夹具的前置条件)
@pytest.fixture()
def login_page(browser):
return LoginPage(browser)
@pytest.fixture()
def home_page(browser):
return HomePage(browser)
⾃动化测试⽤例代码修改如下:
from data.login_data import login_fail, login_success
class TestSignIn:
def test_sing_in_failed(self, login_page):
"""测试登录失败"""
# 数据
username = login_fail['username']
大功率激光发射器password = login_fail['password']
expected = login_fail['expected']
# 获取实际结果
login_page.load()
login_page.login(username, password)
actual = _error_tips()
# 断⾔
assert expected == actual
def test_sing_in_success(self, login_page, home_page):
"""测试登录成功"""
# 数据
username = login_success['username']
password = login_success['password']
expected = login_success['expected']
# 获取实际结果
login_page.load()
login_page.login(username, password)
# 断⾔
# 断⾔登录后的url
assert home_page.is_loaded()
# 断⾔登录后的⽤户名称
日本空间
assert _username() == expected
运⾏结果:
总结:
1. 页⾯不同要编写不同的类,来进⾏存放,这样好维护代码
2. 要新增⼀个home_page的夹具,因为返回的内容不同
3. 登录后url的变更是需要设置时间等待,否则取到的url是登录前的
什么是ddt就不介绍了,在接⼝⾃动化测试中已经介绍过了,在UI⾃动化测试中使⽤ddt的成本是⽐接⼝要⾼的,因为接⼝⾃动化测试⽤例中,所有的测试步骤是⼀致的,只是测试数据不同,但在UI⾃动化测试⽤例中,测试步骤并没有完全⼀致,因此可以使⽤ddt,但编写过程相对接⼝复杂⼀些
小文件存储下⾯来介绍⼀下具体的实现过程:
修改login_data.py代码如下:
# 单条登录失败数据
login_fail = {'username': 'aaa', 'password': '123', 'expected': '密码有效长度是6到30个字符'}
# 单条登录成功数据
login_success = {'username': '186********', 'password': 'lijiao921010', 'expected': '沫沫'}
# 多条登录失败数据
login_fail_list = [
{'username': 'aaa', 'password': '123', 'expected': '密码有效长度是6到30个字符'},
{'username': 'aaa', 'password': '12345', 'expected': '密码有效长度是6到30个字符'}
]
修改⾃动化测试⽤例代码如下:
from data.login_data import login_success, login_fail_list
import pytest
class TestSignIn:
@pytest.mark.parametrize('login_fail', login_fail_list)
def test_sing_in_failed(self, login_fail, login_page):
"""测试登录失败"""
# 数据江苏南钢龙
username = login_fail['username']
password = login_fail['password']
expected = login_fail['expected']
# 获取实际结果
login_page.load()
login_page.login(username, password)
actual = _error_tips()
# 断⾔
assert expected == actual
def test_sing_in_success(self, login_page, home_page):
"""测试登录成功"""
# 数据
username = login_success['username']
password = login_success['password']
expected = login_success['expected']
# 获取实际结果
login_page.load()
login_page.login(username, password)
# 断⾔
# 断⾔登录后的url
assert home_page.is_loaded()
# 断⾔登录后的⽤户名称
assert _username() == expected
运⾏结果:
总结:
UI/web⾃动化测试数据驱动:使⽤分组的⽅式(就是相同测试步骤的数据放到⼀个列表中)
loging_fail = [ ]  驱动  test_sing_in_failed
loging_success = [ ]  驱动  test_sing_in_success
为什么UI⾃动化测试中,我们没有把数据放到excel表格中,因为使⽤表格,需要把多设置⼏个sheet页来存储测试⽤例,如:提⽰密码长度错误信息的放到sheet1中,提⽰密码错误信息的放到放到表格中,我们还是需要把表格中的数据读取出来,转换成列表
嵌套字典的格式来操作,因此使⽤.py模块来进⾏存储⽐较易管理

本文发布于:2024-09-22 05:41:03,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/124456.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:测试   动化   数据   登录   夹具   等待
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议