contenido
1. Instale las bibliotecas relevantes
Ejecutor de configuración 4.pycharm
navegador 5.fireFox y controlador correspondiente
Segundo, use cmd para ejecutar
3. Sintaxis básica del script de caso (archivo .robot)
2. Llame a la biblioteca personalizada en el archivo de robot
Cuarto, use la biblioteca SeleniumLibrary para la prueba de automatización de la interfaz web
1. Construcción del entorno
Descripción general: ganar 7+ python 3.6 + pycharm + robotframework + IntelliBot + fireFox
1. Instale las bibliotecas relevantes
Se recomienda usar pip para instalar, como pip install robotframework (y selenium2library).
El entorno de I + D no tiene una red externa. Se usa la instalación fuera de línea. Después de descargar el paquete, descomprima -- ingrese -- python setup.py install
(1 ) Prueba de página WEB: https://pypi.python.org/pypi/robotframework https://pypi.python.org/pypi/selenium#downloads #Paquete de
dependencia https://pypi.python.org/pypi/robotframework- seleniumlibrary #Paquete de dependencia https://pypi.python .org/pypi/robotframework-selenium2library (2) Prueba de interfaz: En línea: solicitudes de instalación de pip Fuera de línea: https://pypi.python.org/pypi/certifi #Paquete de dependencia https: //pypi.python.org/pypi/urllib3 #descargas #paquete dependientehttps://pypi.python.org/pypi/idna#descargas #paquete dependiente
https://pypi.python.org/pypi/chardet/#downloads #paquete de dependencia
https://pypi.python.org/pypi/requests#downloads
2.pycharm
IDE de desarrollo, ligeramente
3. IntelliBot
complemento de desarrollo de pycharm [resaltado de sintaxis]
Método 1: pycharm>Archivo>configuración>Complementos>Examinar repositorios
Método 2: https://plugins.jetbrains.com/plugin/7386-intellibot Descargar a
pycharm local>Archivo>configuración>Complementos> instalar complemento desde el disco
Ejecutor de configuración 4.pycharm
Archivo>configuración>Herramientas>Herramienta externa, una vez completada la configuración, puede elegir usar este ejecutor en el archivo .robot para ejecutar
Parámetros: ruta del archivo actual
Directorio de trabajo: ruta de trabajo, registro, salida de resultados, etc., de la siguiente manera:
Nota: registro de ejecución log.html
output.xml ejecuta el xml de la información relevante, que se puede utilizar para el análisis secundario posterior
informe de resultados de ejecución report.xml
navegador 5.fireFox y controlador correspondiente
(1) navegador
https://www.mozilla.org/zh-CN/firefox/developer/
(2) conducir
https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-win64.zip
Descomprima (geckodriver.exe) y cópielo en el directorio de instalación de python
Segundo, use cmd para ejecutar
Ejecute un caso de prueba:
pybot --test test_case test_suit.robot
Ejecute el archivo especificado:
pybot test_suit.robot
Ejecute el archivo de prueba con el sufijo .robot en el directorio actual
pybot *.robot
Ejecute todos los casos de prueba en el directorio
testpath actual pybot testpath
3. Sintaxis básica del script de caso (archivo .robot)
1. Gramática básica
*** 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. Llame a la biblioteca personalizada en el archivo de robot
Selenium2Library proporciona muchos métodos, pero todavía hay algunos escenarios que deben escribirse por sí mismos en el uso real.RobotFramework admite la importación de bibliotecas definidas por el usuario.
Preste atención a la correspondencia entre el nombre del archivo y el nombre de la clase, de lo contrario, la biblioteca de importación fallará;
En ...\ruta de instalación de Python\Lib\site-packages:
(1) El archivo donde se encuentra el método personalizado: 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) Crear __init__.py
"""
继承自定义库中的类,rfw会解析类中的函数作为关键词
"""
from .MyKeywords import *
class MyRobotFwkLib(MyKeywords):
ROBOT_LIBRARY_SCOPE = "GLOBAL"
(3) El archivo .robot importa la clase personalizada y puede usar los métodos en la clase
*** Settings ***
Library MyRobotFwkLib #导入自定义的库
case 13 call my python
${nowTime} get current time
log ${nowTime}
Cuarto , use la biblioteca SeleniumLibrary para la prueba de automatización de la interfaz web
SeleniumLibrary proporciona muchas palabras clave básicas, que básicamente pueden simular la mayoría de las operaciones en el navegador;
Además, también admite la encapsulación de palabras clave básicas en palabras clave avanzadas de acuerdo con la lógica comercial (que se puede entender como una función, hay ejemplos a continuación);
Admite la especificación de múltiples navegadores y elementos operativos por identificación de elementos;
Los complementos de Firefox que uso para herramientas de elementos de posicionamiento: firePath, fireBug , muy convenientes;
Palabras clave básicas (incluidas en SeleniumLibrary) + palabras clave avanzadas (encapsulan palabras clave básicas de acuerdo con el negocio real) + palabras clave en bibliotecas definidas por el usuario (con ejemplos de configuración anteriores), que casi pueden cumplir con varios escenarios comerciales de la mayoría de las aplicaciones web;
pd: durante la depuración, se encuentra que muchas palabras clave no se pueden ver ni definir, lo cual es un inconveniente para ver el uso y la transferencia de parámetros, pero no hay problema en la ejecución real;
Mirando el __init__.py de la biblioteca SeleniumLibrary, se determina que la mayoría de las bibliotecas de palabras clave involucradas se heredan de la inicialización cuando se inicia la ejecución;
Entonces, el método estúpido se introduce directamente en su totalidad y no tiene ningún efecto en la actualidad.
Realice el inicio de sesión y la verificación en segundo plano del proyecto:
*** 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
5. Pruebas basadas en datos
Pruebas basadas en datos, adecuadas para probar con diferentes combinaciones de entrada bajo el mismo proceso y los mismos resultados esperados
Por ejemplo, pruebe el proceso de inicio de sesión anormal, la verificación anormal del nombre de usuario y la contraseña bajo varias combinaciones de errores (o vacíos)
ejemplo:
*** 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
Resultados de la: