所谓参数化,是指利用不同的测试数据来侧测试相同的测试场景,为了提高代码的复用性,增加代码效率而采用一种代码编写的方法,叫参数化,也就是数据驱动。
参数值为单个参数形式
参数值为组合参数形式
从函数中返回参数值
从文件中返回参数值
@data(
('test', '123', '密码错误'),
('admin', '1201', '没有此用户'),
('', '123', 'User Id不能为空'),
('test', '', 'password不能为空')
)
@unpack
def test_login_username_fail(self, username, password, message):
self.driver.get(self.url)
self.driver.find_element('id', 'username').clear()
self.driver.find_element('id', 'username').send_keys(username)
self.driver.find_element('id', 'password').clear()
self.driver.find_element('id', 'password').send_keys(password)
self.driver.find_element('xpath', '//input[@value="Login"]').click()
sign_text = self.driver.find_element('xpath', f'//div[contains(text(), "{message}")]').text
# self.imgs.append(self.driver.get_screenshot_as_base64()) # 保存截图
self.assertEqual(sign_text, message)
self.find_element(('xpath', '/html/body/div[3]/div[2]/div[3]/a/span/span')).click()
data传入单个参数,使用unpack将单个参数分解传入测试方法中
实现将所有无效等价类使用一个函数进行测试
class Until:
# 从函数中获取参数
@classmethod
def get_data(cls):
data = [
('test', '123', '密码错误'),
('admin', '1201', '没有此用户'),
('', '123', 'User Id不能为空'),
('test', '', 'password不能为空')
]
return data
# 从文件中获取参数
@classmethod
def get_data_file(cls, filename):
row = []
with open(f'{filename}', 'r', encoding='utf-8') as f:
for file in f:
row.append(file.strip().split(','))
return row
@data(*Until.get_data())
# @data(*Until.get_data_file('data.txt'))
@unpack
def test_login_username_fail(self, username, password, message):
self.driver.get(self.url)
self.driver.find_element('id', 'username').clear()
self.driver.find_element('id', 'username').send_keys(username)
self.driver.find_element('id', 'password').clear()
self.driver.find_element('id', 'password').send_keys(password)
self.driver.find_element('xpath', '//input[@value="Login"]').click()
sign_text = self.driver.find_element('xpath', f'//div[contains(text(), "{message}")]').text
# self.imgs.append(self.driver.get_screenshot_as_base64()) # 保存截图
self.assertEqual(sign_text, message)
self.find_element(('xpath', '/html/body/div[3]/div[2]/div[3]/a/span/span')).click()
从函数和文件中获取的参数是一个列表需要进行解包传入data
使用参数化(数据驱动)测试类使用ddt装饰,单个参数就使用data装饰,组合参数使用unpack和data