背景

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

具体实现

获取用例信息

  1. def download_testcase():
  2. """
  3. 获取(下载)testlink上面指定用例集的数据
  4. :return:
  5. """
  6. datas = []
  7. for data in tlc.getTestCasesForTestSuite(father_id, True, 'full'):
  8. actions = []
  9. expected_results = []
  10. name = data["name"]
  11. summary = data["summary"]
  12. preconditions = data["preconditions"]
  13. importance = data["importance"]
  14. execution_type = data["execution_type"]
  15. author = data["author_id"]
  16. # print(json.dumps(data, indent=4))
  17. for i in range(len(data["steps"])):
  18. actions.append(data["steps"][i]["actions"])
  19. expected_results.append(data["steps"][i]["expected_results"])
  20. datas.append((name, preconditions, '\n'.join(actions), '\n'.join(expected_results), format_execution_type(execution_type), format_auth(author), format_importance(importance), summary))

进行数据转换

  1. def format_execution_type(source_data):
  2. """
  3. 转换执行方式
  4. :param source_data:
  5. :return:
  6. """
  7. switcher = {
  8. '2': "自动化",
  9. '1': "手工"
  10. }
  11. return switcher.get(source_data, "Param not defind")
  12. def format_importance(source_data):
  13. """
  14. 转换优先级
  15. :param source_data:
  16. :return:
  17. """
  18. switcher = {
  19. '1': "低",
  20. '2': "中",
  21. '3': "高"
  22. }
  23. return switcher.get(source_data, "Param not defind")
  24. def format_auth(source_data):
  25. """
  26. 转换作者:可以通过testlink的user表查询到对应id->name对
  27. :param source_data:
  28. :return:
  29. """
  30. switcher = {
  31. '100': "tester_name",
  32. }
  33. return switcher.get(source_data, "Param not defind")

保存至Excel

  1. def save_suits(file_path, datas):
  2. """
  3. 保存用例
  4. :param file_path: 保存路径
  5. :param datas:
  6. :return:
  7. """
  8. book = xlrd.open_workbook(file_path, formatting_info=True) # 读取Excel
  9. new_book = copy.copy(book) # 复制读取的Excel
  10. sheet = new_book.get_sheet(0) # 取第一个sheet页
  11. line_num = 1
  12. for i in range(0, len(datas)):
  13. name, preconditions, actions, expected_results, execution_type, author, importance, summary = datas[i]
  14. sheet.write(line_num, 0, u'%s' % name)
  15. sheet.write(line_num, 1, u'%s' % preconditions)
  16. sheet.write(line_num, 2, u'%s' % actions)
  17. sheet.write(line_num, 3, u'%s' % expected_results)
  18. sheet.write(line_num, 4, u'%s' % execution_type)
  19. sheet.write(line_num, 5, u'%s' % author)
  20. sheet.write(line_num, 6, u'%s' % importance)
  21. sheet.write(line_num, 7, u'%s' % summary)
  22. line_num += 1
  23. report_path = os.path.abspath(os.path.join('download'))
  24. if not os.path.exists(report_path):
  25. os.makedirs(report_path)
  26. suits_name = get_suites(father_id)["name"]
  27. new_book.save(os.path.abspath(os.path.join(report_path, '用例集_{}@{}.xlsx'.format(suits_name, time.strftime('%Y.%m.%d@%H%M%S')))))
  28. def get_suites(suite_id):
  29. """
  30. 获取用例集信息
  31. :return:
  32. """
  33. try:
  34. suites = tlc.getTestSuiteByID(suite_id)
  35. return suites
  36. except testlink.testlinkerrors.TLResponseError as e:
  37. # traceback.print_exc()
  38. logger.warning(str(e).split('\n')[1])
  39. logger.warning(str(e).split('\n')[0])
  40. return

使用方法

环境依赖

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

