从零学习基于Python的RobotFramework自动化

一、        Python基础

1)      版本差异

版本

编码

语法

其他

2.X

ASCII

try:

raise TypeError, 类型错误"

except TypeError, err:

print err.message

……

3.X

UTF-8

try:

raise TypeError("类型错误")

except TypeError as err:

print(err)

去除不等于<>

去除long类型

新增bytes类型

2)      输入输出

text = input('Enter any content : ')       #输入

print("Your input content is : %s" % text)     #输出        
=============== C:\Python37\python.exe E: /TestScript.py ====================== Enter any content : who am I. Your input content is : who am I.

____________________________________________________________________________________________

3)      分支循环

for i in range(10):                #range(start, stop[, step])

    if i % 2 == 0:

        print(i, end=' ')
=============== C:\Python37\python.exe E: /TestScript.py ====================== 0 2 4 6 8

____________________________________________________________________________________________

4)      数据类型

a = 123         #整型 int()

b = ''           #字符串 str()

c = [1, 2, 3]          #列表 list()

d = (1, 2, 3)          #元组 tuple()

e = {1, 2, 3}          #集合 set()

f = {'aa': 1, 'bb': 2}       #字典 dict()

注意:

  • 字符串、列表、元组均可以通过索引获取值,以及截取部分。例如:a[0] >>> 1,b[1:-]>>> '2'。
  • 整型、字符串、元组数据不可变; 集合是无序唯一的; 字典中key必须唯一且与value成对。

____________________________________________________________________________________________

5)      函数方法

class Operation():          #类定义

    def add(self, a, b):    #方法定义

        return a + b        #返回结果

opt = Operation()           #实例化类

print(opt.add(3, 5))        #调用类方法
=============== C:\Python37\python.exe E: /TestScript.py ====================== 8

____________________________________________________________________________________________

6)      模块导入

from robot.api import logger

import configparser

____________________________________________________________________________________________

7)      异常报错

²   KeyboardInterrupt         Ctrl+C被按下

²   AttributeError                 试图访问对象没有的属性(比如foo没有属性x,却试图访问foo.x)

²   IOError                          输入/输出异常(一般是无法打开文件)

²   ImportError                    无法引入模块或包(一般是名称或路径错误,或者是无此第三方包)

²   IndentationError           语法错误(一般是代码没有正确对齐)

²   SyntaxError                   代码非法,代码不能编译(一般是语法错误,写错了)

²   NameError                    使用一个还未被赋予对象的变量

²   IndexError                     下标索引超出序列边界,(比如f只有3个元素,却试图访问f[5])

²   TypeError                      传入对象类型与要求的不符合

²   KeyError                       试图访问字典里不存在的键

²   ValueError                    传入一个调用者不期望的值

二、        RobotFramework基础

1)      版本差异

版本

安装

支持

运行

其他

1.5.X之前

wxPython2.8.x

Pyhton2.x

pybat
robot
jybot

……

1.7.X之后

wxPython4.0.x

Pyhton2.x
Pyhton3.x

robot
jybot
custom script

新增debug模式
Edit新增字体色
Grid新增json校验

2)     
输入输出

Import Library    Dialogs                                                 

${username} =     Get Value From User            Input user name           default      

Log               ${username}                                                    

=======================================================

20190724 12:37:36.010 :  INFO : ${username} = zhangsir

20190724 12:37:36.010 :  INFO : zhangsir

_________________________________________________________________________________

3)      分支循环

FOR      ${i}              IN RANGE       5                           

         Run Keyword If     ${i}%2==0      Log        ${i}    
END ======================================================= 20190724 12:51:55.658 : INFO : 0 20190724 12:51:55.658 : INFO : 2 20190724 12:51:55.658 : INFO : 4

________________________________________________________________________________

4)      数据类型

${a}=       Set Variable          ${123}                                                     

${b}=       Set Variable          123                                                         

@{c}=       Create List            1           2          3                                

&{d}=      Create Dictionary      aa=1       bb=2      cc=3                                                     

=======================================================

20190724 13:44:11.701 :  INFO : ${a} = 123

