python webdriver 测试框架-数据驱动DDT的例子

Posted 夏晓旭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python webdriver 测试框架-数据驱动DDT的例子相关的知识,希望对你有一定的参考价值。

先在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的例子的主要内容,如果未能解决你的问题,请参考以下文章

python webdriver 测试框架--数据驱动之Excel驱动

python webdriver 一步一步搭建数据驱动测试框架的过程和总结

selenium + python自动化测试unittest框架学习webdriver的二次封装

selenium + python自动化测试unittest框架学习webdriver元素定位

免费送书 | python版《Selenium WebDriver 3.0 自动化测试框架实战指南》

selenium + python自动化测试unittest框架学习webdriver元素操作