场景:

robotframework 执行完用例之后,将执行结果报至testlink。

方案1: 通过TestLink-API-Python-client中的RF关键字 每条用例执行完成之后根据状态进行上报结果

方案2:

python 通过 TestLink-API-Python-client 库操作testlink

通过分析测试报告中的output.xml执行结果,通过testlink接口将结果上报。

实现:

新增关键字:testlink_caseid

入参 caseid

Set Test Documentation    TestLink.testcaseID=[${caseid}]

每条用例第一行增加testlink_caseid关键字 入参为此对应testlink对应的caseid

通过解析xml拿出testlink对应的caseid

关键字 代码如下:

# -*- coding:utf-8 -*-
__author__ = 'weikai'
import sys
from bs4 import BeautifulSoup
import json, re
import testlink
import os
from robot.api import logger reload(sys)
sys.setdefaultencoding('utf8') class ReportTestLink(object):
def __init__(self):
self.tls = None def connect_testlink(self, TESTLINK_API_PYTHON_SERVER_URL, TESTLINK_API_PYTHON_DEVKEY):
'''
:param TESTLINK_API_PYTHON_SERVER_URL: testlink的接口地址 如:http://IP:PORT/lib/api/xmlrpc/v1/xmlrpc.php
:param TESTLINK_API_PYTHON_DEVKEY: 2e9685efd7d2589b50987f00dc9d10d7 接口秘钥
:return:
'''
os.environ['TESTLINK_API_PYTHON_SERVER_URL'] = TESTLINK_API_PYTHON_SERVER_URL
os.environ['TESTLINK_API_PYTHON_DEVKEY'] = TESTLINK_API_PYTHON_DEVKEY
self.tls = testlink.TestLinkHelper().connect(testlink.TestlinkAPIClient) def report(self, report_xml_path, testplanid, buildname, user, platformname="0"):
'''
:param report_xml_path: rf测试报告xml文件路径
:param testplanid: 测试计划id
:param buildname: 测试计划的name
:param user: 执行用例人,要和秘钥对应 或者测试计划设置为公共
:param platformname: 平台 默认为0
:return:
''' caseoutlist = self._parse_reportxml(report_xml_path)
for i in caseoutlist:
caseid = i.get("caseid", "")
if caseid != '':
try:
self.tls.reportTCResult(testcaseid=caseid, testplanid=testplanid, buildname=buildname,
status=i.get("status", 'f'),
notes=i.get("notes", ""),
user=user, platformname=platformname)
except Exception as e:
logger.info(u"上报测试结果出现异常:%s" % e)
print(e) def _parse_reportxml(self, report_xml_path):
f = open(report_xml_path, "r")
body = f.read()
soup = BeautifulSoup(body, "lxml")
caselist = soup.findAll("test")
a = []
for i in caselist:
case = {}
execution = ''
case['casename'] = i.attrs['name']
if 'TestLink.testcaseID' in i.text:
doclist = i.findAll('doc')
for s in doclist:
if 'TestLink.testcaseID' in s.text:
execution = re.findall(r"TestLink.testcaseID=\[(.+?)\]", s.text, re.S)[0]
execution = execution.replace('[', '').replace(']', '')
if execution == '':
continue
case['caseid'] = execution # 正则进行匹配
status = i.find('status', attrs={'critical': 'yes'}).attrs['status']
if status == 'PASS':
status = 'p'
if status == "FAIL":
status = 'f'
if status == '':
continue
case['status'] = status
case['endtime'] = i.status.attrs['endtime']
case['notes'] = i.find('status', attrs={'critical': 'yes'}).text
a.append(case)
return a if __name__ == "__main__":
rtl = ReportTestLink()
rtl.connect_testlink('http://ip:port/lib/api/xmlrpc/v1/xmlrpc.php', '2e9685efd7d2589b50987f00dc9d10d7')
rtl.report('D:\loadrunnertmp\\temp\RIDEi3hesf.d\output.xml', '', '','')

转载:https://blog.csdn.net/w229051923/article/details/77336503