20190724 13:44:11.717 :  INFO : ${b} = 123

20190724 13:44:11.717 :  INFO : @{c} = [ 1 | 2 | 3 ]

20190724 13:44:11.717 :  INFO : &{d} = { aa=1 | bb=2 | cc=3 }

20190724 13:44:11.717 :  INFO : 123

20190724 13:44:11.717 :  INFO : 123

20190724 13:44:11.717 :  INFO : ['', '', '']

20190724 13:44:11.717 :  INFO : {'aa': '', 'bb': '', 'cc': ''}

________________________________________________________________________________

5)      函数方法

*** Keywords ***                                                                                

Library  MyLibrary                                                                                                                                                    

*** Keywords ***                                                                                      

Query Redis String                                                                                    

      [Arguments]      ${key}             ${db}=8                                             

      ${conn}        Connected To Redis      ${db}                                     

      ${result}      Get From Redis      ${conn}      ${key}                      

      [Return]      ${result}      

________________________________________________________________________________

6)      模块导入

Import Library      MyLibrary                                                                 

Import Resource     BasicResource.robot                                                 

Import Variables    ${adultCode}          

________________________________________________________________________________

7)      异常报错

=======================================================

20190724 14:08:07.692 :  INFO : 123

20190724 14:08:07.692 :  FAIL :

Replacing variables from setting 'Variables' failed: Variable '${test}' not found. Did you mean:

    ${TEST_TAGS}

    ${TEST_NAME}

20190724 14:08:07.692 : DEBUG :

Traceback (most recent call last):

  None

三、        RobotFramework常用关键字

1)      Evaluate关键字

以Python模式计算指定的表达式并返回结果。

    • ${random} =   Evaluate random.randint(0, sys.maxint)      modules=random, sys

2)      Should系列关键字

用于判断校验测试结果。

    • Should Be Empty:如果指定对象不为空则失败(反之Should Not …)。

    • Should Be Equal:如果指定对象不相等则失败(反之Should Not …)。

    • Should Be True:如果指定条件不成立则失败(反之Should Not …)。

    • Should Contain:如果指定对象不包含则失败(反之Should Not …)。

    • ……

3)      Convert系列关键字

用于数据的类型转换。

    • Convert To Integer:将指定项转换为整数。

    • Convert To Number:将指定项转换为浮点数。

    • Convert To String:将指定项转换为unicode字符串。

    • ……

4)      Run Keyword系列关键字

根据判断条件的真假执行关键字

    • Run Keyword If:如果条件为真,则使用指定的参数运行指定的关键字。

    • Run Keyword Unless:如果条件为假,则使用指定的参数运行指定的关键字。

    • Run Keyword:使用指定的参数执行指定的关键字。

    • Run Keywords:按顺序执行所有指定的关键字(使用AND连接)。

    • ……

5)      Get系列关键字

根据关键字作用获取值。

    • Get Count:返回item1中出现item2的次数。

    • Get Length:返回指定项的长度。

    • Get Time:返回指定格式时间。

    • ……

6)      Set系列关键字

设置参数或变量。

    • Set Variable:设置变量。

    • Set Variable If:根据指定条件设置变量。

    • Set Log Level:设置日志登记。

    • ……

7)      其他关键字

    • Sleep:强制休眠指定时间(秒)。

    • Catenate:连接多个字符串(默认有空格)。

    • Call Method:使用提供的参数调用指定对象的方法。

    • Exit For Loop If:如果条件为真,则结束FOR循环。

四、        RobotFramework安装

1)      安装Python3.x

首先运行python-3.7.3-amd64.exe,勾选“Add Path…”,最好选择自定义安装在根目录。

然后打开DOS命令窗口,分别输入python --version和pip –version,显示对应判断则安装成功。

2)      安装相关模块

pip install redis

pip install pysolr

pip install pymysql

pip install robotframework

pip install robotframework-ride

pip install robotframework-requests  # 用于接口测试

pip install robotframework-databaselibrary  # 用于数据库测试

3)      自定义库管理

把自定义文件包放到Python目录下Lib/site-packages即可。

