case间用变量传递值的问题,请高手帮忙!

RF提问雪霁 回复了问题 • 2 人关注 • 1 个回复 • 29 次浏览 • 2 天前 • 来自相关话题

RobotFramework中如何判断页面的按钮是否存在,有合适的关键字可以使用吗

RF提问雪霁 回复了问题 • 2 人关注 • 1 个回复 • 33 次浏览 • 2 天前 • 来自相关话题

【新手】自定义关键字返回参数问题,当返回值个数大于取值变量个数时,剩余的返回值没有形成list

RF提问雪霁 回复了问题 • 2 人关注 • 1 个回复 • 34 次浏览 • 2 天前 • 来自相关话题

关于执行RF提示[error2]的问题

RF提问LeapingWay 回复了问题 • 2 人关注 • 1 个回复 • 43 次浏览 • 3 天前 • 来自相关话题

robotframework扩展发结果邮件功能

RF教程雪霁 发表了文章 • 3 个评论 • 260 次浏览 • 4 天前 • 来自相关话题

PS:这篇文章纯粹是没事改着玩,刚好别人问到,如果有些事情可做可不做,那还是做吧
 
一、先说思路
用关键字的方式放在teardown里边肯定是不合适的,因为关键字肯定会在测试结果生成之前执行,所以要改rf的代码。改代码有一个思路就是增加一个pybot的可选参数,需要时执行,不然的话,每次调试一个用例运行一次都发一次邮件会很难受。思路有了,那就开始改代码吧!
 
二、再说实现
1  写一个发邮件的模块。保存成sendEmail.py,复制到$pythonpath/Lib/site-packages/robot目录下。
    注意,修改mail_user为自己的发件QQ邮箱,mail_pass设置为授权码,不会的请百度。有更复杂的需求自行扩展该文件。以下所有代码请自行找个靠谱的python IDE编辑#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
import email.MIMEMultipart
from email.header import Header
import os
import mimetypes

def send_email(receivers= ['********@qq.com'], file_names=, test_result=0):
# 第三方 SMTP 服务
print receivers
mail_host="smtp.qq.com" #设置服务器
mail_user="*******@qq.com" #用户名
mail_pass="************" #口令,QQ邮箱是输入授权码,在qq邮箱设置 里用验证过的手机发送短信获得,不含空格
sender = '********@qq.com'

#设置邮件中的测试结果
resultstr = '失败' if test_result else '通过'

main_msg = email.MIMEMultipart.MIMEMultipart()
message = MIMEText('''附件是本次自动化构建的报告,请注意查收 \n\n''', 'plain', 'utf-8')
main_msg.attach(message)
result = MIMEText('测试结果: '+resultstr, 'plain', 'utf-8')
main_msg.attach(result)
## 读入文件内容并格式化
for file_name in file_names:
data = open(file_name, 'rb')
ctype,encoding = mimetypes.guess_type(file_name)
if ctype is None or encoding is not None:
ctype = 'application/octet-stream'
maintype,subtype = ctype.split('/',1)
file_msg = email.MIMEBase.MIMEBase(maintype, subtype)
file_msg.set_payload(data.read())
data.close()
email.Encoders.encode_base64(file_msg)#把附件编码

basename = os.path.basename(file_name)
file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改邮件头
main_msg.attach(file_msg)

main_msg['From'] = Header("robot自动发送", 'utf-8')
reciverstr = ';'.join(receivers)
main_msg['To'] = Header(reciverstr, 'utf-8')

subject = 'robotframework测试结果'
main_msg['Subject'] = Header(subject, 'utf-8')


try:
smtpObj = smtplib.SMTP_SSL()
smtpObj.connect(mail_host, 465)
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, main_msg.as_string())
print "邮件发送成功。"
except smtplib.SMTPException, e:
print "Error: 无法发送邮件。错误原因:", e

if __name__ == '__main__':
send_email(file_names=['E:\\pics\\1.png','E:\\pics\\2.jpg'])2 在/Lib/site-packages/robot/run.py修改两个地方
2.1 修改run.py处理send_email动作:
        先导入邮件模块: from robot.sendEmail import send_email
        再找到类RobotFramework的main函数,增加*号中间的如下行: def main(self, datasources, **options):
