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

以数据为导向,影响结果

使用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

出现过的问题:

从excel中读取的密码(纯数字)变成浮点数float类型,而不是string类型。即使单元格设置为文本类型

原因:

在excel中单元格设置只是决定了数值的显示类型,但是实际储存还是以浮点数储存。而xlrd读取的是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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值