crystal's Blog

生活、技术个人博客


  • Home

  • Archives

Robot Framework持续集成到Jenkins

Posted on 2018-07-24

Robot Framework集成到Jenkins

安装Jenkins的robot framework插件

进入Jenkins->系统管理->插件管理->找到’robot framework plugin

connect

新建任务

connect

connect

配置构建

进入EHR_Test->配置->构建

connect

1
pybot.bat --argumentfile c:\users\administrator\appdata\local\temp\RIDEc9tgmz.d\argfile.txt --listener C:\Python27\lib\site-packages\robotide\contrib\testrunner\TestRunnerAgent.py:51679:False D:\python\robotframework\TestProject\Test\EHR

注意:这里的command命令是复制RIDE控制台里面的如图:

connect

如果这里的代码无法运行报错,请输入call >>例如:

1
2
call pybot.bat D:\python\robotframework\TestProject\Test\EHR
exit 0

connect

构建后的操作

选择“Publish Robot Framework test results”

connect

注意这里的输出report报告地址是来自于RIDE控制台中的输出报告位置复制过来

设置邮件报告:
1、选择Editable Email Notification

connect

2、default content代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<hr/>

(本邮件是程序自动下发的,请勿回复!)<br/><hr/>

项目名称:$PROJECT_NAME<br/><hr/>

构建编号:$BUILD_NUMBER<br/><hr/>

构建状态:$BUILD_STATUS<br/><hr/>

触发原因:${CAUSE}<br/><hr/>

测试报告:<a href="http://localhost:8080/job/EHR_Test001/10/robot/report/report.html"></a>http://localhost:8080/job/EHR_Test001/10/robot/report/report.html<br/><hr/>

变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>

3、添加trigger

connect

4、完成

在Jenkins设置中节点

点击“Jenkins”->系统管理->节点管理->master节点
勾选“环境变量”

connect

立即构建项目

设置好环境变量之后回到JOB中点击“立即构建”

connect

构建后的效果如下:

connect

可以点击“openreport.html”查看详细的测试报告,如图:

connect

进入个人邮箱查看邮件,如图:

connect

可以点击上面“测试报告”URL地址查看详细的测试报告信息

RobotFramework数据库连接

Posted on 2018-07-20

Robot Framework数据库连接

安装

1、安装DatabaseLibrary,进入CMD命令窗口切换到Python目录:
安装之前可以使用pip list 查看是否安装一下依赖包,如果有的话就跳过该步骤

1
pip install robotframework-databaselibrary

安装pymysql

1
pip install pymysql

2、安装数据库驱动

1
pip install pyodbc

3、安装mysql-connector-odbc
下载地址:http://dev.mysql.com/downloads/connector/odbc/
进入之后点击:Looking for previous GA versions?如图所示:

connect

选择64位ZIP或者MSI进行下载(注意:这个选择多少位对应你自己的python安装的是多少位的,如果下载错误可以导致后面连接的时候报错)

connect

下载完成之后解压。双击:setup.bat运行

connect

安装成功后进入控制面板–管理工具–数据源–点击添加就可以看到安装成功的数据源

connect

选择:MySQL ODBC 5.3 Unicode Driver
出现如图所示配置数据库

connect

配置完成之后可以连接‘Test’按钮测试一下是否可以准确连接

connect


使用

1、在robotframework中导入databaselibrary包

connect

2、连接数据库

1
2
3
   1 Connect To Database Using Custom Params    pymysql    host='10.165.117.109',port=3307,user='***',password='****L',database='snow_humres_test',charset='utf8'
2 ${reslut} Query select * from emp_main where emp_code='GS0001'
3 log ${reslut}

connect

3、运行结果如图:

connect

4、查询结果字符处理
将下面代码复制到C:\Python27\Lib\site-packages\robot\utils\unic.py文件中(请先备份一份原有的,以备未更新成功之需)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#  Copyright 2008-2015 Nokia Networks
# Copyright 2016- Robot Framework Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from pprint import PrettyPrinter

from .platform import IRONPYTHON, JYTHON, PY2
from .robottypes import is_bytes, is_unicode
import json

if PY2:

def unic(item):
if isinstance(item, unicode):
return item
if isinstance(item, (bytes, bytearray)):
try:
return item.decode('ASCII')
except UnicodeError:
return u''.join(chr(b) if b < 128 else '\\x%x' % b
for b in bytearray(item))

if isinstance(item, (list, dict, tuple)):
try:
item = json.dumps(item, ensure_ascii=False, encoding='utf-8')
except UnicodeDecodeError:
try:
item = json.dumps(item, ensure_ascii=False, encoding='gbk')
except:
pass
except:
pass
try:
try:
return unicode(item)
except UnicodeError:
return unic(str(item))
except:
return _unrepresentable_object(item)

else:

def unic(item):
if isinstance(item, str):
return item
if isinstance(item, (bytes, bytearray)):
try:
return item.decode('ASCII')
except UnicodeError:
return ''.join(chr(b) if b < 128 else '\\x%x' % b
for b in item)
try:
return str(item)
except:
return _unrepresentable_object(item)


# JVM and .NET seem to handle Unicode normalization automatically. Importing
# unicodedata on Jython also takes some time so it's better to avoid it.
if not (JYTHON or IRONPYTHON):

from unicodedata import normalize
_unic = unic

def unic(item):
return normalize('NFC', _unic(item))


def prepr(item, width=400):
return unic(PrettyRepr(width=width).pformat(item))


class PrettyRepr(PrettyPrinter):

def format(self, object, context, maxlevels, level):
try:
if is_unicode(object):
return repr(object).lstrip('u'), True, False
if is_bytes(object):
return 'b' + repr(object).lstrip('b'), True, False
return PrettyPrinter.format(self, object, context, maxlevels, level)
except:
return _unrepresentable_object(object), True, False


def _unrepresentable_object(item):
from .error import get_error_message
return u"<Unrepresentable object %s. Error: %s>" \
% (item.__class__.__name__, get_error_message())

在robotframework中加入下面两行代码如图所示:

connect

1
2
3
4
Set Environment Variable    NLS_LANG    SIMPLIFIED CHINESE_CHINA.ZHS16GBK

${spell_name} Set Variable ${reslut[${i}][${int}]}
${NAME} Evaluate str('${spell_name}').decode('utf-8')

运行结果如图:

connect

RobotFramework+AutoItLibrary文件上传

Posted on 2018-07-18

RobotFramework+AutoItLibrary文件上传

安装AutoLibrary

1、进入CMD命令窗口

1
pip list # 查看列表中是否包含了pywin32如果有则跳过步骤 2

2、没有pywin32的情况下进入python安装文件执行CMD命令

1
pip install pywin32   # 安装pywin32