settings = RobotSettings(options)
LOGGER.register_console_logger(**settings.console_output_config)
LOGGER.info('Settings:\n%s' % unic(settings))
suite = TestSuiteBuilder(settings['SuiteNames'],
settings['WarnOnSkipped'],
settings['Extension']).build(*datasources)
suite.configure(**settings.suite_config)
if settings.pre_run_modifiers:
suite.visit(ModelModifier(settings.pre_run_modifiers,
settings.run_empty_suite, LOGGER))
with pyloggingconf.robot_handler_enabled(settings.log_level):
result = suite.run(settings)
LOGGER.info("Tests execution ended. Statistics:\n%s"
% result.suite.stat_message)
if settings.log or settings.report or settings.xunit:
writer = ResultWriter(settings.output if settings.log
else result)
writer.write_results(settings.get_rebot_settings())
#*********************************#
if len(settings['Email']):
send_email(settings['Email'],[settings.report,settings.log],
test_result=result.return_code)
#*********************************#
return result.return_code






2.2 还是run.py,修改USAGES里的options:
        增加如下行:Options
=======
-m --email email * set email options #增加这行,不要把注释复制
-F --extension value Parse only files with this extension when executing主要是给pybot命令行使用
 
3  找到robot/conf/settings.py文件修改settings
        找到 _cli_opts 设置,增加一条:'Email' : ('email', ),
4 修改robotide,找到$pythonpath/Lib/site-packages/robotide/contrib/testrunner/usages.py
      Options
=======
-m --email email * set email options#增加这行,不要把注释复制进去
-N --name name Set the name of the top level test suite. Underscores主要给ride设置时使用
 
三、运行及结果
    1  pybot运行方式,如需传多个人时,需后面再跟--email XXXX
        pybot --email XXXXXX@qq.com --email 978182471@qq.com "C:\\Users\\Administrator\\Desktop\\test.robot"
    2  ride 运行方式





    3  运行结果





 
四、我是怎么调试的

告诉大家一个调试rf代码的小窍门~~
工具:pycharm
方法:
    1、写一个简单的suite,如写单步调试evaluate,那就写个有evaluate关键字的用例,并将其打上debug的tag,如保存为:
             D:/RFtest/onedemo.txt
    2、找到 $python目录\Lib\site-packages\robot\run.py,用pycharm打开
    3、修改run.py的最后一句,将其注释,然后再加一句
            #run_cli(sys.argv[1:])
            run('D:/RFtest/onedemo.txt', include=['debug'])
    4、点击pycharm-->run-->debug,debug此run.py文件,断点可根据需要去打
    5、重要!!!Debug完了记得把run.py改回去,不然从ride或命令行运行就不能好好玩耍了
  查看全部
PS:这篇文章纯粹是没事改着玩,刚好别人问到,如果有些事情可做可不做,那还是做吧
 
一、先说思路
用关键字的方式放在teardown里边肯定是不合适的,因为关键字肯定会在测试结果生成之前执行,所以要改rf的代码。改代码有一个思路就是增加一个pybot的可选参数,需要时执行,不然的话,每次调试一个用例运行一次都发一次邮件会很难受。思路有了,那就开始改代码吧!
 
二、再说实现
1  写一个发邮件的模块。保存成sendEmail.py,复制到$pythonpath/Lib/site-packages/robot目录下。
    注意,修改mail_user为自己的发件QQ邮箱,mail_pass设置为授权码,不会的请百度。有更复杂的需求自行扩展该文件。以下所有代码请自行找个靠谱的python IDE编辑
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
import email.MIMEMultipart
from email.header import Header
import os
import mimetypes

def send_email(receivers= ['********@qq.com'], file_names=, test_result=0):
# 第三方 SMTP 服务
print receivers
mail_host="smtp.qq.com" #设置服务器
mail_user="*******@qq.com" #用户名
mail_pass="************" #口令,QQ邮箱是输入授权码,在qq邮箱设置 里用验证过的手机发送短信获得,不含空格
sender = '********@qq.com'

#设置邮件中的测试结果
resultstr = '失败' if test_result else '通过'

main_msg = email.MIMEMultipart.MIMEMultipart()
message = MIMEText('''附件是本次自动化构建的报告,请注意查收 \n\n''', 'plain', 'utf-8')
main_msg.attach(message)
result = MIMEText('测试结果: '+resultstr, 'plain', 'utf-8')
main_msg.attach(result)
## 读入文件内容并格式化
for file_name in file_names:
data = open(file_name, 'rb')
ctype,encoding = mimetypes.guess_type(file_name)
if ctype is None or encoding is not None:
ctype = 'application/octet-stream'
maintype,subtype = ctype.split('/',1)
file_msg = email.MIMEBase.MIMEBase(maintype, subtype)
file_msg.set_payload(data.read())
data.close()
email.Encoders.encode_base64(file_msg)#把附件编码

basename = os.path.basename(file_name)
file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改邮件头
main_msg.attach(file_msg)

main_msg['From'] = Header("robot自动发送", 'utf-8')
reciverstr = ';'.join(receivers)
main_msg['To'] = Header(reciverstr, 'utf-8')