4)      常见错误处理

  • 运行RF3.X报错,提示信息“python2.x调用失败”?

  这是由于你之前安装过RF2.X,切换到RF3.X后数据文件未清除导致。

  请在系统盘搜索librarykeywords.db文件并删除(AppData\Roaming\RobotFramework\ride),重启RIDE。

   

  • 运行RF3.X报错,提示信息“找不到pybat”?

    这是因为RF3.X去除了pybat模式,合并到了robot模式。请更改执行模式为robot,并更改用例文件格式为.robot。

   

五、        日期时间处理

1)      日期格式

l   常见形式: 2019-07-20 18:45:18(格式化"%Y-%m-%d %H:%M:%S")

l   Solr库: 2019-07-20T18:45:18Z(格式化"%Y-%m-%dT%H:%M:%SZ")

l   Redis库: Jul 7, 2019 6:45:18 PM(格式化"%b %d, %Y %I:%M:%S %p")

l   MySQL库: datetime.datetime(2019, 7, 20, 18, 45, 18)

l   含毫秒: 2019-07-20 18:45:18.000(格式化"%Y-%m-%d %H:%M:%S.%f")

l   时间戳: 1564453476000

l   其他: 20190720184518(格式化"%Y%m%d%H%M%S")

2)      处理方法

※  Convert Date:转换日期格式,可指定输入输出格式(epoch表示时间戳)。

参数:

date: 日期字符串

result_format: 返回的日期格式,

exclude_millis: 是否舍去毫秒

date_format: 格式化的日期格式

示例:

| Convert Date   |   2014-05-28 12:05:03.111 |  result_format=epoch           |  #返回'1401267903.111'   |

| Convert Date   |   Jul 7, 2019 6:45:18 PM  |  date_format=%b %d, %Y %I:%M:%S %p  |  #返回'2014-05-28 12:05:03'|

※  Get Current Date:获取当前日期时间,可指定输出格式。

参数:

time_zone:获取此时区的当前时间(目前仅支持本地和UTC)

increment:设置返回日期时间增量,可为负数

result_format:返回日期的格式。

exclude_millis:是否舍去毫秒

示例:

|   Get Current Date  |   result_format=%Y-%m-%d |         #返回当天日期    |

六、        JSON处理

1)     标准格式

{

"key1": {

"key2": 123,

"key3": "123",

"key4": [1, 2, 3],

"key5": {"key": "value"}

},

"key6": true,

"key7": null

}

 

2)     处理方法

※  Get Json Value:获取JSON中指定目标节点值。

参数:

json_string:JSON文档

json_pointer:JSON节点

示例:

| ${result}=        | Get Json Value   | {"foo": {"bar": [1,2,3]}}      | /foo/bar |

| Should Be Equal  | ${result}         | [1, 2, 3]                  |

※  Set Json Value:设置JSON中指定目标节点值。

参数:

json_string:JSON文档

json_pointer:JSON节点

json_value:JSON值

示例:

| ${result}=        | Set Json Value       | {"foo": {"bar": [1,2,3]}}      | /foo | 123 |

| Should Be Equal  | ${result}             | {"foo": 123}              |

七、   Jenkins集成

