解决 TypeError: object of type ‘float‘ has no len() 问题 unittest单元测试框架 ddt data 数据驱动

1 问题

在unittest框架下,运用ddt和data模块进行数据驱动,脚本外存储数据时,报错。

TypeError: object of type 'float' has no len()

对象数据类型不够存储。

2 原因

excel文件中的数据单元格没有添加'英文的单引号,把数字当成文本来处理。电话号为11超出float数据类型的存储范围,文本就当成了字符串数据类型来处理。

3 办法

将单元格内添加'
例如下图:
在这里插入图片描述
附上在unittest框架下,运用ddt和data模块进行数据驱动,执行测试用例,以QQ注册页面为例子,代码如下:

# 导入自动化包
from selenium import webdriver
import time
# 导入单元测试框架
import unittest
from ddt import ddt,data
# 将excel数据转化为列表字典的方法导入
from excel_turnto_listdic import ExcelUtil

import warnings

# 创建类,继承TestCase类
@ddt
class E01(unittest.TestCase):
    '''测试用例的数据'''
    obj1 = ExcelUtil(r"./Data/abc.xlsx")
    dicData = obj1.dic_data()
    # setUpClass方法需要用修饰器
    @classmethod
    def setUpClass(self):
        warnings.simplefilter('ignore', ResourceWarning)
    def setUp(self) -> None:
        pass
    #第一条测试用例
    @data(*dicData)
    def test_t_1(self,para): # data中的数据以参数para形式传入测试用例
        # 创建浏览器对象
        driver = webdriver.Chrome()
        # 打开网址
        driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
        time.sleep(2)
        # 在昵称文本框输入合法字符
        driver.find_element_by_id("nickname").send_keys(para["username"])
        time.sleep(2)
        # 输入有效密码
        driver.find_element_by_id("password").send_keys(para["password"])
        time.sleep(2)
        # 输入有效手机号码
        driver.find_element_by_id("phone").send_keys(para["phonenumber"])
        time.sleep(2)
        # 点击【发送验证码】按钮
        driver.find_element_by_id("send-sms").click()
        time.sleep(2)
        # 输入验证码
        driver.find_element_by_xpath('//*[@id="code"]').send_keys(para["vcode"])
        time.sleep(2)
        # 点击“同意协议”
        driver.find_element_by_xpath('/html/body/div[3]/div[2]/div[1]/form/div[8]/label/img[2]').click()
        time.sleep(2)
        # 点击【立即注册】按钮
        driver.find_element_by_id("get_acc").click()
        time.sleep(2)
        driver.quit()
    def tearDown(self) -> None:
        pass

    @classmethod
    def tearDownClass(cls) -> None:
        pass
if __name__ == '__main__':
    unittest.main()
    # path = os.path.dirname(__file__)
    # print(path)
    # site01 = unittest.defaultTestLoader.discover(path, pattern="test_t_1.py")
    # with open(r'./re.txt','wb') as f:
    #     runner = unittest.TextTestRunner(f,descriptions="测试报告",verbosity=2)
    #     runner.run(site01)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值