subject = 'robotframework测试结果'
main_msg['Subject'] = Header(subject, 'utf-8')


try:
smtpObj = smtplib.SMTP_SSL()
smtpObj.connect(mail_host, 465)
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, main_msg.as_string())
print "邮件发送成功。"
except smtplib.SMTPException, e:
print "Error: 无法发送邮件。错误原因:", e

if __name__ == '__main__':
send_email(file_names=['E:\\pics\\1.png','E:\\pics\\2.jpg'])
2 在/Lib/site-packages/robot/run.py修改两个地方
2.1 修改run.py处理send_email动作:
        先导入邮件模块: 
from robot.sendEmail import send_email

        再找到类RobotFramework的main函数,增加*号中间的如下行:
    def main(self, datasources, **options):
settings = RobotSettings(options)
LOGGER.register_console_logger(**settings.console_output_config)
LOGGER.info('Settings:\n%s' % unic(settings))
suite = TestSuiteBuilder(settings['SuiteNames'],
settings['WarnOnSkipped'],
settings['Extension']).build(*datasources)
suite.configure(**settings.suite_config)
if settings.pre_run_modifiers:
suite.visit(ModelModifier(settings.pre_run_modifiers,
settings.run_empty_suite, LOGGER))
with pyloggingconf.robot_handler_enabled(settings.log_level):
result = suite.run(settings)
LOGGER.info("Tests execution ended. Statistics:\n%s"
% result.suite.stat_message)
if settings.log or settings.report or settings.xunit:
writer = ResultWriter(settings.output if settings.log
else result)
writer.write_results(settings.get_rebot_settings())
#*********************************#
if len(settings['Email']):
send_email(settings['Email'],[settings.report,settings.log],
test_result=result.return_code)
#*********************************#
return result.return_code






2.2 还是run.py,修改USAGES里的options:
        增加如下行:
Options
=======
-m --email email * set email options #增加这行,不要把注释复制
-F --extension value Parse only files with this extension when executing
主要是给pybot命令行使用
 
3  找到robot/conf/settings.py文件修改settings
        找到 _cli_opts 设置,增加一条:
'Email'            : ('email', ),

4 修改robotide,找到$pythonpath/Lib/site-packages/robotide/contrib/testrunner/usages.py
      
Options
=======
-m --email email * set email options#增加这行,不要把注释复制进去
-N --name name Set the name of the top level test suite. Underscores
主要给ride设置时使用
 
三、运行及结果
    1  pybot运行方式,如需传多个人时,需后面再跟--email XXXX
        pybot --email XXXXXX@qq.com --email 978182471@qq.com "C:\\Users\\Administrator\\Desktop\\test.robot"
    2  ride 运行方式

ride运行截图.png

    3  运行结果

邮件结果.png

 
四、我是怎么调试的

告诉大家一个调试rf代码的小窍门~~
工具:pycharm
方法:
    1、写一个简单的suite,如写单步调试evaluate,那就写个有evaluate关键字的用例,并将其打上debug的tag,如保存为:
             D:/RFtest/onedemo.txt
    2、找到 $python目录\Lib\site-packages\robot\run.py,用pycharm打开
    3、修改run.py的最后一句,将其注释,然后再加一句
            #run_cli(sys.argv[1:])
            run('D:/RFtest/onedemo.txt', include=['debug'])
    4、点击pycharm-->run-->debug,debug此run.py文件,断点可根据需要去打
    5、重要!!!Debug完了记得把run.py改回去,不然从ride或命令行运行就不能好好玩耍了
 

RF如何控制多个脚本的执行顺序啊

RF提问葡萄 回复了问题 • 3 人关注 • 2 个回复 • 115 次浏览 • 5 天前 • 来自相关话题

变量赋值不成功

RF提问葡萄 回复了问题 • 3 人关注 • 1 个回复 • 65 次浏览 • 5 天前 • 来自相关话题

打开某个网页首先开发会用到jQuery遮罩插件jQuery.blockUI.js,如何判断这个插件已经加载完成。

RF提问葡萄 回复了问题 • 2 人关注 • 1 个回复 • 40 次浏览 • 5 天前 • 来自相关话题

RFS如何将数据写入TXT或WORD

RF提问qaz 回复了问题 • 2 人关注 • 1 个回复 • 111 次浏览 • 2017-08-12 17:20 • 来自相关话题

执行套件的时候,怎么让每个用例都有一个log文件,而不是所有的log都写在一个文件中。

RF提问qaz 回复了问题 • 2 人关注 • 1 个回复 • 107 次浏览 • 2017-08-12 17:17 • 来自相关话题