自动化测试之RobotFramework框架

自动化测试之RobotFramework框架

很久没更新,因为我跳槽了,之前学习了入门级别性能测试的Jmeter,发现自由度真的差,又想着找一个上限比较高的python测开的工作,所以换到了现在的工作。我们公司使用的是wxpython基于ride平台的Robot Framework框架。没办法,我觉得我就是三天打鱼两天晒网的代表,常立志不能立长志。希望自己在python的路上坚持走下去。你我,共勉!

一、Robot Framework 框架介绍

1、官方定义:
Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架,用于端到端验收测试和验收测试驱动开发(ATDD)。它可用于测试分布式异构应用程序,其中验证需要涉及多种技术和接口。
2、Robot Framework优点:
启用易于使用的表格语法,以统一的方式创建测试用例。
提供从现有关键字创建可重复使用的更高级别关键字的功能。
提供易于阅读的结果报告和HTML格式的日志。
平台和应用程序是独立的。
提供一个简单的库API,用于创建自定义测试库,可以使用Python或Java本机实现。
提供命令行界面和基于XML的输出文件, 以便集成到现有构建基础架构(持续集成系统)中。
为Selenium提供Web测试,Java GUI测试,运行进程,Telnet,SSH等支持。
支持创建数据驱动的测试用例。
内置对变量的支持,特别适用于不同环境下的测试。
提供标记以分类和选择要执行的测试用例。
实现与源代码控制的轻松集成:测试套件只是可以使用生产代码进行版本控制的文件和目录。
提供测试用例和测试套件级别的设置和拆卸。
模块化架构支持创建测试,即使对于具有多种不同接口的应用程序。

说人话就是
类比于语言 print(“hello world”)可以直接用一个变量再去映射对应的方法,类似于二次封装sdk,比较方便测试人员测试。

二、介绍*(水)*完了,直接来说说Ride平台

1.首先说下Ride平台与python脚本的关系

  1. Ride平台类似于一个windows窗体应用程序界面,其是根据robot文件编辑及运行的。
  2. 在robot文件内可以调用你想运行已导入的python库文件内的关键字(可以以方法来理解)。
  3. 在使用执行测试用例时会首先找到关键字,依据关键字内容调用方法,直接执行到python文件内部方法,基本上使用ride的所有库均可在python中找到,也就是说,可以更方便的实现基于ride平台的二次pyhon开发。

2.ride3平台的安装及使用

  1. 请自行安装python,python2已经不再使用了,基本不会使用python2,当然,ride3是可以基于python2 run的。教程在这里:传送门
  2. 使用pip安装,分别cmd窗口执行下面命令,已安装的忽略就行,-i 后面换了豆瓣源 好用,比较快。
pip install robotframework==4.1.3 -i https://pypi.douban.com/simple/
pip install robotframework-ride==1.7.4.2 -i https://pypi.douban.com/simple/
pip install wxPython==4.0.7.post2 -i https://pypi.douban.com/simple/
  1. 完成后双击打开ride就行了,如果出现闪退了,检查wxpython库版本,具体不细说,使用教程在这里:传送门

3、二次开发

上面第2.3传送门内前字节工程师已经很清晰的告诉了大家使用方法,不做赘述,自定义关键字的东西在测试开发封装好之后测试人员在处理简单且重复的逻辑时很好用,但是对测试可变性提升有限,我们基于这个平台进行了二次开发,使用封装好的一个关键字去调用对应的测试文件内的方法,可能有些脱裤子放屁,求清喷。下面分享写法。

  1. 自定义关键字为类内的run,方便传参,下面为公司项目,代码有删减
def run_test(self, tc_name, dut_type="STA", use_tb="1", run_times=1, tc_path=u'./'):
    # try:
    run_times = int(run_times)
    loop = run_times
    while run_times:
        run_times -= 1
        _debug("start run {} times".format(loop - run_times))
        print(tc_name)
        # assert isinstance(tc_name, unicode), 'tc_name should be unicode'
        assert isinstance(run_times, int), 'run_times should be int'
        global curr_tc_name
        global curr_tc_dir
        tc_file_name = tc_name + '.py'
        tc_file_full_path = None
        dst_dir = "plc_system_test"
        s1 = os.getcwd()
        indextmp = str.index(s1, dst_dir)
        indextmp += len(dst_dir) + 1
        tc_path = s1[:indextmp]
        if tc_path[-1] != r'\\':
            tc_path += r"\\"
        _debug(tc_path)
        dirpath = ""
        for dirpath, dirs, files in os.walk(tc_path + u'tc'):
            if tc_file_name in files:
                tc_file_full_path = os.path.join(dirpath, tc_file_name)
                break

        assert tc_file_full_path is not None, '{} not found'.format(tc_name)
        self.dir_path = dirpath
        curr_tc_name = tc_name
        curr_tc_dir = dirpath
        tc = imp.load_source(tc_name, tc_file_full_path)
	tc.run(self)

2、ride新建项目,导入自定义关键字,ride编写,直接run test 加对应的python脚本case名及对应的参数传进去即可。

*** Settings ***
Test Setup        Init Test
Test Teardown     Record Test Status
Library           OperatingSystem
Library           Process
Library           plc_tb_ctrl
Library           plc_tb_ctrl.PlcSystemTestbench

*** Test Cases ***
case 3.3.9.10
    run test    tc_3_3_9_10    a    0

3、新建python文件,写个run方法进行对应测试即可,搭配pycharm /vscode更方便编辑。代码略。

三、容易遇到的坑

  1. ride平台在新建测试case时,其传进去的参数及python测试case名称不支持区分大小写
  2. ride中文打印乱码问题,修改对应的python安装库文件编码格式即可
    \Lib\site-packages\robotide\contrib\testrunner\testrunnerplugin.py文件:第82行
    encoding = {‘CONSOLE’: CONSOLE_ENCODING,‘SYSTEM’: OUTPUT_ENCODING,‘OUTPUT’: OUTPUT_ENCODING}

上面是2年前的草稿,后面会慢慢更新pyhon及通信协议栈方面的知识

你可能感兴趣的:(python,开发语言,自动化)