3、下载AutoItLibrary(http://code.google.com/p/robotframework-autoitlibrary/)
下载完成之后解压
4、以管理员身份运行CMD命令窗口、切换路径到之前下载解压AutoItLibrary文件下
输入命令:

1
python setup.py install

connect

显示上面的图片未提示报错信息则安装AutoItLibrary成功
5、将AutoLibrary导入到RobotFramework中

connect

未显示红色字体则AutoItLibrary导入成功

6、安装好了AutoItLibrary打开它会出现如图的一个控件:

connect


使用AutoItLibrary

1、在文件解压包中找到AutoInfo.exe、双击运行

connect
2、你会在Finder Tool位置发信啊有个十字星,可以用鼠标拖动到你需要识别的对象上。如图:

connect

3、获取文件名和确定按钮对象的位置如图:

connect


使用结合Selenium2Library处理上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
*** Settings ***
Library Selenium2Library
Library AutoItLibrary

*** Variables ***
${ip} http://ehrtest.source3g.com/auth/#/login?26f06007489445319dad4265836b66be # 登录EHR系统的IP地址
${user} zhangyue # 登录EHR的用户名
${pwd} 888888 # 登录EHR系统的密码

*** Test Cases ***
fileup
Open Browser ${ip} firefox
Input Text xpath=//*[@id="app"]/div/div[2]/form/div[1]/div/div/input ${user}
Input Text xpath=//*[@id="app"]/div/div[2]/form/div[2]/div/div/input ${pwd}
Click Button xpath=.//*[@id='app']/div/div[2]/form/div[3]/button
Wait Until Page Contains Element xpath=//div[@id='app']/div/div[2]/ul/li[5]/div/i[2] 20 ERROR
Click Element xpath=//div[@id='app']/div/div[2]/ul/li[5]/div/i[2]
Wait Until Page Contains Element xpath=//div[@id='app']/div/div[2]/ul/li[5]/ul/li[3] 20 ERROR
Click Element xpath=//div[@id='app']/div/div[2]/ul/li[5]/ul/li[3]
Wait Until Page Contains Element xpath=//div[@id='app']/div/div[3]/div/div[2]/div/div/div 20 ERROR
Click Element xpath=//div[@id='app']/div/div[3]/div/div[2]/div/div/div
Control Send 文件上传 ${EMPTY} [CLASS:Edit; INSTANCE:1] 111.xlsx
Sleep 2
Control Click 文件上传 ${EMPTY} Button1
Sleep 3
Page Should Not Contain Element css=.el-message__content 文件上传失败 INFO

connect

代码思路:

1、选通过Selenium2Library打开浏览器、并且获取到上传文件控件的xpath路径。(第一行到第十行)

2、通过 AutoItLibrary获取window窗口中的对象的位置(第十一行和第十三行)主要是获取文件选择对话框中的输入文件名的输入框和“确定”按钮

3、获取windows对象属性(Summary标签下的(ClassNN或者Advanced(Class)))后面的值
connect

robotframework(二)

Posted on 2018-07-16

robotframework 变量的使用

1、在判断中使用
例如:Set Variable If就是一个典型的例子。再例如下面的:

Run Keywork If ‘${val2}==’abcd’ log efgh

这个例子表示:如果说${val2}和abcd字符串相等,那么就运行log后面的关键字,打印efgh
运行结果如下:

connect

2、字符串使用
简单的一种方法就是字符串的链接,例如:

log 0123${val2}efgh

运行结果如下:

connect
还有一种就是字符串的截取例如:

log ${val2[2]}
log ${val[0:3]

注意:“[]”里写的是字符串的index索引位置、[0:3]表示index=0到3的截取

运行结果如图:

connect

3、参与运算
在参与运算的时候需要用到关键字:Evaluate
例如:

${cal1} Set Variable 123
${cal2} Evaluate ${cal1}+1

这里跟变量${cal1}赋值为123,然后Evaluate让它+1
结果如图:

connect

但是某些时候你的变量值是字符串的时候,就需要使用强制转换函数int,例如:

${cal1} Set Variable ‘123’
${cal2} Evaluate int(${cal1})+1

结果如图:

connect


List变量的使用


List变量赋值

List和Scalar类似都可以使用Set Variable来赋值,但是如果使用了Set Variable来赋值的话,会使得把一个List变量或者多个Scalar变量形成的List转换给一个Scalar变量。因此如果你想得到一个真正的List变量。更多的推荐使用:Create List来创建
例如:

@{val3} Set Variable 1 2 3
@{listVal3} Create List 3 2 1

结果如图所示:

connect


变量使用

当我们使用Ctrl+空格键调用出Content Assitant的时候,通常会展示出该方法或者该关键字的使用方法。如图:

connect

此时关键字中有两个参数:name,*args。此时name就代表可以传参类型是Scalar类型的参数,*args代表的是可以传递List变量。因此由此可以见得:带*号是指可以传递List类型参数

List元素值的获取方式一般有两种,正常的获取方式是:@{变量名}[index],index就是索引值
另外一种:${变量名[index]},里面的index也是索引值,如果说是多维list,如果说取单个元素就一个[],如果要取多维的话,有几维就几个[]。
1.一维List

@{userList} Create List a b c
log @{userList}[1]
log ${userList[1]}

运行结果如图:

connect

2.多维List

@{listA} Create List 1 2
@{listB} Create List 3 4
@{listC} Create List ${listA} $listB 5
log @{listC[1]}[1]

运行结果如图:

connect

变量转换

1、List转换成Scalar

@{list1} Create List abcd EFGH
log ${list1}

运行结果:

connect

2、Scalar变量转换成List

${list1} Create List abcd EFGH
log =@{list1}=

运行结果:

connect

3、转换限制

注意在对变量类型进行转换过程中如果说目标变量没有进行初始化过或者赋值过,那么就可以进行类型转换,但是如果目标变量已经初始化或者赋值那么就无法进行变量的类型转换。

4、Dictionary变量
Dictionary变量每一个元素都是以Key、Value形式存放。比如:

1
{key1:val1,key2:val2} # 其中一个key对应一个value。key不能重复出现

5、对象变量

对象变量是在接口测试中Request测试库中出现。例如${return}是接口返回的对象。一般我们是获取该对象中某个属性值。例如:

1
2
${return.STATUS} # 获取return对象中的返回状态值
${return.CONTENT} # 获取对象内容

robotframework(一)

Posted on 2018-06-21

robotframework 变量

1.变量标识符

每个变量都可以用使用变量标识符{变量名}来进行表示,变量主要有两类一类是Scalar,另一类是List.Scaler类型则用“$”作为标识符,List型主要用“@”作为标识符(如:${var},@{lavr})

2.变量声明

1.手动添加变量声明
在Testsuite上单击鼠标右键,或者在edite区域单击“Add Scalar”或者“Add List”按钮来新增变量。
2.最常用的是无论是Scalar还是List变量,都可以用Set Variable来赋值。

3.变量的作用域

通常情况下,每个变量默认情况都是局部变量。如果想改变这些变量的作用域,通常可以使用一下关键字进行变更:

1、Set Global Variable:设置为全局变量。当设置以后这个变量在所有的测试案例和测试套件均可使用

2、Set Suite Variable:设置File Suite级变量,这个变量只要在当前的File Suite 内部都有效,包括下面的案例

3、Set Test Variable 为设定Case级变量,这个变量在当前Tes Case内有效

robotframework 常量

常量一般有环境变量、数值常量、特殊字符、系统保留变量。

1、环境变量的标识符:%”如果在计算机的环境变量中设置了ANT_HOME这个系统变量,那么在RF中需要打印出来的话如下:

log %{ANT_HOME}

输出结果:
connect

2、其余都是:”$”

3、特殊字符常量系统保留常量。
一般要找这两类常量的话,只要一个办法就是Content Assistance助手,一般有2个快捷键可以呼出,Ctrl+空格。或者Ctrl+Alt+空格
特殊字符常量一般有:${/} ${:} ${EMPTY} ${False} ${None} ${null} ${SPACE} ${True}

robotframework Scalar变量

1.变量赋值

(1) Set 赋值

一般来说都是使用Set Variable关键字对变量进行赋值(也可以使用其他如:Set Variable If)

${val2} Set Variable abcd
${valif2} Set Variable If ‘${val2}’==’abcd’ efgh ace

注:${val2}赋值为:abcd
,${valif2}判断${val2}得值如果等于abcd,那么${valif2}=efgh,否则就等于ace

(2) Get 赋值
一般来说主要用于返回值上,包括系统关键字的返回值和用户关键字的返回值(Set也属于返回值)

${getVal1} Get Lenght ${val2}
${getVal2} Get Time

注:获取${val2}的长度赋值给${getVal1},获取当前时间赋值给${getVal2}

(3) 命令行赋值

在${val1}运行时使用”-v”参数来给变量赋值

log ${val1}

如果直接运行则会输出最初定义的变量值value,

connect

结果如图:
connect

此时在run界面上的Arguments里加一行:

1
-v val1:abcde

结果如图所示:

connect


robotframework RIDE的日志没显示

描述:第一次运行的时候日志能展示,再次运行脚本就没有日志了,重启ride还是出现这个问题

解决方法1:

修改python路径\Lib\site-packages\robotide\contrib\testrunner目录下testrunner.py文件(第400行)

pop方法的内容改成如下即可:

1
2
3
4
5
6
7
8
9
10
11
12
def pop(self):
result = ""
for _ in xrange(self._queue.qsize()):
try:
result += self._queue.get_nowait()
except Empty:
pass
try:
result=result.decode('UTF-8')
except UnboundLocalError:
pass
return result

connect

修改完成之后需要关闭robotframework RIDE,重启一下才会生效

展示效果如下:

connect

解决方法2:
进入run界面,勾选:show message log.如图所示:

connect

123

Crystal_Girl

Thinking....

15 posts
© 2019 Crystal_Girl
Powered by Hexo
|
Theme — NexT.Muse v5.1.4