当前位置:网站首页>Page Object与数据驱动测试
Page Object与数据驱动测试
2022-06-29 18:29:00 【是乔乔啊】
数据驱动测试
即根据业务逻辑将测试数据从测试脚本中拆分出来,使其成为独立的变参,实现测试脚本在不同数据集合下高度复用的目的。
ddt库
python中的ddt库科技将测试中的变量参数化,其包含一组类和方法用于数据驱动测试。
pip install ddt
将之前淘宝登录的例子数据驱动化
import unittest
from ddt import ddt, data, unpack
from selenium import webdriver
from selenium.webdriver.common.by import By
@ddt
class HomePageTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
# create a new Firefox session
cls.driver = webdriver.Chrome()
cls.driver.implicitly_wait(30)
cls.driver.maximize_window()
# navigate to the application home page
cls.driver.get("https://www.taobao.com/")
@data(("login_id1", "pwd1"),("login_id2". "pwd2"))
@unpack
def test_register_new_user(self, login_id, pwd): # 参数声明
driver=self.driver
driver.find_element(By.LINK_TEXT, "亲,请登录").click() # 模拟点击
login_user = driver.find_element(By.ID, "fm-login-id")
login_password=driver.find_element(By.ID, "fm-login-password") # 定位密码框页面元素
# self.assertEqual("40", login_password.get_attribute("maxlength")) # 验证密码输入框最大长度
# 检查某个元素是否可见和可用
# self.assertTrue(login_password.is_displayed())
# self.assertTrue(login_password.is_enabled())
# 模拟用户输入和登录,注意:很多情况下会有滑块和验证码验证
login_user.send_keys(login_id) # 登录账号传参
login_password.send_keys(pwd) # 登录密码传参
login_button=driver.find_element(By.LINK_TEXT, "登录")
login_button.click()
通过外部文件数据驱动
1.通过csv文件传入数据
import csv # 导入csv包
import unittest
from ddt import ddt, data, unpack
from selenium import webdriver
from selenium.webdriver.common.by import By
def get_data(file_name):
rows=[]
data_file=open(file_name, "rb")
reader=csv.reader(data_file)
next(reader,None) # 跳过csv表头
for row in reader:
rows.append(row)
return rows
@ddt
class HomePageTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
# create a new Firefox session
cls.driver = webdriver.Chrome()
cls.driver.implicitly_wait(30)
cls.driver.maximize_window()
# navigate to the application home page
cls.driver.get("https://www.taobao.com/")
@data(*get_data("testdata.csv"))
@unpack
def test_register_new_user(self, login_id, pwd): # 参数声明
driver=self.driver
driver.find_element(By.LINK_TEXT, "亲,请登录").click() # 模拟点击
login_user = driver.find_element(By.ID, "fm-login-id")
login_password=driver.find_element(By.ID, "fm-login-password") # 定位密码框页面元素
# self.assertEqual("40", login_password.get_attribute("maxlength")) # 验证密码输入框最大长度
# 检查某个元素是否可见和可用
# self.assertTrue(login_password.is_displayed())
# self.assertTrue(login_password.is_enabled())
# 模拟用户输入和登录,注意:很多情况下会有滑块和验证码验证
login_user.send_keys(login_id) # 登录账号传参
login_password.send_keys(pwd) # 登录密码传参
login_button=driver.find_element(By.LINK_TEXT, "登录")
login_button.click()
2.通过excel文件传入数据
xlrd:读Excel文件库
xlwd:写Excel文件库
openpyxl:提供了Excel读写功能
import csv # 导入csv包
import unittest
from ddt import ddt, data, unpack
from selenium import webdriver
from selenium.webdriver.common.by import By
def get_data(file_name):
rows=[]
book=xlrd.open_workbook(file_name)
sheet=book.sheet_by_index(0)
for row_idx in range(1, sheet.nrows):
rows.append(likst(sheet.row_values(row_idx,0,sheet.ncols)))
return rows
@ddt
class HomePageTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
# create a new Firefox session
cls.driver = webdriver.Chrome()
cls.driver.implicitly_wait(30)
cls.driver.maximize_window()
# navigate to the application home page
cls.driver.get("https://www.taobao.com/")
@data(*get_data("testdata.xlsx"))
@unpack
def test_register_new_user(self, login_id, pwd): # 参数声明
driver=self.driver
driver.find_element(By.LINK_TEXT, "亲,请登录").click() # 模拟点击
login_user = driver.find_element(By.ID, "fm-login-id")
login_password=driver.find_element(By.ID, "fm-login-password") # 定位密码框页面元素
# self.assertEqual("40", login_password.get_attribute("maxlength")) # 验证密码输入框最大长度
# 检查某个元素是否可见和可用
# self.assertTrue(login_password.is_displayed())
# self.assertTrue(login_password.is_enabled())
# 模拟用户输入和登录,注意:很多情况下会有滑块和验证码验证
login_user.send_keys(login_id) # 登录账号传参
login_password.send_keys(pwd) # 登录密码传参
login_button=driver.find_element(By.LINK_TEXT, "登录")
login_button.click()
page Object模式
在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织。
即创建一个对象来对应页面的一个应用。
优点如下:
- 抽象出对象,可以尽量降低修改页面代码对测的影响。
- 可以在多个测试用例中复用一部分测试代码。
- 测试代码变得更易读、灵活、可维护。
边栏推荐
- 《安富莱嵌入式周报》第271期:2022.06.20--2022.06.26
- 【网络是怎么连接的】第三章 探索集线器,交换机和路由器
- Error building SqlSession问题
- 6.29模拟赛总结
- Adobe Premiere foundation - sound adjustment (volume correction, noise reduction, telephone tone, pitch shifter, parameter equalizer) (XVIII)
- 保持jupyter notebook在终端关闭时的连接方法
- Us judge ruled that the former security director of Uber accused of covering up hacking must face fraud charges
- Fluent's MSH grid learning
- Error [warning] neural network information was performed on socket 'RGB', depth frame is aligned to socket
- Shandong University project training (VII) add navigation bar to select city
猜你喜欢

