Python+Selenium笔记(十二):数据驱动测试
(一) 前言
通过使用数据驱动测试,实现对输入值和预期结果的参数化。(例如:输入数据和预期结果可以直接读取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文件
邮箱 |
手机 |
登陆名称 |
昵称 |
密码 |
确认密码 |
预期结果 |
1 |
bky_110 |
盘古 |
test>100 |
test>100 |
手机号码有误 |
|
18898989878 |
b |
盘古 |
test>100 |
test>100 |
不合要求,至少2个字符,最多30个字符 |
(五) 示例
from selenium import webdriver
from ddt import ddt,data,unpack
import xlrd
import unittest
#读取excel文件的函数
def get_data(file_name):
rows = []
#读取excel的数据
book = xlrd.open_workbook(file_name)
#通过索引访问第一个sheet页
sheet = book.sheet_by_index(0)
#迭代读取excel第一个sheet页的数据,sheet.nrows指excel的行数
for r_idx in range(1, sheet.nrows):
#row_values读取第r_idx行的数据(0代表读取第1列及后面所有列的数据)
#读取数据的时候,我们一般说的第一行、第一列,索引都是0
#所以r_idx=1的时候,读取的其实是excel第二行的数据
rows.append(list(sheet.row_values(r_idx,0)))
#先将手机号删除并赋值给pthone,然后转换为字符串并添加回原来的位置
pthone = rows[r_idx - 1].pop(1)
rows[r_idx - 1].insert(1, str(int(pthone)))
return rows
@ddt
class RegisterNewUserDDT(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.implicitly_wait(20)
cls.driver.maximize_window()
cls.driver.get('https://www.cnblogs.com/')
login_area = cls.driver.find_element_by_css_selector('#login_area')
register = login_area.find_element_by_link_text('注册')
register.click()
#读取excel文件的数据作为参数
@data(*get_data('data/reTest.xlsx'))
@unpack
def test_register_new_user(self,email,phone,login_name,nickname,password,confirm_password,expected_result):
driver = self.driver
self.assertTrue('用户注册 - 博客园' == driver.title)
# 定位注册页面各个字段
user_email = driver.find_element_by_id('Email')
user_phone_country = driver.find_element_by_id('CountryCode')
user_phone = driver.find_element_by_id('PhoneNum')
user_login_name = driver.find_element_by_id('LoginName')
user_nickname = driver.find_element_by_id('DisplayName')
user_password = driver.find_element_by_id('Password')
user_confirm_password = driver.find_element_by_id('ConfirmPassword')
#清除各字段的值(如果有)
user_email.clear()
user_phone.clear()
user_login_name.clear()
user_nickname.clear()
user_password.clear()
user_confirm_password.clear()
#输入邮箱、手机号等信息
user_email.send_keys(email)
user_phone.send_keys(phone)
user_login_name.send_keys(login_name)
user_nickname.send_keys(nickname)
user_password.send_keys(password)
user_confirm_password.send_keys(confirm_password)
#判断提示是否正确(这边应该有办法可以获取当前是第几次执行,下面的写法太死板了)
if phone == '':
phone_error = driver.find_element_by_id('PhoneNum-error')
self.assertTrue(phone_error.text == expected_result)
elif login_name == 'b':
loginName_error = driver.find_element_by_id('LoginName-error')
self.assertTrue(loginName_error.text == expected_result) @classmethod
def tearDownClass(cls):
cls.driver.quit()
Python+Selenium笔记(十二):数据驱动测试的更多相关文章
- Python学习笔记(十二)—Python3中pip包管理工具的安装【转】
本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...
- python 学习笔记十二 html基础(进阶篇)
HTML 超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分.网页文件本身 是一种文本文件,通过在文本文件中添加标记符, 可以告诉浏览 ...
- Python+Selenium笔记(二):配置谷歌+IE环境
#有的时候可能要访问外国的网站下载资料或工具,这时可能出现各种问题,例如谷歌人机验证显示不了.网站打不开等,建议使用一个FQ软件 (一) 设置IE (1) http://docs.seleniu ...
- Python学习笔记十二
HTML全称:Hyper Text Markup Language超文本标记语言 不是编程语言 HTML使用标记标签来描述网页 2. HTML标签 开始标签,结束标签. 例如:<html&g ...
- python学习笔记(十 二)、操作数据库
每一种语言都少不了多数据库进行各种操作. python支持多种数据库.有关python支持的数据库清单,请参阅:https://wiki.python.org/moin/DatabaseInterfa ...
- python 学习笔记(十二) 文件和序列化
python 文件读写和序列化学习.## python文件读写`1 打开并且读取文件` f = open('openfile.txt','r') print(f.read()) f.close() ` ...
- python学习笔记十二:类的定义
demo #!/usr/bin/python class Person: name = 'jim' age = 25 def say(self): print 'My name is ' + self ...
- python学习笔记(十二)-网络编程
本文结束使用 Requests 发送网络请求.requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到.可以说,Requests 完全满足如今网络的需求. ...
- python 学习笔记十二 CSS基础(进阶篇)
1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与 ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
随机推荐
- 优先队列/oriority queue 之最大优先队列的实现
优先队列(priority queue)是一种用来维护一组数据集合S的数据结构.每一个元素都有一个相关的值,被称为关键字key. 这里以实现最大优先队列为例子 最大优先队列支持的操作如下:INSERT ...
- [Java初探04]__字符串(String类)相关
前言 接下来将暂时将重心偏移向实际操作,不在将大量时间花费在详细的知识点整理上,将会简略知识总结笔记的记录,加强实际练习的时间,实例练习篇也不再同步进行,我会将部分我觉得重要的源码更新在每节知识点后面 ...
- 前端通信:ajax设计方案(八)--- 设计请求池,复用请求,让前端通信快、更快、再快一点
直接进入主题,本篇文章有点长,包括从设计阶段,到摸索阶段,再到实现阶段,最后全面覆盖测试阶段(包括数据搜集清洗),还有与主流前端通信框架进行对比PK阶段. 首先介绍一下一些概念: 1. 浏览器的并发能 ...
- 前端组件化Polymer入门教程(5)——生命周期
以前我对生命周期这个概念还真不是很清楚,不过想想也简单,比如说人的生命周期,无非就是生老病死.而对于程序的生命周期就是说,它在每个阶段都会做不同的事,再比如说回调函数把,ajax返回的时候它才执行,那 ...
- spring mvc requestmapping 配置多个
参考 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation. ...
- spring boot整合双持久层框架jpa、mybatis
公司之前用的是spring boot + jpa,但由于jpa无法完美的解决某些动态查询问题,就使用的jdbcTemplate 动态封装SQL,由于代码相对复杂,可读性差,现准备再引入mybatis. ...
- element-ui2源码修改小问题
最近element-ui升级到2了,添加了不少功能,可喜可贺,可喜可贺! 然而,产品的需求依然那么刁钻,上传与删除图片还是要去改源码,为了同时用新的ele,决定在2中改源码 然而,遇到问题了. 一开始 ...
- 自定义MVC的Helper扩展方法
记得在开发ASP.NET时候,也经常性使用C#可以写自己义的扩展方法,如:http://www.cnblogs.com/insus/p/3154363.html 或http://www.cnblogs ...
- redis缓存工具类,提供序列化接口
1.序列化工具类 package com.qicheshetuan.backend.util; import java.io.ByteArrayInputStream; import java.io. ...
- 乐字节-Java8新特性-接口默认方法之Stream流(下)
接上一篇:<Java8新特性之stream>,下面继续接着讲Stream 5.流的中间操作 常见的流的中间操作,归为以下三大类:筛选和切片流操作.元素映射操作.元素排序操作: 操作 描述 ...