0
点赞
收藏
分享

微信扫一扫

Python3+Selenium3自动化测试框架——⑤数据驱动

苦茶如歌 2022-02-17 阅读 84

以数据为导向,影响结果

使用Python下的ddt库

1.直接输入数据

主文件:first_ddt_case.py

# coding=utf-8
# 邮箱、用户名、密码、验证码、错误信息定位元素、错误提示信息
import unittest
import ddt
import time
from business.register_business import RegisterBusiness
from selenium import webdriver
import HTMLTestRunner
import os


@ddt.ddt
class FirstDdtCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.file_name = "D:/Users/Username/PycharmProjects/selenium_demo/image/test001.png"

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("http://www.5itest.cn/register")
        self.login = RegisterBusiness(self.driver)

    def tearDown(self):
        time.sleep(2)
        for method_name, error in self._outcome.errors:
            if error:
                case_name = self._testMethodName
                file_path = os.path.join(os.getcwd() + "/report/" + case_name + ".png")
                self.driver.save_screenshot(file_path)
        self.driver.close()

    @ddt.data(
        ['34', 'qwer', '11111111', "D:/Users/Username/PycharmProjects/selenium_demo/image/test001.png",
         'user_email_error', '请输入有效的电子邮件地址'],
        ['@qq.com', 'qwer', '11111111', "D:/Users/Username/PycharmProjects/selenium_demo/image/test001.png",
         'user_email_error', '请输入有效的电子邮件地址'],
        ['5654@qq.com', 'qwer', '11111111', "D:/Users/Username/PycharmProjects/selenium_demo/image/test001.png",
         'user_email_error', '请输入有效的电子邮件地址']
    )
    @ddt.unpack
    def test_register_case(self, email, username, password, code, assertCode, assertText):
        email_error = self.login.register_function(email, username, password, code, assertCode, assertText)
        self.assertFalse(email_error, "测验失败")


if __name__ == '__main__':
    # unittest.main()
    file_path = os.path.join(os.getcwd() + "/report" + "/first_case1.html")
    f = open(file_path, 'wb')
    suite = unittest.TestLoader().loadTestsFromTestCase(FirstDdtCase)
    runner = HTMLTestRunner.HTMLTestRunner(stream=f, title="This is first report1", description=u"这个是我们第一次测试报告1",
                                           verbosity=2)
    runner.run(suite)

register_business.py 中添加函数

    def register_function(self, email, username, password, code, assertCode, assertText):
        self.user_base(email, username, password, code)
        if self.register_h.get_user_text(assertCode, assertText) is None:
            print("邮箱检验不成功")
            return True
        else:
            return False

register_handle.py 修改函数

将info的对比信息修改成配置文件中的

# 获取文字信息
    def get_user_text(self, info, user_info):
        try:
            if info == 'user_email_error':
                text = self.register_p.get_email_error_element().get_attribute('textContent')
            elif info == 'user_name_error':
                text = self.register_p.get_name_error_element().get_attribute('textContent')
            elif info == 'password_error':
                text = self.register_p.get_password_error_element().get_attribute('textContent')
            else:
                text = self.register_p.get_code_error_element().get_attribute('textContent')
        except:
            text = None
        return text

测试的时候 button 又出现点击不了的情况 修改成script操作

# 点击注册按钮
    def click_register_button(self):
        # self.register_p.get_button_element().click()
        button = self.register_p.get_button_element()
        self.driver.execute_script("arguments[0].click();", button)

2.从excel文件中导入数据

首先在config文件夹下创建casedata.xls 将单元格格式设置为文本

 util.excel_util.py 创建工具类 读取excel

# coding=utf-8
import xlrd


class ExcelUtil:
    def __init__(self, excel_path=None, index=None):
        if excel_path is None:
            excel_path = r"D:\Users\Richard Young\PycharmProjects\selenium_demo\config\casedata.xls"
        if index is None:
            index = 0
        self.data = xlrd.open_workbook(excel_path)
        self.table = self.data.sheets()[index]
        self.rows = self.table.nrows

    def get_data(self):
        result = []
        for i in range(self.rows):
            col = self.table.row_values(i)
            count = -1
            for string in col:
                count +=1
                if isinstance(string, str) is False:
                    if isinstance(string, float):
                        col[count] = str(int(string))
            result.append(col)
        print(result)
        return result


if __name__ == '__main__':
    ex = ExcelUtil()
    ex.get_data()

修改first_ddt_case.py中的test_register_case函数

'''
    @ddt.data(
        ['34', 'qwer', '11111111', "D:/Users/Username/PycharmProjects/selenium_demo/image/test001.png",
         'user_email_error', '请输入有效的电子邮件地址'],
        ['@qq.com', 'qwer', '11111111', "D:/Users/Username/PycharmProjects/selenium_demo/image/test001.png",
         'user_email_error', '请输入有效的电子邮件地址'],
        ['5654@qq.com', 'qwer', '11111111', "D:/Users/Username/PycharmProjects/selenium_demo/image/test001.png",
         'user_email_error', '请输入有效的电子邮件地址']
    )
    @ddt.unpack
    '''

    @ddt.data(*data)
    def test_register_case(self, data):
        email, username, password, code, assertCode, assertText = data
        print(data)
        email_error = self.login.register_function(email, username, password, code, assertCode, assertText)
        self.assertFalse(email_error, "测验失败")
举报

相关推荐

0 条评论