python 3.6 + robotFramework自动化框架 环境搭建学习笔记

Posted 软件测试自动化测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 3.6 + robotFramework自动化框架 环境搭建学习笔记相关的知识,希望对你有一定的参考价值。

目录

 一、环境搭建

1.安装相关的库

2.pycharm

3.IntelliBot 

4.pycharm配置执行器

5.fireFox浏览器及对应驱动

二、使用cmd执行

三、案例脚本(.robot文件)基本语法

1.基本语法

2.robot文件中调用自定义库

四、使用SeleniumLibrary库进行web界面自动化测试

五、数据驱动测试

 一、环境搭建

概览:win 7+ python 3.6  + pycharm + robotframework + IntelliBot + fireFox

1.安装相关的库

推荐使用pip安装,如 pip install robotframework(以及selenium2library)
研发环境没外网,采用离线安装,down包后解压--进入--python setup.py install
(1)WEB页面测试:
https://pypi.python.org/pypi/robotframework
https://pypi.python.org/pypi/selenium#downloads                      #依赖包
https://pypi.python.org/pypi/robotframework-seleniumlibrary        #依赖包
https://pypi.python.org/pypi/robotframework-selenium2library
(2)接口测试:
在线:pip install requests
离线:
https://pypi.python.org/pypi/certifi                                                 #依赖包
https://pypi.python.org/pypi/urllib3#downloads                    #依赖包
https://pypi.python.org/pypi/idna#downloads                                 #依赖包
https://pypi.python.org/pypi/chardet/#downloads                          #依赖包
https://pypi.python.org/pypi/requests#downloads


2.pycharm

开发IDE,  略


3.IntelliBot 

pycharm开发插件【语法高亮】
方法1:pycharm>File>setting>Plugins>Browse reponsitories
方法2:https://plugins.jetbrains.com/plugin/7386-intellibot   下载至本地
pycharm>File>setting>Plugins>install plugin from disk


4.pycharm配置执行器


File>setting>Tools>External tool,配置完成后即可在.robot文件中选择使用该执行器执行

Parameters:当前文件路径

Working directory:工作路径,日志、结果输出等,如下:

注:log.html   执行日志

  output.xml  执行相关信息的xml,可用于后续二次解析 

  report.xml  执行结果报表

5.fireFox浏览器及对应驱动

(1)浏览器

https://www.mozilla.org/zh-CN/firefox/developer/

(2)驱动

https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-win64.zip

解压(geckodriver.exe)拷贝至python安装目录


二、使用cmd执行

运行一条用例:
pybot --test test_case test_suit.robot

运行指定文件:
pybot test_suit.robot

运行当前目录下以.robot为后缀名的测试文件
pybot *.robot

运行当前testpath目录下的所有用例
pybot testpath


三、案例脚本(.robot文件)基本语法

1.基本语法

*** Settings ***
Library     MyLib                                          #导入自定义的库
Library     SeleniumLibrary

*** Test Cases ***
                                                            #第一行为固定格式,标识
                                                            #建议同python一致,使用tab缩进对齐(pycharm中设置tab=4空格),否则可能报执行失败,报 "Test case contains no keywords"
case1 helloworld                                            #案例名
    log     chenyuebai first rfw case                        #log 相当于python的print,可在生成的log.xml中查看

case 2 log                                                  #打异常日志,支持多种级别
    log     test line 2     ERROR

case 3 varible
    $myname     Set variable        chen                  #定义变量
    log     my name is $myname                            #使用变量

#case 4 use varible                                         #变量作用域为其定义所在的案例(case3),否则报"Variable '$myname' not found."
#    log     $myname

case 5 Catenate
    $hi1    Catenate      hello    world                  #定义变量方式2  连接两个对象,支持自定义连接符
    log    $hi1
    $hi2    Catenate      SEPARATOR=----  hello    world
    log    $hi2

case 6 list
    @mylist       create list     a       b      c        #定义列表
    log many        @mylist                               #打印列表中的元素

