DDT:data driver test
结合unittest使用,使用方式:
'''
在python里面装饰器是以@开头,并且装饰器有两种:类装饰器,函数装饰器。
ddt里面有哪些装饰器:
@ddt (类装饰器,申明当前类使用ddt框架)
@data(函数装饰器,用于给测试用例传递数据)
@unpack (函数装饰器,将传输的数据包解包),一股作用于元祖tuple和列表list。@file_data(函数装饰器,可直接读取yamljson文件 )
实战@ddt , @data总结:当传单个值时,所有的类型都可以传,并且用例执行一次。如果说:@data传入多个值的时候,那么传几个值,那么用例执行几次。
实战@unpack
如果是数字或者字符串:那么不需要@unpack
如果是元祖和列表的话,那么可以通过@unpàck,但是参数的个数必须和解完包后的值的个数一样
如果是集合无法解包
如果是字典,那么可以通过@unpack解包,但是参数的名字和个数必须和字典的键保持一致。
'''
@ddt
class TestLogin(unittest.TestCase):
driver = None
def setup_method(self):
self.driver = BrowserEngine().open_browser()
def teardown_method(self):
self.driver.quit()
@data(*ExcelUtil().read_excel())
@unpack
def test_login_case001(self, index, username, passwd):
baiyuesms_homepage = BaiYueSMSPage(self.driver)
baiyuesms_homepage.login_sms(username, passwd)
if index == 1:
# self.assertEqual(baiyuesms_homepage.get_expect_result(), '管理员')
assert baiyuesms_homepage.get_expect_result() == '管理员'
baiyuesms_homepage.get_windows_img()
elif index == 2:
self.assertEqual(baiyuesms_homepage.get_text(), '登录失败 : 用户名或者密码错误')
# assert baiyuesms_homepage.get_text() == '登录失败 : 用户名或者密码错误'
elif index == 3:
self.assertEqual(baiyuesms_homepage.get_text(), '登录失败 : 用户名或者密码错误')
# assert baiyuesms_homepage.get_text() == '登录失败 : 用户名或者密码错误'
pytest中使用方式:pytest.mark.parametrize()
# @ddt
# class TestLogin(unittest.TestCase):
class TestLogin:
driver = None
def setup_method(self):
self.driver = BrowserEngine().open_browser()
def teardown_method(self):
self.driver.quit()
# @data(*ExcelUtil().read_excel())
# @unpack
@pytest.mark.parametrize('index, username, passwd', ExcelUtil().read_excel())
def test_login_case001(self, index, username, passwd):
# print(index, username, passwd)
baiyuesms_homepage = BaiYueSMSPage(self.driver)
baiyuesms_homepage.login_sms(username, passwd)
if index == 1:
# self.assertEqual(baiyuesms_homepage.get_expect_result(), '管理员')
assert baiyuesms_homepage.get_expect_result() == '管理员'
baiyuesms_homepage.get_windows_img()
elif index == 2:
# self.assertEqual(baiyuesms_homepage.get_text(), '登录失败 : 用户名或者密码错误')
assert baiyuesms_homepage.get_text() == '登录失败 : 用户名或者密码错误'
elif index == 3:
# self.assertEqual(baiyuesms_homepage.get_text(), '登录失败 : 用户名或者密码错误')
assert baiyuesms_homepage.get_text() == '登录失败 : 用户名或者密码错误'
其中的ExcelUtil().read_excel()自定义的读取excel文件的类
class ExcelUtil:
def read_excel(self):
# 加载工作簿
wb = openpyxl.load_workbook(PathUtil().get_path() + "data\\login_data.xlsx")
# 获得sheet对象
sheet = wb['login']
# 获取excel行数列数
# print(sheet.max_row, sheet.max_column)
all_list = []
for row in range(1, sheet.max_row + 1):
tmp_list = []
if row > 1:
for col in range(1, sheet.max_column + 1):
tmp_list.append(sheet.cell(row, col).value)
all_list.append(tmp_list)
return all_list