首页 > 【Python】实现将testlink上的用例指定格式保存至Excel,用于修改上传

【Python】实现将testlink上的用例指定格式保存至Excel,用于修改上传

背景

前一篇博客记录的可以上传用例到testlink指定用例集的脚本,内部分享给了之后,同事希望能将testlink上原有的用例下载下来,用于下次修改上传,所有有了本文脚本。

具体实现

获取用例信息

def download_testcase():"""获取(下载)testlink上面指定用例集的数据:return:"""datas = []for data in tlc.getTestCasesForTestSuite(father_id, True, 'full'):actions = []expected_results = []name = data["name"]summary = data["summary"]preconditions = data["preconditions"]importance = data["importance"]execution_type = data["execution_type"]author = data["author_id"]# print(json.dumps(data, indent=4))for i in range(len(data["steps"])):actions.append(data["steps"][i]["actions"])expected_results.append(data["steps"][i]["expected_results"])datas.append((name, preconditions, '
'.join(actions), '
'.join(expected_results), format_execution_type(execution_type), format_auth(author), format_importance(importance), summary))

进行数据转换

def format_execution_type(source_data):"""转换执行方式:param source_data::return:"""switcher = {'2': "自动化",'1': "手工"}return switcher.get(source_data, "Param not defind")def format_importance(source_data):"""转换优先级:param source_data::return:"""switcher = {'1': "低",'2': "中",'3': "高"}return switcher.get(source_data, "Param not defind")def format_auth(source_data):"""转换作者:可以通过testlink的user表查询到对应id->name对:param source_data::return:"""switcher = {'100': "tester_name",}return switcher.get(source_data, "Param not defind")

保存至Excel

def save_suits(file_path, datas):"""保存用例:param file_path: 保存路径:param datas::return:"""book = xlrd.open_workbook(file_path, formatting_info=True)  # 读取Excelnew_book = copy.copy(book)  # 复制读取的Excelsheet = new_book.get_sheet(0)  # 取第一个sheet页line_num = 1for i in range(0, len(datas)):name, preconditions, actions, expected_results,  execution_type, author, importance, summary = datas[i]sheet.write(line_num, 0, u'%s' % name)sheet.write(line_num, 1, u'%s' % preconditions)sheet.write(line_num, 2, u'%s' % actions)sheet.write(line_num, 3, u'%s' % expected_results)sheet.write(line_num, 4, u'%s' % execution_type)sheet.write(line_num, 5, u'%s' % author)sheet.write(line_num, 6, u'%s' % importance)sheet.write(line_num, 7, u'%s' % summary)line_num += 1report_path = os.path.abspath(os.path.join('download'))if not os.path.exists(report_path):os.makedirs(report_path)suits_name = get_suites(father_id)["name"]new_book.save(os.path.abspath(os.path.join(report_path, '用例集_{}@{}.xlsx'.format(suits_name, time.strftime('%Y.%m.%d@%H%M%S')))))  def get_suites(suite_id):"""获取用例集信息:return: """try:suites = tlc.getTestSuiteByID(suite_id)return suitesexcept testlink.testlinkerrors.TLResponseError as e:# traceback.print_exc()logger.warning(str(e).split('
')[1])logger.warning(str(e).split('
')[0])return

使用方法

环境依赖

环境依赖安装方法
Python3
xlrd库pip install xlrd
testlink库pip install TestLink-API-Python-client
xlutilspip install xlutils

具体方法

  • 将上述的代码保存到一个文件中,底部添加下列代码进行调用
if __name__ == "__main__":url = "http://localhost/lib/api/xmlrpc/v1/xmlrpc.php"key = "6c3fe0796142db21"  # 这个key是错误的keytlc = testlink.TestlinkAPIClient(url, key)father_id = "274539"   # 想要下载的用例集的ID,可通过在testlink界面选取用例集,然后点击右键获取download_testcase()
  • 目录结构参考,与上一篇文章的脚本放在了一起
D:ProjectUPLOAD_DATA2TESTLINK
│  download_testcase.py
│  logger_better.py
│  upload_excel_data.py
│
└─testCasedown_load_template.xls
  • 在上一步的文件同一目录下创建一个testCase文件夹,创建一个xls文件,文件格式如下:

1172048-20180513141822623-981504031.png

转载于:https://www.cnblogs.com/Detector/p/9030650.html

更多相关:

  • 学习计划 MyPlan11 主题:Python描述统计、简单统计图形 时间:8.5-8.11周内完成 参考资料:新书《谁说菜鸟不会数据分析python篇》 各位星友们,在这个星球里每个人都要逼迫自己学习未知的领域或知识点,每天进步一点点,积累的时间久了 ,菜鸟也能起飞。 完成情况: 在pandas中,使用describe函数进行描述统...

  • 利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信。 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。 TCPServer/UDPS...

  • 题目:序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树。 示例:  你可以将以下二叉树:     1    /   2   3      /     4   5 序列化为 "[1,2,3,null,null,4,5]" 解题: /*** Definition for a binary tree no...

  • sd.js  import $global from "./global"; import $g from "./sg"; import $ from "jquery"; import {Message, Loading} from "element-ui";//引入饿了么相关组件 import {Base64} from "js-...

  •     原生sd.js----------------------------------------------------------------  const API_ROOT_URL = "http://www.api.com";const $d= {_postList_url: API_ROOT_URL + "/api...

  • /*判断屏幕宽高比是否为16:9*/ function isScreen16to9() {return window.screen.height / window.screen.width === 9 / 16; }...

  • /*关闭、刷新、跳转、离开当前网页前提示*/ onbeforeunload = function () {return false; };  ...

  • let json = {/**判断JSON格式*/ isJSON: function (str) {if (typeof str == "string") {try {var obj = JSON.parse(str);if (typeof obj == "object" && obj) {return true;} else {...

  •   项目结构   index.js //必须要安装否则就别想运行了❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤ //npm i body-parser -D & cnpm i express & cnpm i node-xlsx & cnp...

  • 一、递归 函数    为什么要有函数,提高代码的可读性,避免重复的代码,提高代码的复用性      在函数中能用return的不要print 1、递归的最大深度997 def foo(n):print(n)n+=1foo(n) foo(1) 递归的最大深度 2、修改递归的最大深度     由此我们可以看出,未报错之前能看到的最大数...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 这是第三部分,完成效果如下 图1 建图和导航 三、使用RTAB-Map进行建图和导航 1. rtab...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 由于之前的虚拟机性能限制,我在这个项目中使用了新的ubantu 16.04环境,虚拟机配置 内存 8GCPU...

  • [{name:1},{name:2}].forEach((v,i,ar) => {console.log(v,i,ar)});//基础遍历[{name:1},{name:2}].map((v) => v.name);//[1,2]返回对象数组中指定字段值的一位数组(不改变原始数组)[{name:1},{name:2},{name:3}...

  • 体验内容 使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图。 1. 安装一些依赖包 sudo apt-get install ros-melodic-move-base* sudo apt-get install ros-melodic-map-server* sudo apt-get insta...

  • 前言 我们知道Java/Python这种语言能够很好得 支持反射。反射机制 就是一种用户输入的字符串到对应实现方法的映射,比如http接口中 用户传入了url,我们需要调用该url对应的方法/函数对象 从而做出对应的操作。 而C++ 并没有友好得支持这样的操作,而最近工作中需要通过C++实现http接口,这个过程想要代码实现得优雅...