• Unittest和robot Framework 的区别



    链接:https://www.zhihu.com/question/263687755/answer/271878708

    单从做Web UI 自动化来说,这两种方案没什么区别。看个人喜好!接下来我从实现原理和优缺点两方面来介绍这两种方案。

    Selenium 支持不同的编程语言,说白了就是针对不同的编程语言都写一遍API。

    SeleniumHQ/selenium

    不理解的可以去看 selenium开源项目的目录,其中 java目录就是针对java语言的,py目录是针对python语言的,rb目录就是Ruby语言的...

    那针对 robot framework的呢?

    robotframework/SeleniumLibrary

    在这里,不过不是由 selenium团队维护,而是由 robot framework 团队维护。

    问题来了,不同的团队去写Selenium 的实现不会有偏差么?

    一般不会,因为大家都遵循 WebDriver 规范。

    WebDriver

    包括浏览器厂商,以及他们自家出的浏览器驱动。所以,你才可以这么顺畅的写一遍Selenium 脚本,任意切换浏览器来执行。

    所以,这两个方案的对比,重点是 unittest 单元测试框架和 robot framework 框架的对比!题主问到点上了,说明对这两个工具还是有所了解的。(不过,你的unittest单词拼错了噢!哈哈!)

    unittest 是基于Python的单元测试框架,所以,本质上在使用它的时候,写的还是Python语言。

    from selenium import webdriver
    import unittest
    
    
    class MyTest(unittest.TestCase):
    
        def setUp(self):
            self.driver = webdriver.Firefox()
            self.base_url = "https://www.baidu.com"
    
        def test_baidu(self):
            driver = self.driver
            driver.get(self.base_url)
            driver.find_element_by_id("kw").send_keys("selenium")
            driver.find_element_by_id("su").click()
    
        def tearDown(self):
            self.driver.quit()
    
    
    if __name__ == "__main__":
        unittest.main()

    这里贴了一个用unittest + selenium写UI 自动化测试的demo,你可以感受一下它有语法。

    优点:

    灵活,只要你懂Python开发,想怎么玩就怎么玩。想实现什么功能就实现什么功能(自动发邮件,定时任务...)。

    缺点:

    学习成本高,我们写的UI自动化项目也是项目啊。开发考虑的问题,我们也需要,比如封装,设计模式等。

    什么都要自己来,如果你想生成HTML格式的报告,还需要去找HTMLTestRunner这样扩展。

    robot framework也是基于Python的一个测试框架,不过,它是专门为了解决自动化问题而生的。并且,它封装了一套自己的语法

    *** Settings ***
    Library           SeleniumLibrary
    
    *** Test Cases ***
    Baidu search case
        Open Browser    http://www.baidu.com    chrome
        Input text    id=kw    robot framework
        click button    id=su   
        close Browser

    这里贴一个robot framework + seleniumLibrary 写的UI 自动化测试的的demo。你可以再来感受一下。

    优点:

    1、不需要懂编程也可以用。

    2、有丰富的测试库:AutoItLibraryAppiumLibraryHTTP library (Requests) ... ,所以,满足了主流的各种自动化测试需求。

    3、实再满足不了测试需求,只要你懂Python,也可以自己去开发关键字来用。

    4、便于团队推广,不是所有测试团队都懂编程的,也不是每个测试都对技术有追求的。这个时候,只要团队中有一个人懂python开发robot famework 关键字,其它人会关键字就可以。

    5、集成了非常棒的HTML测试报告,还带错误截图噢!

    缺点:

    1、一样有学习成本。robot framework 也不带录制功能;不是录个脚本随便跑的那种。

    2、robot framework 目前对Python3 的支持性不好,主要是它的扩展库的问题。

    3、我不太喜欢 robot framework的语法(我说的是我)。

    链接:https://www.zhihu.com/question/263687755/answer/271878708

    Robot Framework: 自定义自己的python库

     

    利用Robot Framework编写测试用例,往往需要开发自己的关键字,有的关键字需要通过自己编写python代码来实现。这在rf中,就需要自己定义python库。这个过程其实不复杂,本文来介绍下。

    1、在python安装目录下的 Libsite-packages 目录下 新建一个目录,目录名就是库名,如 NewLibrary

    2、在新建的NewLibrary目录下创建一个python文件,任何合法的文件名即可,扩展名为py。如:myclass.py

    其内容如下

    复制代码
    class MyClass(object):
        def __init__(self):
            pass
     
        def printMsg(self,msg):
            print "hello "+msg
    复制代码

    上面代码定义了一个python类,其中除构造方法 _init_ 外,还定义了一个printMsg方法,该方法其实就是rf中的关键字,可以直接在rf中使用。下面我们介绍。

    3、在新建的NewLibrary目录下创建 __init__.py 文件,文件名必须固定这样。该文件的功能,就是把关键字类暴露出来,让rf能知道。
    其内容如下:

    from myclass import MyClass
    
    class NewLibrary(MyClass):
        ROBOT_LIBRARY_SCOPE = 'GLOBAL'

    4、通过前面三个步骤,一个最简单的自定义的NewLibrary库就创建好了,在rf工具中就可以使用了
    1)先要导入 NewLibrary 库

    2)使用关键字printMsg。需要说明的是,在rf中引用时,既可以写成 printMsg,也可写成 print msg。一般习惯用空格把单词分开。因为rf关键字不区分大小写。

    *** Test Cases ***
    successsd
        print msg    god
        printMsg    ss
        printmsg    yy

    5、增加新的关键字
    增加新的关键字很简单,只需在MyClass类中增加新的方法即可。如:

    复制代码
    class MyClass(object):
        def __init__(self):
            pass
     
        def printMsg(self,msg):
            print "hello "+msg
            
        def join_info(self,a,b):
            print a+b
    复制代码

    这里定义了 join_info方法。在rf中使用时,可以写成 join  info 用空格分开。

    上面介绍了最简单的自定义模块,虽然简单,但实际可以满足大部分自己开发的需求了。

    https://www.cnblogs.com/51kata/p/5126227.html

  • 相关阅读:
    网络基础之物理层和数据链路层
    mysql5.6 主从不同步 存储过程大事务导致
    1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts
    973. K Closest Points to Origin
    525. Contiguous Array
    1035. Uncrossed Lines
    1008. Construct Binary Search Tree from Preorder Traversal
    986. Interval List Intersections
    451. Sort Characters By Frequency
    如何在PHP中判断当前请求的类型【转】
  • 原文地址:https://www.cnblogs.com/jiaoyang77/p/8926720.html
Copyright © 2020-2023  润新知