zoukankan      html  css  js  c++  java
  • 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: est_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: est_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

  • 相关阅读:
    POJ 1631 Bridging signals
    POJ 1451 T9
    企业应用架构模式阅读笔记3
    论面向服务架构设计及其应用
    软件质量属性-可测试性
    企业应用架构模式阅读笔记2
    企业应用架构模式阅读笔记1
    QTP安装与破解
    Android studio打不开,双击没有反应,已解决
    hibernate框架的基本原理及实例
  • 原文地址:https://www.cnblogs.com/xiaxiaoxu/p/9228596.html
Copyright © 2011-2022 走看看