case 7 get time
    $currentTime      get time                            #获取当前时间     2018-01-02 18:05:47
    log     $currentTime
    $currentYear      get time    format=year             #支持多种传参,详情看函数定义
    log     current year is $currentYear

case 8 sleep
    log     get time
    sleep   1                                               #睡眠,等同于python的time.sleep(5)
    log     get time

case 9 if
    $score    set variable    55
    run keyword if    $score>=90    log    优秀
    ...    ELSE IF    $score>=70    log    良好           #ELSE/ELSE IF要大写。。。语法很蛋疼。。为啥不直接套用python的语法。。
    ...    ELSE    log    很差                              # ... 不知道基于什么考虑的。。看起来像是标识属于“run keyword if”这个判断逻辑;类似python的tab?

case 10 for                                                 #for循环,注意需要使用\\来标识这个for循环范围,感觉和上面的...类似
    :FOR    $i    IN RANGE    5                           #   for in in range(5):
    \\   log    $i                                         #        print(i)

case 11 allround the list
    @myList    create list  1    2    3    4              # myList = [1,2,3,4]
    :FOR    $i    IN    @myList                         # for i in myList:
    \\   log    $i                                         #  print(i)

case 12 Evauate                                             #调用python中的方法,很强大
    $randomNum    EVALUATE    random.random()     random  #变量    关键字EVALUATE    调用python的方法    方法所在的库名
    log    $randomNum

case 13 call my python                                      #导入自定义库,下面有详细说明
    $nowTime    get current time
    log    $nowTime

case 14 Comment
    log     start
    #line 1
    comment  line 2                                         #标明注释:使用关键字或者#均可
    log     end


case 15 Selenium2Library                      #Selenium2Library库,操作浏览器,可作web界面自动化,待细化
    open_browser    http://www.baidu.com    firefox
    Input text    id=kw    陈月白
    click button    id=su
    sleep       3
    close Browser

2.robot文件中调用自定义库

Selenium2Library提供了很多的方法,但在实际使用中仍有部分场景需要自行编写,robotFramework支持导入用户自定义的库。

需注意文件名、类名的对应关系,否则会导入库失败;

在...\\python安装路径\\Lib\\site-packages下:

(1)自定义方法所在的文件:MyKeywords.py

import time
class MyKeywords():
    def __init__(self):
        pass


    #获取当前时间
    def get_current_time(self):
        current_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
        return current_time

(2)创建__init__.py

"""
继承自定义库中的类,rfw会解析类中的函数作为关键词
"""
from .MyKeywords import *

class MyRobotFwkLib(MyKeywords):
    ROBOT_LIBRARY_SCOPE = "GLOBAL"
(3).robot文件导入自定义类,即可使用类中的方法
*** Settings ***
Library     MyRobotFwkLib                                          #导入自定义的库

case 13 call my python 
    $nowTime    get current time
    log    $nowTime

使用SeleniumLibrary库进行web界面自动化测试

SeleniumLibrary提供很多基础关键字,基本可以模拟完成浏览器上大部分操作;

另外还支持将基础关键字按业务逻辑封装为高级关键字(可以理解为一个函数,下面有例子);

支持指定多种浏览器,按元素标识操作元素;

定位元素工具我用的火狐的插件:firePath、fireBug,很方便;

基础关键字(SeleniumLibrary自带) + 高级关键字(按实际业务对基础关键字封装) + 用户自定义库中的关键字(上面有配置实例),几乎可以满足大多数web应用各种业务场景;

ps:调试时发现许多关键字无法查看定义,不方便看用法及传参,但实际执行时又没问题;

看了下SeleniumLibrary库的__init__.py,确定是因为多数涉及的关键字库,都是在启动执行时,初始化继承过来的;

于是笨方法,直接全量引入,目前来看也没什么影响。

实现项目后台登录及校验:

