(一)   前言

通过使用数据驱动测试,实现对输入值和预期结果的参数化。(例如:输入数据和预期结果可以直接读取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. Android使用内容提供者实现增删改查操作

    Android使用内容提供者实现增删改查操作 这里需要建立两个项目:SiYouShuJuKu(使用内容提供者暴露相关的操作),DQDYGApplication(使用内容解析者对第一个应用进行相关的解析 ...

  2. keepalived双机热备,安装部署文档

    keepalived双击热备,安装部署文档: 下载目录:/apps/keepalived-1.2.7.tar.gz 1:---> yum install -y make wget 2:---&g ...

  3. Json.Net 在.Net Core 2.0 中序列化DataSet 问题

    使用Asp.Net Core中自带的版本10.0.1 生成一个简单的DataSet DataSet ds2 = new DataSet(); DataTable table = new DataTab ...

  4. ubuntu-12.04.5下编译openjdk8

    bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/java/jdk1.7.0_80/ --with-debug-level=slo ...

  5. sublime自动对齐Alignment插件快捷键

    [ { "keys": ["ctrl+alt+f"], "command": "alignment" } ]

  6. Solidity中如何判断mapping中某个键是否为空呢?

    Solidity中如何判断mapping中某个键是否为空呢? 一.比较标准的做法是建立一个专门和value相关的结构体,用一个布尔型变量来看是否这个key所对应的value被赋过值 代码如下: pra ...

  7. 团队作业6——展示博客(alpha阶段)

    Deadline: 2018-5-9 10:00PM,以提交至班级博客时间为准. 5.10周四实验课将进行alpha阶段项目复审,请在5.10之前,根据以下要求,完成alpha版本的展示,并以此作为参 ...

  8. 分布式理论(五)—— 一致性算法 Paxos

    前言 Paxos 算法如同我们标题大图:世界上只有一种一致性算法,就是 Paxos.出自一位 google 大神之口. 同时,Paxos 也是出名的晦涩难懂,推理过程极其复杂.楼主在尝试理解 Paxo ...

  9. Extjs 项目中常用的小技巧,也许你用得着(4)---Extjs 中的cookie设置

    1.ExtJs设置cookie两种方式 其一:设置cookie如下 saveacct=isForm.getForm().findField('itemselector').getValue(); Ex ...

  10. C#基础知识回顾--委托事件

    在上一篇看到他我一下子就悟了(续)---委托,被人狂喷.说写的太空,没有什么内容之类的.所以准备在这里重写下,不过还是按着以前的方式尽量简单的写.这里我们以打篮球为例. 第一步:首先,其他对象订购事件 ...