(一)   前言

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

    以上有个问题:为什么同样的汇编指令JMP 12345678却对应不同的机器码呢? 首先,机器码E9表明这是一个近跳转(Near Jmp) 这里需要补充下相关知识: JMP分3种: ①短跳转(Short ...

  2. MySQL笔记(3)---文件

    1.前言 第二章简单记录了一下InnoDB存储引擎的一个基本内容,介绍了保证高效插入的Insert Buffer,change Buffer和确保数据安全的write ahead log以及doubl ...

  3. Java8简明指南

    Java8简明指南 转载自并发编程网 – ifeve.com本文链接地址: Java8简明指南 欢迎来到Java8简明指南.本教程将一步一步指导你通过所有新语言特性.由短而简单的代码示例,带你了解如何 ...

  4. 第六章-Javac符号表

    需要参考: (1)Architecture of a Java Compiler (2)关于符号Symbol第一篇 (3)关于符号Symbol第二篇 (4)关于类型Type (5)关于作用域范围Sco ...

  5. 使用vue3.0和element实现后台管理模板

    通过自己所学的这段时间,利用空余时间,使用vue3.0脚手架搭建的一个关于后台的管理模板,所实现功能也是模仿一个后台的界面,数据分为两种存放,一种是直接存储到mlab,这里的数据是存放这登录注册,只有 ...

  6. Nginx缓存配置之手动清除缓存

    访问我的博客 前言 前文介绍了利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,并设置了缓存时间为一天. 但是如果前端修改了页面,比如首页,由于 Nginx 缓存的 ...

  7. 【IT笔试面试题整理】删除无序链表中重复的节点

    [试题描述]定义一个函数,输入一个链表,删除无序链表中重复的节点 [参考代码] 方法一: Without a buffer, we can iterate with two pointers: &qu ...

  8. springboot 单体架构之shiro集成

    这里使用的是eclipse 开发工具 1.springboot 版本是2.0的,引入了2个shiro 的依赖,如下 <parent> <groupId>org.springfr ...

  9. double转换为int以及浮点型相加损失精度问题

    最近在做支付相关模块的业务,数据库字段却使用的是double类型,其实也行,只要计算不在sql语句中进行,也是没有问题的. 预先的类属性设置的是Double类型,自己算的时候发现小数相加会出现损失精度 ...

  10. 并发编程之 CountDown 源码分析

    前言 Doug Lea 大神在 JUC 包中为我们准备了大量的多线程工具,其中包括 CountDownLatch ,名为倒计时门栓,好像不太好理解.不过,今天的文章之后,我们就彻底理解了. 如何使用? ...