Python+Selenium笔记(十二):数据驱动测试

2018-03-01 07:47:58来源:cnblogs.com作者:赖权华人点击

分享

(一)   前言

通过使用数据驱动测试,实现对输入值和预期结果的参数化。(例如:输入数据和预期结果可以直接读取Excel文档的数据)

(二)   ddt

使用ddt执行数据驱动测试,ddt库可以将测试中的变量参数化。使用ddt的时候,在测试类上使用@ddt装饰符,在测试方法上使用@data装饰符。@data装饰符将参数当作测试数据,参数可以是单个值、列表、元组、字典。对于列表和元组,需要用@unpack装饰符把列表和元组解析成多个参数。

使用下面的命令安装ddt库

pip install ddt

(三)   通过Excel获取数据

读取Excel文件,需要用到xlrd库。

安装xlrd的库

pip install xlrd

如果要往Excel表格写数据,需要用到xlwt库

pip install xlwt

(四)   示例中用到的excel文件

邮箱

手机

登陆名称

昵称

密码

确认密码

预期结果

[email protected]

1

bky_110

盘古

test>100

test>100

手机号码有误

[email protected]

18898989878

b

盘古

test>100

test>100

不合要求,至少2个字符,最多30个字符

(五)   示例

 1 from selenium import webdriver 2 from ddt import ddt,data,unpack 3 import xlrd 4 import unittest 5 #读取excel文件的函数 6 def get_data(file_name): 7     rows = [] 8     #读取excel的数据 9     book = xlrd.open_workbook(file_name)10     #通过索引访问第一个sheet页11     sheet = book.sheet_by_index(0)12     #迭代读取excel第一个sheet页的数据,sheet.nrows指excel的行数13     for r_idx in range(1, sheet.nrows):14         #row_values读取第r_idx行的数据(0代表读取第1列及后面所有列的数据)15         #读取数据的时候,我们一般说的第一行、第一列,索引都是016         #所以r_idx=1的时候,读取的其实是excel第二行的数据17         rows.append(list(sheet.row_values(r_idx,0)))18         #先将手机号删除并赋值给pthone,然后转换为字符串并添加回原来的位置19         pthone = rows[r_idx - 1].pop(1)20         rows[r_idx - 1].insert(1, str(int(pthone)))21     return rows22 @ddt23 class RegisterNewUserDDT(unittest.TestCase):24     @classmethod25     def setUpClass(cls):26         cls.driver = webdriver.Chrome()27         cls.driver.implicitly_wait(20)28         cls.driver.maximize_window()29         cls.driver.get('https://www.cnblogs.com/')30         login_area = cls.driver.find_element_by_css_selector('#login_area')31         register = login_area.find_element_by_link_text('注册')32         register.click()33     #读取excel文件的数据作为参数34     @data(*get_data('data/reTest.xlsx'))35     @unpack36     def test_register_new_user(self,email,phone,login_name,nickname,password,confirm_password,expected_result):37         driver = self.driver38         self.assertTrue('用户注册 - 博客园' == driver.title)39         # 定位注册页面各个字段40         user_email = driver.find_element_by_id('Email')41         user_phone_country = driver.find_element_by_id('CountryCode')42         user_phone = driver.find_element_by_id('PhoneNum')43         user_login_name = driver.find_element_by_id('LoginName')44         user_nickname = driver.find_element_by_id('DisplayName')45         user_password = driver.find_element_by_id('Password')46         user_confirm_password = driver.find_element_by_id('ConfirmPassword')47         #清除各字段的值(如果有)48         user_email.clear()49         user_phone.clear()50         user_login_name.clear()51         user_nickname.clear()52         user_password.clear()53         user_confirm_password.clear()54         #输入邮箱、手机号等信息55         user_email.send_keys(email)56         user_phone.send_keys(phone)57         user_login_name.send_keys(login_name)58         user_nickname.send_keys(nickname)59         user_password.send_keys(password)60         user_confirm_password.send_keys(confirm_password)61         #判断提示是否正确(这边应该有办法可以获取当前是第几次执行,下面的写法太死板了)62         if phone == '1':63             phone_error = driver.find_element_by_id('PhoneNum-error')64             self.assertTrue(phone_error.text == expected_result)65         elif login_name == 'b':66             loginName_error = driver.find_element_by_id('LoginName-error')67             self.assertTrue(loginName_error.text == expected_result)68 69     @classmethod70     def tearDownClass(cls):71         cls.driver.quit()

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台