从零学习基于Python的RobotFramework自动化的更多相关文章

  1. 基于python的webUI自动化-小白基础篇

    最近打算研究一下基于python的webUI自动化,先自学了一下相关基础知识,大概用了一个多月的时间,主要是找视频,一边看视频或者文档一边对照着敲代码运行. 重点强调:一定要一边看一边对照着敲代码运行 ...

  2. ShutIt:一个基于 Python 的 shell 自动化框架

    ShutIt是一个易于使用的基于shell的自动化框架.它对基于python的expect库(pexpect)进行了包装.你可以把它看作是“没有痛点的expect”.它可以通过pip进行安装. Hel ...

  3. 基于Python的接口自动化-01

    为什么要做接口测试 当前互联网产品迭代速度越来越快,由之前的2-3个月到个把月,再到班车制,甚至更短,每次发版之前都需要对所有功能进行回归测试,在人力资源有限的情况下,做自动化测试很有必要.由于UI更 ...

  4. 基于Python的接口自动化

    第一步 Python的安装配置 打开官网: https://www.python.org/downloads/ 目前官网上已经更新到3.6.1啦,有两个版本,大家可以按自己喜欢的去下载,我自己选择的是 ...

  5. 20191108-从零搭建基于Linux的RobotFramework框架

    第一步:安装Centos7 64位操作系统 直接安装即可,不详述 第二步:yum下载wget yum update yum install wget 第三步:安装Python3 建议安装3.7,我在 ...

  6. centos7 打造基于python语言Selenium2自动化开发环境

    1. 准备 安装模块 # yum groupinstall "Development tools" # yum install zlib-devel bzip2-devel ope ...

  7. 基于Python的接口自动化实战-基础篇之读写配置文件

    引言 在编写接口自动化测试脚本时,有时我们需要在代码中定义变量并给变量固定的赋值.为了统一管理和操作这些固定的变量,咱们一般会将这些固定的变量以一定规则配置到指定的配置文件中,后续需要用到这些变量和变 ...

  8. 基于Python的接口自动化实战-基础篇之pymysql模块操作数据库

    引言 在进行功能或者接口测试时常常需要通过连接数据库,操作和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操作是否正确等.因此,在进行接口自动化测试时,我们一样绕不开接 ...

  9. 基于Python的接口自动化-读写excel文件

    引言 使用python进行接口测试时常常需要接口用例测试数据.断言接口功能.验证接口响应状态等,如果大量的接口测试用例脚本都将接口测试用例数据写在脚本文件中,这样写出来整个接口测试用例脚本代码将看起来 ...

随机推荐

  1. 数据库常用SQL语句(三):子查询

    一.为什么会使用子查询 虽然可以通过连接查询来实现多表查询数据记录,但不建议使用,因为连接查询的性能很差,为什么呢?我们来进行分析,例如 我们要查询部门表t_dept 和雇员表t_employee中的 ...

  2. 理解Yarn的执行流程和组件作用

    Yarn引入案例 1.学生找院长报到,院长给学生一个学号 2.院长比较忙,继续找主任处理学生事务 3.系主任找院办给学生分配资源(书本) 4.主任找张老师教授java 5.张老师给学生安排座位 6.学 ...

  3. 十天快速入门Python

    课程导学 001 课程定位和目标 002 课程导学 第一部分 Python快速入门 第1天 Python基本语法元素 003 Python基本语法元素 004 程序设计基本方法 005 Python开 ...

  4. SSM框架学习笔记(一)

    Spring框架 Spring :是一个开源框架,起初是为解决企业应用开发的复杂性而创建的,但是现在已经不止 企业级应用开发,Spring的核心就是提供了一个轻量级的控制反转和面向切面编程. SPri ...

  5. [币严区块链]BitcoinCash - BCH钱包地址生成与扫块充值监控(JAVA版)

    本文的方案无需自建节点,因为BCH当前区块数据大小已经达到200G以上,BTC区块数据也已超过300G,若每个币都自建节点,对云服务器的消耗会非常大. 认识BitcoinCash(BCH) Bitco ...

  6. .NET Core 3.0 Preview 9 发布

    翻译自官方博客 今天,我们宣布推出.NET Core 3.0 Preview 9.就像预览版8一样,我们专注打磨最终版本的.NET Core 3.0,而不是添加新功能.如果这些最终版本看起来不像早期预 ...

  7. 手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 负载均衡 高可用 集群

    为了实现服务的高可用和可扩展,在网上找了几天的资料,现在终于配置完毕,现将心得公布处理,希望对和我一样刚入门的菜鸟能有一些帮助. 一.理论知识(原理) 我们不仅要知其然,而且要知其所以然,所以先给大家 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试

    最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...

  9. NIO入门-----01

    package com.sico.pck01_nio; import java.nio.ByteBuffer; import org.junit.Test; /**  * @author Sico   ...

  10. 使用spring拦截器实现日志管理

    使用HandlerInterceptor拦截器,可以拦截请求,实现通用的日志管理操作 一.添加拦截器类 在"src/main/java"代码文件夹的"org.xs.dem ...