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)