C Primer Plus Chapter 12_ Storage categories, links, and memory management_ Codes and exercises

Cannot retrieve repository metadata 处理记录

Anfulai embedded weekly report no. 271: June 20, 2022 to June 26, 2022

How to use the low code platform of the Internet of things for service management?

idea怎么使用?

Request header field XXXX is not allowed by access control allow headers in preflight response

jdbc_ Related codes

Adobe Premiere基础-不透明度(蒙版)(十一)

Error building SqlSession问题

Meta agent model can be migrated to resist attacks
随机推荐
WBF: new method of NMS post filter frame for detection task?
AMAZING PANDAVERSE:META”无国界,来2.0新征程激活时髦属性
深度学习---三好学生各成绩所占权重问题(2)
RocketMQ的tag过滤和sql过滤
【TcaplusDB知识库】TcaplusDB运维单据介绍
Data warehouse model layered ODS, DWD, DWM practice
Redis(一)--Redis入门(2)--Redis数据类型
报错Failed to allocate graph: MYRIAD device is not opened.
Fluent's MSH grid learning
garbage collector
markdown知识轻轻来袭
Adobe Premiere Basics - common video effects (corner positioning, mosaic, blur, sharpen, handwriting tools, effect control hierarchy) (16)
Anaconda installs and configures jupyter notebook remote
面试题 10.10. 数字流的秩
MySQL 企业级开发规范
保持jupyter notebook在终端关闭时的连接方法
Apache inlong million billion level data stream processing
My first experience of remote office | community essay solicitation
C Primer Plus Chapter 12_ Storage categories, links, and memory management_ Codes and exercises
Cannot retrieve repository metadata processing records