19、ddt数据驱动测试

背景:

      设计测试用例是,有些测试用例只是参数数据输入不一样而已,比如登录时,需要经常切换账号,而操作基本是一样的。如果用例重复去写操作过程会导致很多冗余的代码

1、安装ddt

pip install ddt

2、原理

  • 测试数据为多个字典的list类型
  • 测试类前加修饰@ddt.ddt
  • case前加修饰@ddt.data()
  • 运行后用例会自动加载成三个单独的用例

3、代码

封装读取Excel的数据

# coding=utf-8

import xlrd


class FileUtils():

    def __init__(self, file_path, sheet_index):
        self.data = xlrd.open_workbook(file_path)
        self.table = self.data.sheet_by_index(sheet_index)
        self.key = self.table.row_values(0)
        self.row_num = self.table.nrows
        self.clo_num = self.table.ncols

    def read_excel(self):
        if self.row_num <= 1:
            print(u"excel数据小于1行")
        else:
            list = []
            num = 1
            for row in range(self.row_num - 1):
                dict = {}
                values = self.table.row_values(num)
                for clo in range(self.clo_num):
                    dict[self.key[clo]] = values[clo]
                list.append(dict)
                num += 1
            return list


if __name__ == '__main__':
    file_path = "E:\\Python\\portal\\file\\text.xlsx"
    sheet_index = 0
    file = FileUtils(file_path, sheet_index)
    list = file.read_excel()
    print(list)

测试类:

# coding=utf-8

from ddtdatatest.FileUtils import FileUtils
from selenium import webdriver
import ddt
import unittest
import time

file_path = "E:\\Python\\portal\\file\\text.xlsx"
sheet_index = 0
file = FileUtils(file_path, sheet_index)
data = file.read_excel()
print(data)


@ddt.ddt
class DDTTest(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("https://imail.isoftstone.com")
        self.driver.implicitly_wait(3000)
        self.driver.maximize_window()

    def login(self, username, password):
        self.driver.find_element_by_id("account").clear()
        self.driver.find_element_by_id("account").send_keys(username)
        self.driver.find_element_by_id("password").clear()
        self.driver.find_element_by_id("password").send_keys(password)
        self.driver.find_element_by_id("bLogin").click()
        time.sleep(3)

    def is_login_success(self):
        try:
            text = self.driver.find_element_by_id("zb__App__Mail_title").text
            print(text)
            return True
        except:
            return False

    @ddt.data(*data)
    def test_login(self, data):
        print(u"当前测试数据 %s" % data)
        self.login(data["username"], data["password"])
        result = self.is_login_success()
        self.assertTrue(result)

    def tearDown(self):
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()

猜你喜欢

转载自blog.csdn.net/qq969887453/article/details/89843486
今日推荐