场景:

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. elastic客户端TransportClient的使用

    关于TransportClient,elastic计划在Elasticsearch 7.0中弃用TransportClient,并在8.0中完全删除它.后面,应该使用Java高级REST客户端,它执行 ...

  2. AES加解密所遇问题

    AES加解密后解密数据末尾携带多余空格,经查看是由于加密时数据不足16个字节自动补齐导致 解决办法:记录加密数据长度,解密后根据数据长度读取解密数据. 另外加密数据中可能存在0等数据,所以拷贝内容时最 ...

  3. Es6 的类(class)

    首先根据es5的类(原型对象)的基本点做参照. 序号 基本点 es5 >es6 1 实例属性(方法) √ √ 2 原型属性(方法) 或 公共属性(方法) √ √ 3 es5的私有变量 或 私有属 ...

  4. oracle中not in 和 in 的替代写法

    -- not in 的替代写法select col from table1 where col not in(select col from table2); select col,table2.co ...

  5. synchronized同一把锁锁不同代码

    对于多线程,如果是计算密集型,多线程不一定优势:但如果是io密集型(因为速度慢),多线程多数情况下就有很大的优势了(但也不全是,因为当io已经满负荷运转下,即100%了,再增加线程,未必就会增加效率) ...

  6. what's the 跨期套利

    出自 MBA智库百科(https://wiki.mbalib.com/) 跨期套利的定义 跨期套利是套利交易中最普遍的一种,是股指期货的跨期套利(Calendar Spread Arbitrage)即 ...

  7. 萌新接触前端的第二课——CSS

    前端知识——CSS CSS(英文全称:Cascading Style Sheets) 中文名层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言.CSS不仅可以静态地修饰网页,还可以配合各 ...

  8. Linux安装go

    在 http://golang.org/dl/下载最新的linux版本,并把它提取到/usr/local目录,在此目录下进行解压缩 $ sudo tar -xzf go1.9.1.linux-amd6 ...

  9. 【剑指offer】把数组排成最小的数

    一.题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 二.思路: ...

  10. VS中属性配置ABC

    1.包含目录和附加包含目录(库目录和附加库目录)的区别: 包含目录:修改了系统的include宏的值,是全局的: 附加包含目录:用于当前项目,对其他项目没有影响. (库目录和附加库目录的区别同上) 2 ...