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

 一、环境搭建

概览: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     ERRORcase 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    worldlog    ${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:47log     ${currentTime}${currentYear}      get time    format=year             #支持多种传参,详情看函数定义log     current year is ${currentYear}case 8 sleeplog     get timesleep   1                                               #睡眠,等同于python的time.sleep(5)log     get timecase 9 if${score}    set variable    55run 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 timelog    ${nowTime}case 14 Commentlog     start#line 1comment  line 2                                         #标明注释:使用关键字或者#均可log     endcase 15 Selenium2Library                      #Selenium2Library库,操作浏览器,可作web界面自动化,待细化open_browser    http://www.baidu.com    firefoxInput text    id=kw    陈月白click button    id=susleep       3close 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 timelog    ${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    WindowKeywordsLibrary     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 3correctLoginTest        ${validUsername}        ${validloginPasswd}     #使用基础关键字封装出的高级关键字#使用基础关键字封装高级关键字,类似python的一个函数,支持入参出参,很灵活
*** Keywords ***
correctLoginTest[Arguments]    ${uasename}      ${passwd}open browser    ${loginPageUrl}     firefoxsetBrowserinput text      xpath=html/body/div[1]/form/input[1]    ${uasename}input text      xpath=html/body/div[1]/form/input[2]    ${passwd}click element   class=submitsleep       5
#    ${page1_title}    get title                                     #获取页面title,可后续校验页面是否到达
#    ${width}    ${height}    get window size                        #获取浏览器窗口大小
#    select window    NEW                                    #切换到新弹出窗口(视图焦点)page should contain element     xpath=//*[@id='topMenu4']       #系统管理菜单sleep       2close all browserssetBrowserset 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}         invalidPasswdcase 4:Invalid Both                invalidName              invalidPasswdcase 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}     firefoxinput text      xpath=html/body/div[1]/form/input[1]    ${uasename}input text      xpath=html/body/div[1]/form/input[2]    ${passwd}click element   class=submitsleep     5page should contain element        class=submit     5      error:预期应含登录元素未找到【即跳转失败】sleep     5close all browsers

 

执行结果:

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/324132.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

buildroot 编译错误【001】

在GitHub 查找错误,也挺好用 解决办法 fakeroot 错误

通过聚道云软件连接器实现金蝶软件与客如云软件的无缝对接

客户介绍 某知名冷饮连锁品牌是国内一家拥有数千家门店的知名品牌,作为一家专注于冷饮和甜品的企业,我们致力于提供高品质、健康美味的食品,为消费者带来冰凉的甜蜜与畅快的口感。 我们始终坚持选用优质原料,严格把控生产流程&a…

二叉搜索树与双向链表

解题思路一: /** public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeNode(int val) {this.val val;} } */ // 一定要用自己的理解真正弄出来才行,否则没有用! // 再次提醒,计算机这种工科…

vue中动态出来返回的时间秒数,在多少范围显示多少秒,多少范围显示分,小时等等

在Vue中&#xff0c;你可以使用计算属性&#xff08;computed property&#xff09;或过滤器&#xff08;filter&#xff09;来根据动态返回的时间秒数来显示不同的时间单位&#xff0c;比如秒、分、小时等等。 下面是一个使用计算属性的示例&#xff1a; <template>&l…

正则表达式解析与应用:深度剖析正则表达式的威力

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

柯桥职场英语中千万别把英文邮件中的“OOO”理解成“哦哦哦”!不然可就尴尬了!

有的同学工作中跟老外打交道比较多 尤其是写邮件&#xff0c;除了要把事情交代清楚 还有一些缩写我们也必须掌握 就拿发邮件时老外最爱用到的“OOO”来说 千万不要把“OOO”理解成“噢噢噢” 今天给大家分享几个关于邮件的常用表达 它们真正的意思你都知道吗 01 “OOO”可…

视频文字想要提取应该使用哪些软件呢

随着短视频的兴起&#xff0c;快手成为了很多人喜爱的平台。有时候&#xff0c;我们看到一些有趣的视频&#xff0c;想要提取其中的文字内容&#xff0c;却不知道该如何操作。今天&#xff0c;我们就来介绍一种使用水印云快手提取视频文字的方法。 首先&#xff0c;我们需要下…

超维空间M1无人机使用说明书——21、基于opencv的人脸识别

引言&#xff1a;M1型号无人机不仅提供了yolo进行物体识别&#xff0c;也增加了基于opencv的人脸识别功能包&#xff0c;仅需要启动摄像头和识别节点即可 一、一键启动摄像头和人脸识别节点 roslaunch robot_bringup bringup_face_detect.launch无报错&#xff0c;出现以下界…

数据结构期末复习(1)数据结构和算法 线性表

数据结构期末总复习&#xff08;gaois课堂版&#xff09; 数据结构的概念 数据结构是计算机科学中的一个重要概念&#xff0c;它指的是组织和存储数据的方式。数据结构可以帮助我们高效地操作和管理数据&#xff0c;使得计算机程序能够更加有效地执行各种任务。 数据结构有很…

设计模式——迭代器模式(Iterator Pattern)

概述 迭代器模式(Iterator Pattern)&#xff1a;提供一种方法来访问聚合对象&#xff0c;而不用暴露这个对象的内部表示&#xff0c;其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。 在软件开发中&#xff0c;我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有…

数据结构与算法之美学习笔记:42 | 动态规划实战:如何实现搜索引擎中的拼写纠错功能?

目录 前言如何量化两个字符串的相似度&#xff1f;如何编程计算莱文斯坦距离&#xff1f;如何编程计算最长公共子串长度&#xff1f;解答开篇 前言 本节课程思维导图&#xff1a; 利用 Trie 树&#xff0c;可以实现搜索引擎的关键词提示功能&#xff0c;这样可以节省用户输入搜…