具体方法

  • 将上述的代码保存到一个文件中,底部添加下列代码进行调用
  1. if __name__ == "__main__":
  2. url = "http://localhost/lib/api/xmlrpc/v1/xmlrpc.php"
  3. key = "6c3fe0796142db21" # 这个key是错误的key
  4. tlc = testlink.TestlinkAPIClient(url, key)
  5. father_id = "274539" # 想要下载的用例集的ID,可通过在testlink界面选取用例集,然后点击右键获取
  6. download_testcase()
  • 目录结构参考,与上一篇文章的脚本放在了一起
  1. D:\Project\UPLOAD_DATA2TESTLINK
  2. download_testcase.py
  3. logger_better.py
  4. upload_excel_data.py

  5. └─testCase
  6. down_load_template.xls
  • 在上一步的文件同一目录下创建一个testCase文件夹,创建一个xls文件,文件格式如下:

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

  1. python完成加密参数sign计算并输出指定格式的字符串

    加密规则: 1.固定加密字符串+字符串组合(key/value的形式,并通过aissc码排序), 2.通过sha1算法对排序后的字符串进行加密, 3.最终输出需要的参数sign 4.完成请求参数数据的 ...

  2. Python Socket 编程——聊天室演示样例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...

  3. python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名。

    python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名. 使用for循环即可实现: for name in range(1,11): desktop_path='C: ...

  4. Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载

    Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务 ...

  5. python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

    经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路. 我们在百度搜索天气查询,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接 ...

  6. python oop培训文档里面的 正宗oop、多个函数间反复return传参、多个文件无限复制粘贴扣字、无效废物滑稽类4种方式的例子。(2)

    把文档里面说的几种范式发出来. 4种编程范式实现一个人吃喝拉撒长身体的代码.语法很简单,思想模拟了所有程序员写代码时候的代码规划设计想法. 0.我不反对复制粘贴的写法,可以百度搜索复制粘贴网上现有的, ...

  7. [教程]K8Cscan调用外部程序(Win/Linux批量上控/执行多条命令/保存结果)

    0x000 调用原理 Cscan调用外部程序有两种方式,一是编写DLL,二是配置文件 编写DLL文件对于不懂编程的人来说可能会很难(虽然支持各语言) 由于考虑到很多人不会编程或会编程又急用无法短时间转 ...

  8. 《在纹线方向上进行平滑滤波,在纹线的垂直方向上进行锐化滤波》 --Gabor增强的具体实践

    <在纹线方向上进行平滑滤波,在纹线的垂直方向上进行锐化滤波>                                          --Gabor增强的具体实践     一.问 ...

  9. [PHP学习教程 - 文件]002.修改上传文件大小限制(File Upload Limit)

    引言:通常大家直装xampp之后,默认的文件上传大小应该被设定成2M左右,这个时候如果上传超过2M的东西,就会报错,让人非常尴尬.如何修改呢? 导航索引: 概念 FTP常用API FTP封装类 其他 ...

随机推荐

  1. 日志记录---log4j详解

    Apache官方项目地址 通常的日志记录的缺点是会减慢程序的运行速度,如果用普通的System.out的话影响视觉效果,另外解耦度也不好,而log4j的设计则使得日志记录变得可靠快速和可拓展性好. l ...

  2. Sublime的使用!emmet常用快捷键梳理

    多的不说了! 示例一: !+tab 效果: <!doctype html> <html lang="en"> <head> <meta c ...

  3. Thinkphp的cookie的怎么玩?

    在使用COOKIE的时候,首先要对COOKIE进行加密,加密方式采用:异位或的方式进行加密: // 异位或加密 1是加密 0 是解密 function encrytion($value,$type=0 ...

  4. 阿里云搭建SVN服务器

    1:安装svn apt-get install subversion 2. 开启svn服务器 svnserve -d 检查是否开启:ps aux | grep svnserve 若出现如下内容: wk ...

  5. poj3171 Cleaning Shifts【线段树(单点修改区间查询)】【DP】

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4422   Accepted: 1482 D ...

  6. arpa/inet.h所引起的Segmentation fault及网络编程常见的头文件

    最近在学习Linux网络编程方面的知识,感觉还是有些困难.主要是对协议过程的理解,还有socket的API的理解不够深刻.今天复习编写了一个TCP的服务端和客户端的程序实现client.c从命令行参数 ...

  7. Mirror--镜像断开的解决办法

    如果镜像在搭建一段时候后出现问题,可能存在以下原因: 1. 因为主库或镜像库存在内存压力,导致无法完成镜像日志传送和重做 解决办法:设置数据库最小内存,保证数据库有足够内存完成镜像操作 2. 因为主库 ...

  8. centos linux系统日常管理复习 CPU物理数逻辑核数,iftop ,iotop ,sar ,ps,netstat ,一网卡多IP,mii-tool 连接,ethtool速率,一个网卡配置多个IP,mii-tool 连接,ethtool速率 ,crontab备份, 第十八节课

    centos linux系统日常管理复习 物理CPU和每颗CPU的逻辑核数,uptime ,w,vmstat,iftop ,iotop ,sar ,ps,netstat ,一个网卡配置多个IP,mii ...

  9. [golang grpc] 框架介绍

    官方网站 http://www.grpc.io/ http://www.grpc.io/docs/quickstart/go.html grpc安装 • go安装 目前grpc需要go 1.5以上版本 ...

  10. Python中被双下划线包围的魔法方法

    基本的魔法方法 __new__(cls[, ...]) 用来创建对象 1. __new__ 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __i ...