DDT+Excel数据驱动

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
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值