day12-在unittest框架中使用参数化

参数化

所谓参数化,是指利用不同的测试数据来侧测试相同的测试场景,为了提高代码的复用性,增加代码效率而采用一种代码编写的方法,叫参数化,也就是数据驱动。

参数化的几种形式

  • 参数值为单个参数形式

  • 参数值为组合参数形式

  • 从函数中返回参数值

  • 从文件中返回参数值

组合参数

    @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()

day12-在unittest框架中使用参数化_第1张图片

从函数和文件中获取的参数是一个列表需要进行解包传入data

使用参数化(数据驱动)测试类使用ddt装饰,单个参数就使用data装饰,组合参数使用unpack和data

你可能感兴趣的:(软件测试,python,selenium,测试工程师,软件测试,自动化)