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安装目录下的 Lib\site-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

posted @ 2018-04-24 10:37  闪电旅途  阅读(5103)  评论(0编辑  收藏  举报