先在cmd环境 运行 pip install ddt 安装数据驱动ddt模块 

脚本:

#encoding=utf-8

from selenium import webdriver

import unittest,time

import logging,traceback

import ddt

from selenium.common.exceptions import NoSuchElementException

#初始化日志对象

logging.basicConfig(

#日志级别

level=logging.INFO,

#日志格式

#时间、代码所在文件名、代码行号、日志级别名称、日志信息

format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s %(message)s',

#打印日志的时间

datefmt='%a, %d %b %Y %H:%M:%S',

#日志文件存放的目录(目录必须存在)及日志文件名

filename='d:/report.log',

#打开日志文件的方式

filemode='w'

)

@ddt.ddt#装饰器

class TestDemo(unittest.TestCase):

def setUp(self):

self.driver=webdriver.Firefox(executable_path='c:\\geckodriver')

#数据驱动时指定的三个数据,每个数据是一个list

@ddt.data([u"神奇动物在哪里",u"叶茨"],

[u"疯狂动物城",u"古德温"],

[u"大话西游之月光宝盒",u"周星驰"])

@ddt.unpack#解包,将测试数据对应到testdata和expectdata,将上边的list里的两个参数赋值给函数中,下边有解包的例子

def test_dataDrivenByObj(self,testdata,expectdata):#传参数

url="http://www.baidu.com"

#访问百度首页

self.driver.get(url)

#设置隐式等待时间为10秒,个别浏览器版的驱动可能会有问题,待验证

self.driver.implicitly_wait(10)

try:

#找到搜索输入框,并输入测试数据

self.driver.find_element_by_id("kw").send_keys(testdata)

#找到搜索按钮,并点击

self.driver.find_element_by_id('su').click()

time.sleep(3)

#断言期望结果是否出现在页面源代码中

self.assertTrue(expectdata in self.driver.page_source)

except NoSuchElementException,e:

logging.error("element in page not existed, abnormal stack info:"+str(traceback.format_exc()))

except AssertionError,e:

logging.info("search '%s',expected '%s', failed" %(testdata,expectdata))

except Exception,e:

logging.error("unknown error, error message:"+str(traceback.format_exc()))

else:

logging.info('search "%s", expected "%s" passed' %(testdata,expectdata))

def tearDown(self):

self.driver.quit()

if __name__=='__main__':

unittest.main()

结果:

如果日志对象没有问题的话,会把日志打到文件里,如下(第一次运行时日志对象中的filename错写成fimename了,就没有生成report.log文件,而是打印在了cmd里)

乱码是因为英文系统不支持中文导致的

D:\test_python>python task_test.py

Tue, 26 Jun 2018 12:48:12 task_test.py[line:54]INFO search "τÑ₧σÑçσè¿τë⌐σ£¿σô¬Θçî", expected "σÅΦî¿" passed

.Tue, 26 Jun 2018 12:48:28 task_test.py[line:54]INFO search "τû»τïéσè¿τë⌐σƒÄ", expected "σÅñσ╛╖µ" passed

.Tue, 26 Jun 2018 12:48:43 task_test.py[line:54]INFO search "σñºΦ»¥ΦÑ┐µ╕╕Σïµ£êσàëσ«¥τ¢Æ", expected "σæ¿µÿƒΘ⌐" passed

.

----------------------------------------------------------------------

Ran 3 tests in 47.395s

 

OK

第二次运行时,修改了日志对象,日志就打在了report.log中了,控制台没有打日志

D:\test_python>python task_test.py

...

----------------------------------------------------------------------

Ran 3 tests in 46.251s

OK

Report.log:

内容:

Tue, 26 Jun 2018 12:49:41 task_test.py[line:54]INFO search "神奇动物在哪里", expected "叶茨" passed

Tue, 26 Jun 2018 12:49:56 task_test.py[line:54]INFO search "疯狂动物城", expected "古德温" passed

Tue, 26 Jun 2018 12:50:12 task_test.py[line:54]INFO search "大话西游之月光宝盒", expected "周星驰" passed

解包的例子:

>>> def add(a,b):

...     return a+b

...

>>> add(1,2)

3

>>> add((1,2))

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: add() takes exactly 2 arguments (1 given)

#直接传元祖会报错,但是前边加个*就是解包的过程,把元素拆分出来,把元素分别赋值给add函数

>>> add(*(1,2))

3