【转】robotFramework 与testlink集成的更多相关文章

  1. Testlink集成Jira时如果出现Error咋办?

    TestLink在用SOAP集成Jira时,如果出现: SOAP Fault: (code: WSDL, string: SOAP-ERROR: Parsing WSDL: Couldn't load ...

  2. RobotFramework和Eclipse集成-安装和使用说明

    1.安装python3. 安装说明: https://www.cnblogs.com/Simple-Small/p/9179061.html 2.RF安装命令:Pip install RobotFra ...

  3. RobotFramework与Jenkins集成后构建成功率高于设置阈值但总是显示失败

    摘要:robot执行后总是失败 1.在配置jenkins的job时,添加构建步骤Execute Windows batch command,输入执行robotframework测试用例命令 2.然后j ...

  4. RobotFramework与Jenkins集成发送邮件

    转: A.    目标:实现RobotFramework的脚本定时自动执行,执行完后自动将结果发送到指定邮箱 B.    前提1. 配置好Robot Framework的环境,脚本可以正常运行 2. ...

  5. RobotFramework与Jenkins集成后失败用例重跑

    Jenkins的执行Windows批处理命令填写如下: call pybot.bat -i 1adsInterface 01_测试用例\接口测试用例\adsInterface.txt call pyb ...

  6. RobotFramework与Jenkins集成后发送groovy报告(比别处多了用例作者信息)

    https://www.cnblogs.com/gcgc/p/10037891.html 这篇文章中最终的发送报告是这个样子,每天大家看到这封邮件后也不知道是不是自己的用例错误了,导致大家不积极回复邮 ...

  7. Robotframework集成jenkins执行用例

    Robotframework+jenkins配置 假设我们完成了一个模块的用例设计,可是想晚上9点或凌晨运行,这时候该怎么实现呢?jenkins可以很好解决我们的疑难. Jenkins安装 这里简单说 ...

  8. 小团队开发管理工具:gitlab+redmine+testlink+jenkins

    由于工作需要,需要为团队搭建一个高效可用的开发管理平台.现在可用的开发管理工具很多开源的.商业的,网上也有很多博客和文章.经过2周的学习比较,再结合自己的项目特点,最后选定工具集:gitlab+red ...

  9. RobotFrameWork系列免费课程-开课了~

    1. 背景介绍 有一段时间没有发表过文章了,一方面除了自己确实变得懒惰外,另一方面也确实有其它事情,无法抽出闲余时间来坚持写下去. 之前在博客园中,发表了关于<公开课一:Robot FrameW ...

随机推荐

  1. bzoj 2563 [2012国家集训队Round 1 day2] 阿狸和桃子的游戏 贪心

    正解:贪心 解题报告: 链接在这儿! 知道解法之后会jio的好像很简单的样子……其实挺难想到的QAQ 不过大佬讲了方法之后还是懂了 有一个很神仙的想法就是,你可以理解为每个点周围的边都有半个是自己的, ...

  2. nodejs 学习二, nodejs调试

    nodejs 调试,在官方文档(英文),常用的两种: 一个在chrome安装插件inspector 第二种利用编辑 这里我使用vscode编辑来调试. 主要是配置 launch.json(用vscod ...

  3. (5.1)sql server系统数据库

    关键词:mssql系统数据库,sql server系统数据库,tempdb的作用 master:它包含一个系统表集合,是整个实例的中央存储库,维护登录账户,其他数据库,文件分布,系统配置设置,磁盘空间 ...

  4. Java设计模式(一)普通工场模式 抽象工场模式

    设计模式 设计模式是前人总结的,为了解决一类问题而总结的代码设计经验. 最初可能为了使用而使用,后面就会发现.非常多没想到的问题由于使用了正确的设计模式已经为你考虑到了.<design patt ...

  5. RN正、反向传值,组件输出

    很简单的一个小Demo,绿色的是输出的一个组件,目标把’爱好‘从父组件传给子组件,然后把’name‘从子组件传给父组件 父组件给子组件传值可以使用props,子组件传值给父组件可以使用事件,这里不多说 ...

  6. 报错解决——OSError: libdarknet.so: cannot open shared object file: No such file or directory

    在python目录下打开终端,输入 python darknet.py 结果报错 Traceback (most recent call last): File “darknet.py”, line ...

  7. HTTP协议与WEB框架简介

    HTTP协议与WEB框架简介 一.HTTP协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wid ...

  8. Jmeter原理

    Jmeter结构体系及运行原理   Jmeter结构体系 把Jmeter的结构体系拆分为三维空间,如图: X1~X5:是负载模拟的一个过程,使用这些组件来完成负载的模拟: X1:选择协议,模拟用户请求 ...

  9. vue.js-moment的使用

    1.安装: npm install moment --save 2.引入:import moment from 'moment.js' 3.moment("时间").format( ...

  10. PHP实现装饰器

    参考:https://www.cnblogs.com/onephp/p/6108940.html ●装饰器模式(Decorator),可以动态地添加修改类的功能 ●一个类提供了一项功能,如果要在修改并 ...