以数据为导向,影响结果
使用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, "测验失败")