所谓的数据驱动就是将数据单独存放,在写方法将数据读取,然后将读取的数据放在testcase里面。

当然如果这种testcase都是一样的,只有需要的数据不一样,也可以将testcase写成一个方法,把上面获取的数据作为参数传进方法里面!

下面是一个关于登陆的自动化测试,由于登录的步骤完全一样,就是每次登录时用的账号密码不一样,所以可以用数据驱动啊!

def login(username, password):
driver.find_element_by_id("idInput").send_keys(username)
driver.find_element_by_id("pwdInput").send_keys(password)
driver.find_element_by_id("loginBtn").click() if __name__ == '__main__':
login("zhangsan","123")
#...
#...
login("lisi","456")

当传zhangsan,程序就会用zhangsan登录,当传lisi,就会用lisi登录。

数据驱动的本质就是“测试数据”与“执行代码”做分离。至于,“测试数据”放哪儿都可以。

下面是csv文件的数据驱动

读取数据文件,并得到相应的数据,把这些数据用到具体的某个用例当中

from selenium import webdriver
import unittest
import csv csvData = csv.reader(open('C:\\Users\\chenjia\\Desktop\\test.csv','r')) Data = []
for i in csvData: #获取csv中每一行的数据(每一行的数据都是一个列表)
print i #打印每一行的数据(也就是打印每一行列表) data= []
for j in i: #获取每一行的每一个单元格的值(也就是遍历每一行的单元格的值)
data.append(j) #获取每一个单元表格的值,由于每次循环j只能显示一个值,所以data也只能显示一个值
Data.append(data) #所以再将data的每一个值都添加到Data里面 print Data
print Data[0][0] #打印第一个小数列里面的第一个元素
print Data[3][2] #打印第4个小数列里面的第3个元素
print Data[-1][-1] #打印最后一个小数列里面的最后一个元素 class loginTest(unittest.TestCase): def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("http://xxx.login.page") # 封装用户登录
def user_login(self, username, password):
self.driver.find_element_by_id("idInput").send_keys(username)
self.driver.find_element_by_id("pwdInput").send_keys(password)
self.driver.find_element_by_id("loginBtn").click() def test_login1(self):
'''用户名、密码为空登录'''
username = Data[0][1]
password = Data[0][2]
self.user_login(username, password) def test_login2(self):
'''用户名正确,密码为空'''
username = Data[1][1]
password = Data[1][2]
self.user_login(username, password) def test_login3(self):
'''用户名为空,密码正确'''
username = Data[2][1]
password = Data[2][2]
self.user_login(username, password) def test_login4(self):
'''用户名密码正确 '''
username = Data[3][1]
password = Data[3][2]
self.user_login(username, password) if __name__ == '__main__':
unittest.main()

下面一段代码是在unittest里面用python读取excel 数据

#此代码为获取excel表中的每一个cell单元格的值,并将每一行的值作为一个小列表,整个excel表就是由多行值(多行小列表)构成的一个大列表

import xlrd
data = xlrd.open_workbook('C:\Users\chenjia\Desktop\unittest.xlsx') # 打开xls文件 table = data.sheets()[0] # 打开第一张表
nrows = table.nrows # 获取表的行数
ncols = table.ncols # 获取表的列数 Cell_List = []
for i in range(1, nrows):
row_data = table.row_values(i) #获取每一行的值
print row_data
cell_list = [] #建一个列表用于存放获取每一个cell表格的值
for l in range(ncols):
cell_data = row_data[l] #获取每一个cell表格的值
print cell_data
cell_list.append(cell_data) #获取每一个cell表格的值,由于每次循环cell_data只能显示一个值,所以cell_list只能显示一个值
Cell_List.append(cell_list) #所以再将cell_list的每一个值都添加到Cell_List里面 print "----------------------------------------------------------------------------------"
print Cell_List