*** Settings ***
#方便IDE调试,不添加无法找到关键字定义
Library    browsermanagement
Library    AlertKeywords
Library    BrowserManagementKeywords
Library    CookieKeywords
Library    ElementKeywords
Library    FormElementKeywords
Library    FrameKeywords
Library    javascriptKeywords
Library    RunOnFailureKeywords
Library    ScreenshotKeywords
Library    SelectElementKeywords
Library    TableElementKeywords
Library    WaitingKeywords
Library    WindowKeywords

Library     SeleniumLibrary

#配置套件级别的Setup和Teardown
Suite Setup
...     log     now test start 1       #只执行一条

Suite Teardown    Run Keywords
...     close all browsers  AND         #执行多条
...     log     now end 4


#全局变量
*** Variables ***
$loginPageUrl    http://10.XX.XX.232:9XX0/admin/index.do?index=1
$validUsername            admin
$validloginPasswd         adminpasswd


*** Test Cases ***
case 1 correct login test
    #配置用例级别的Setup和Teardown
    [setup]         log     setup log 2
    [teardown]      log     teardown log 3

    correctLoginTest        $validUsername        $validloginPasswd     #使用基础关键字封装出的高级关键字


#使用基础关键字封装高级关键字,类似python的一个函数,支持入参出参,很灵活
*** Keywords ***
correctLoginTest
    [Arguments]    $uasename      $passwd
    open browser    $loginPageUrl     firefox
    setBrowser
    input text      xpath=html/body/div[1]/form/input[1]    $uasename
    input text      xpath=html/body/div[1]/form/input[2]    $passwd
    click element   class=submit
    sleep       5
#    $page1_title    get title                                     #获取页面title,可后续校验页面是否到达
#    $width    $height    get window size                        #获取浏览器窗口大小
#    select window    NEW                                    #切换到新弹出窗口(视图焦点)
    page should contain element     xpath=//*[@id='topMenu4']       #系统管理菜单
    sleep       2
    close all browsers


setBrowser
    set window size    1024     768                        #设置浏览器窗口大小
    maximize browser window                                 #浏览器窗口最大化
    sleep  1

数据驱动测试

数据驱动测试,适合相同流程、相同预期结果下,不同输入组合的测试

比如测试异常登录流程,用户名、密码在错误(或空)各种组合下的异常验证

例子:

*** Settings ***
Library     SeleniumLibrary
Test Template   errorLoginTest      #公共逻辑



*** Variables ***
$loginPageUrl    http://10.XX.XX.232:9XX0/admin/index.do?index=1
$validUsername            admin
$validloginPasswd         adminpasswd



*** Test Cases ***                  username                 passwd
#异常登录测试
case 2:Invalid Username            invalidname              $validloginPasswd

case 3:Invalid Password            $validUsername         invalidPasswd

case 4:Invalid Both                invalidName              invalidPasswd

case 5:Empty Username              $EMPTY                 $validloginPasswd

case 6:Empty Password              $validUsername         $EMPTY

case 7:Empty Both                  $EMPTY                 $EMPTY



*** Keywords ***
errorLoginTest
    [Arguments]    $uasename      $passwd
    open browser    $loginPageUrl     firefox
    input text      xpath=html/body/div[1]/form/input[1]    $uasename
    input text      xpath=html/body/div[1]/form/input[2]    $passwd
    click element   class=submit
    sleep     5
    page should contain element        class=submit     5      error:预期应含登录元素未找到【即跳转失败】
    sleep     5
    close all browsers

执行结果:

以上是关于python 3.6 + robotFramework自动化框架 环境搭建学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

在 conda 中将 python 从 3.5 更新到 3.6

使用conda升级到python 3.6

谷歌云:需要 python 3.6,在 ssh 中是 3.6,但在 jupyter notebook 中仍然是 3.5

在 slim python 3.6 docker 映像上运行 python mysql 客户端

如何将 python 3.7 降级到 3.6?

python-3.6中带有'f'前缀的字符串