(一)   前言

通过使用数据驱动测试,实现对输入值和预期结果的参数化。(例如:输入数据和预期结果可以直接读取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文件

邮箱

手机

登陆名称

昵称

密码

确认密码

预期结果

test@outlook.com

1

bky_110

盘古

test>100

test>100

手机号码有误

test@outlook.com

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笔记(十二):数据驱动测试的更多相关文章

  1. Python学习笔记(十二)—Python3中pip包管理工具的安装【转】

    本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  2. python 学习笔记十二 html基础(进阶篇)

    HTML 超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分.网页文件本身 是一种文本文件,通过在文本文件中添加标记符, 可以告诉浏览 ...

  3. Python+Selenium笔记(二):配置谷歌+IE环境

    #有的时候可能要访问外国的网站下载资料或工具,这时可能出现各种问题,例如谷歌人机验证显示不了.网站打不开等,建议使用一个FQ软件 (一)  设置IE (1)   http://docs.seleniu ...

  4. Python学习笔记十二

    HTML全称:Hyper Text Markup Language超文本标记语言 不是编程语言 HTML使用标记标签来描述网页 2.  HTML标签 开始标签,结束标签.  例如:<html&g ...

  5. python学习笔记(十 二)、操作数据库

    每一种语言都少不了多数据库进行各种操作. python支持多种数据库.有关python支持的数据库清单,请参阅:https://wiki.python.org/moin/DatabaseInterfa ...

  6. python 学习笔记(十二) 文件和序列化

    python 文件读写和序列化学习.## python文件读写`1 打开并且读取文件` f = open('openfile.txt','r') print(f.read()) f.close() ` ...

  7. python学习笔记十二:类的定义

    demo #!/usr/bin/python class Person: name = 'jim' age = 25 def say(self): print 'My name is ' + self ...

  8. python学习笔记(十二)-网络编程

    本文结束使用 Requests 发送网络请求.requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到.可以说,Requests 完全满足如今网络的需求. ...

  9. python 学习笔记十二 CSS基础(进阶篇)

    1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与 ...

  10. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

随机推荐

  1. Zookeeper--0200--安装与集群搭建、常用命令、客户端工具

    看这里,http://www.cnblogs.com/lihaoyang/p/8358153.html 1,先使用可视化客户端软件 ZooInspector 连接上集群中的一个节点,看下zk的结构: ...

  2. Ubuntu安装Gogs服务

    花了半天的时间把阿里云的centos 换成了ubuntu 14.04 lts ,原因是因为我想安装个gogs git服务,但是centos的glibc版本太低,折腾了半天没有成功. 迁移Ghost数据 ...

  3. mpvue使用scroll-view实现图片横向滑动

    html代码 <div class="swiper-home"> <scroll-view scroll-x="true" style=&qu ...

  4. Mysql字符串转换为整型

    使用Convert(字段名, 类型)方法 SELECT CONVERT(filedName, UNSIGNED INTEGER) ;

  5. Flutter踩坑日记:Tab导航栏保持子页面状态

    最近应邀票圈小伙伴躺坑Flutter,项目初步雏形完结.以原来的工具链版本为基础做了Flutter版本,不过后面还是需要优化下项目接入Redux,以及扩展一些Native方法. 这里记录一下在开发过程 ...

  6. Python模块: 命令行解析optionparser

    Python 有两个内建的模块用于处理命令行参数:一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数:另一个是 optparse,它功能强大,而 ...

  7. Spring事务传播属性介绍(三).Nested

    Required.Required_New传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10259897.html Mandatory.Neve ...

  8. MongoDB的“not master and slaveok=false”错误解决

    在客户端操作MongoDB时经常会如下错误: SECONDARY> show collections; Fri Jul :: uncaught exception: error: { } 原因是 ...

  9. 深入出不来nodejs源码-V8引擎初探

    原本打算是把node源码看得差不多了再去深入V8的,但是这两者基本上没办法分开讲. 与express是基于node的封装不同,node是基于V8的一个应用,源码内容已经渗透到V8层面,因此这章简述一下 ...

  10. Spring学习之路-从放弃到入门

    AOP:方法拦截器 IOC:类管理容器 主要讲讲这一天看Spring视频学到的东西,以下的叫法全是自创的. 1.类实例管理容器 关于Spring,首先是对类的管理,在常规情况,生成一个类需要调用new ...