unittest数据驱动的更多相关文章

  1. 【转】Python unittest数据驱动工具:DDT

    背景 python 的unittest 没有自带数据驱动功能. 所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成. DDT是 “Data-Driven Tests”的缩写 ...

  2. python3 unittest数据驱动

    我们在自动化测试的时候,有没有遇到这样的问题?例如一个登录的接口要做自动化,会有很多case(用例),密码错误,密码正确这种.在继承unittest.TestCase的类中,凡是以“test”开头的方 ...

  3. [小北De编程手记] : Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动

    关于<玩转 xUnit.Net>系列文章,我想跟大家分享的不是简单的运行一下测试用例或是介绍一下标签怎么使用(这样的文章网上很多).上一篇<Lesson 01 玩转 xUnit.Ne ...

  4. [小北De编程手记] : Lesson 06 玩转 xUnit.Net 之 定义自己的FactAttribute

    xUnit.Net本身提供了标记测试方法的标签Fact和Theory.在前面的文章<Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动>中,也对它 ...

  5. Python3|ddt|unittest|浅议数据驱动测试

    目录 1.DDT简介 2.data装饰器 3.unpack装饰器 4.file_data装饰器 5.总结 1.DDT简介 Data-Driven Tests(DDT)即数据驱动测试.它允许您通过不同的 ...

  6. Unittest框架+ddt数据驱动+HTMLTestRunner+sendmail(自动发送测试报告)+git+Jenkins

    本次写的是针对有代码基础的,没基础建议先去学基础,以下所有描述内容都是我已经在公司项目实践成功的!仅供参考 整体思路: 1.接口自动化用的是Python中unittest框架 2.所有的测试数据用例存 ...

  7. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    1.环境准备: python3.6 requests xlrd openpyxl HTMLTestRunner_api 2.目前实现的功能: 封装requests请求方法 在excel填写接口请求参数 ...

  8. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(二)

    可以参考 python+requests接口自动化完整项目设计源码(一)https://www.cnblogs.com/111testing/p/9612671.html 原文地址https://ww ...

  9. Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构

    1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...

随机推荐

  1. Word 2010 制作文档结构之章节自动编号

    参考:https://jingyan.baidu.com/article/37bce2be129fcc1002f3a2f9.html 1.打开需要章节编号的论文 2.设置格式 注意,这里相同级别的标题 ...

  2. [PHP] Compile an extension on Windows

    https://wiki.php.net/internals/windows/stepbystepbuildhttp://blog.benoitblanchon.fr/build-php-extens ...

  3. ftp主动与被动模式区别

    FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这两个端口是21(命令端口)和20(数据端口).但FTP工作方式的不同 ...

  4. 移动设备 h5屏幕适配

    <meta name="HandheldFriendly" content="true"><meta name="MobileOpt ...

  5. Windows应急响应操作手册

    查看表征异常 系统卡慢.宕机.CPU和内存占用高.网络拥塞或断网.磁盘空余空间无理由大幅度缩小等,根据以上表征,可以初步猜测系统面临的问题. windows 下查看系统基本信息 PS C:\Users ...

  6. 学习项目部署Django+uwsgi+Nginx生产环境部署

    绪论 项目生产环境部署,是很重的一个知识点.第一,Django自带的服务器很简陋,由于测试和开发环境尚可,无法用于生产环境,保障安全性和可靠性.以及性能.此外,学习部署方式,还有利于了解生产部署后的项 ...

  7. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十四:储存模块

    实验十四比起动手笔者更加注重原理,因为实验十四要讨论的东西,不是其它而是低级建模II之一的模块类,即储存模块.接触顺序语言之际,“储存”不禁让人联想到变量或者数组,结果它们好比数据的暂存空间. . i ...

  8. [转]Windows上搭建Kafka运行环境

    [转]http://www.cnblogs.com/alvingofast/p/kafka_deployment_on_windows.html Windows上搭建Kafka运行环境   完整解决方 ...

  9. 同样的神经网络引擎,苹果A11芯片比华为麒麟970牛在哪?

    本文编辑:Cynthia iPhone X发布之后,999美元的售价并没有让人止步,相反,新iPhone的Face ID等功能让越来越多的人期待,库克在<早安美国>节目里也说了,iPhon ...

  10. 算术平均数 print('arithmeticAverageSingleCompressionRatio:', sum(singleCompressionRatio)/len(singleCompressionRatio))

    print('arithmeticAverageSingleCompressionRatio:', sum(singleCompressionRatio)/len(singleCompressionR ...