python webdriver 测试框架-数据驱动DDT的例子的更多相关文章

  1. python webdriver 测试框架-数据驱动txt文件驱动,带报告的例子

    数据驱动txt文件驱动的方式,带报告 data.txt: gloryroad test||光荣之路 摔跤爸爸||阿米尔 超人||电影 data_driven_by_txt_file.py: #enco ...

  2. python webdriver 测试框架-数据驱动exce驱动,不用ddt的方式

    data.xlsx: 脚本: #encoding=utf-8from selenium import webdriverimport timeimport datetimefrom openpyxl ...

  3. python webdriver 测试框架-数据驱动excel驱动的方式

    简介: 数据驱动excel驱动方式,就是数据配置在excel里面,主程序调用的时候每次用从excel里取出的数据作为参数,进行操作, 需要掌握的地方是对excel的操作,要灵活的找到目标数据 测试数据 ...

  4. python webdriver 测试框架-数据驱动json文件驱动的方式

    数据驱动json文件的方式 test_data_list.json: [ "邓肯||蒂姆", "乔丹||迈克尔", "库里||斯蒂芬", & ...

  5. python webdriver 测试框架-数据驱动xml驱动方式

    数据驱动xml驱动的方式 存数据的xml文件:TestData.xml: <?xml version="1.0" encoding="utf-8"?> ...

  6. python webdriver 测试框架-行为驱动例子

    安装行为驱动模块lettuce(卷心菜)模块 pip install lettuce Successfully installed argparse-1.4.0 colorama-0.3.9 extr ...

  7. Python3-unittest测试框架之DDT数据驱动

    unittest测试框架之DDT数据驱动 ddt的使用 DDT数据驱动 DDT:Data Driver Test(数据驱动测试) 数据驱动思想:数据和用例进行分离,通过外部数据去生成测试用例 安装 p ...

  8. python nose测试框架全面介绍十---用例的跳过

    又来写nose了,这次主要介绍nose中的用例跳过应用,之前也有介绍,见python nose测试框架全面介绍四,但介绍的不详细.下面详细解析下 nose自带的SkipTest 先看看nose自带的S ...

  9. python nose测试框架全面介绍七--日志相关

    引: 之前使用nose框架时,一直使用--logging-config的log文件来生成日志,具体的log配置可见之前python nose测试框架全面介绍四. 但使用一段时间后,发出一个问题,生成的 ...

随机推荐

  1. poj_1182 并查集

    题目大意 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B,B吃C,C吃A.现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人 ...

  2. outline的兼容性及使用限制

    outline 和 border的区别: outline不占据文档空间,border占据文档空间. outline无法单独设置上下左右,只要设置outline,必须所有的边都设置:border可以设置 ...

  3. 关于sencha touch 用phonegap打包后,docked悬停的组件被手机软键盘遮挡的解决方法

    这个问题应该算是phonegap的一个bug,在mainifest.xml 里android:windowSoftInputMode设置成了adjustpan,理论上不会出现遮挡悬停组件这种情况, 不 ...

  4. 【BZOJ4429】[Nwerc2015] Elementary Math小学数学 最大流

    [BZOJ4429][Nwerc2015] Elementary Math小学数学 Description Ellen给她的学生教小学数学.期末考试已经来临了.考试有n个题目,每一个题目学生们都要对一 ...

  5. mysql数据库LOAD DATA INFILE Syntax

    1.LOAD DATA INFILE用来把一个文本文件里的内容高速写入到MySQL表里,它和SELECT ... INTO FILE的操作是对应的,一个导入.一个导出.使用LOAD DATA INFI ...

  6. Oracle命令(三):Oracle用户

    1.显示当前用户名 select user from dual; show user 2.显示当然用户有哪些表 select * from tab; 3.显示当所有用户的表 select * from ...

  7. 170505、MySQL的or/in/union与索引优化

    假设订单业务表结构为: order(oid, date, uid, status, money, time, …) 其中: oid,订单ID,主键 date,下单日期,有普通索引,管理后台经常按照da ...

  8. pandas读取保存数据

    将本人使用过的一些操作记录下来 1.读取数据,使用:data = pd.read_csv('./data/file.csv') 2.数据处理,如果你要修改某一个数据,其实把DATAFRAME数据看做是 ...

  9. Ora-1157 ora-1110错误解决案例一枚

    1.数据库打开报错如下: SQL> alter database open; alter database open * ERROR at line 1: ORA-01157: cannot i ...

  10. mysql线上负载高怎么排查

    作为一个开发人员或者数据库管理员,学会检查数据库运行情况是必不可少的工作.造成MySQL线程卡顿的原因有很多,但是无论是哪种原因,我们发现问题之后的第一要务就是解决问题,防止问题继续恶化.那么,应该如 ...