使用脚本向Tapd批量导入测试用例


问题:目前公司管理项目工具是Tapd,我们测试用例管理也在上面,Tapd每次只支持一个sheet导入,假如一个excel中存在多个sheet,导入时还是很花费时间,所以写了一个脚本使用接口来导入,当然本质还是一个一个的导入,但是至少解放了双手!

设计思路如下:

 

 

 代码如下:共两个python文件

1.creatCase.py

 1 import openpyxl
 2 from openpyxl import Workbook, workbook
 3 
 4 # 读取数据,将原始文件的sheet拆分成一个一个的电子表格文件
 5 def copy_file(sorce_file):
 6     wb = openpyxl.load_workbook(sorce_file)
 7     sheets = wb.sheetnames
 8     print(sheets)
 9     if not sheets:
10         print('文件为空')
11     else:
12         for sheetname in sheets.__iter__():
13             if sheetname == '目录':
14                 print('存在目录表单,跳过')
15             else:
16                 print('复制' + format(sheetname))
17                 copy_sheet(sorce_file, sheetname)
18 
19 
20 def copy_sheet(sorce_file_path, sheet_name):
21     # 源文件
22     wb1 = openpyxl.load_workbook(sorce_file_path)
23     new_file_path = 'testcase_list\\'+sheet_name + '.xlsx'
24     sheet1 = wb1[sheet_name]
25     wb = Workbook()
26     ws = wb.active
27     max_row = sheet1.max_row  # 最大行数
28     max_column = sheet1.max_column  # 最大列数
29 
30     for m in range(1, max_row + 1):
31         for n in range(97, 97 + max_column):  # chr(97)='a'
32 
33             n = chr(n)  # ASCII字符
34             i = '%s%d' % (n, m)  # 单元格编号
35             cell1 = sheet1[i].value
36             ws[i].value = cell1
37 
38     wb.save(new_file_path)  # 保存数据
39     wb1.close()  # 关闭excel
40     wb.close()
41 
42 
43 if __name__ == '__main__':
44     sorce_file = 'C:/xxx/xxx/xxx/.../xx.xlsx'
45     copy_file(sorce_file)

2.接口操作

uploadCase.py

 1 import requests
 2 import openpyxl
 3 import creatCase
 4 
 5 user_agent = r'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36' \
 6              r' (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'
 7 headers = {'User-Agent': user_agent, 'Connection': 'keep-alive'}
 8 
 9 # 登录tapd
10 def login_fun(login_url,name,pwd,project_id):
11     values = {'data[Login][ref]': 'http://www.tapd.cn/'+project_id+'/sparrow/tcase/tcase_list',
12               'data[Login][encrypt_key]': 'bORItxocKUHkRTlyhYmDMLZGQGtBvBc/GWZKPTdll6s=',
13               'data[Login][encrypt_iv]': '4J11QPi39mXTJtJ0HEqnCA==',
14               'data[Login][site]': 'TAPD',
15               'data[Login][via]': 'encrypt_password',
16               'data[Login][email]': name,
17               'data[Login][password]': pwd,
18               'data[Login][login]': 'login',
19               'dsc_token': '16vSWxWRr85KB5Rn'}
20 
21     s= requests.Session()
22     content = s.post(url=login_url, headers=headers, data=values)
23     return s
24 
25 # tapd中新增测试用例父目录
26 def creat_parafold(login_url,name,pwd,project_id,paraname):
27     creat_parafold_url = 'https://www.tapd.cn/'+project_id+'/sparrow/tcase_categories/quick_add_category'
28     data1 = {'data[TcaseCategory][parent_id]':'0','data[TcaseCategory][name]':paraname}
29     s=login_fun(login_url,name,pwd,project_id)
30     creat_parare =s.post(url=creat_parafold_url, headers=headers, data=data1)
31     paraid_value = creat_parare.json()['id']
32     return paraid_value
33 
34 # 将excel中的所有sheetname以测试用例子目录形式创建到tapd测试用例父目录下,并在对应目录下上传测试用例
35 def creatFold_importCase(login_url,name,pwd,project_id,casepath,paraname):
36     creatCase.copy_file(casepath)
37     wb = openpyxl.load_workbook(casepath)
38     sheets = wb.sheetnames
39 
40     creat_fold_url = 'https://www.tapd.cn/'+project_id+'/sparrow/tcase_categories/quick_add_category'
41     key1 = "data[TcaseCategory][parent_id]"
42     key2 = 'data[TcaseCategory][name]'
43     s = login_fun(login_url, name, pwd, project_id)
44     if paraname:
45         paraid = creat_parafold(login_url,name,pwd,project_id,paraname)
46         print(paraid)
47     else:
48         paraid = 0
49         print(paraid)
50 
51     # dict_id = {}
52     for value2 in sheets:
53         value1= {key1: paraid, key2: value2}
54         creat_re = s.post(url=creat_fold_url,headers=headers,data=value1)
55         id_value=creat_re.json()['id']
56         print(id_value)
57         uploadfile_url = 'https://www.tapd.cn/'+project_id+'/imports/import_tcase'
58         filepath = 'testcase_list/'+value2+'.xlsx'
59         file = {
60             "content": open(filepath, "rb"),
61             "Content-Type": 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
62             "Content-Disposition": "form-data",
63             "filename": value2+'.xlsx'}
64 
65         case_data = {'data[tcase][extra_params]': '',
66                      'data[tcase][import_type]': 'add',
67                      'data[tcase][selected_category_id]': id_value,
68                      'data[tcase][Apply]': '下一步',
69                      'dsc_token': "16vSWxWRr85KB5Rn"}
70         upload_res = s.post(url=uploadfile_url, headers=headers, files=file, data=case_data, allow_redirects=False)
71         print(upload_res)
72         sure_url=upload_res.headers['Location']
73         print(sure_url)
74         sure_data = {'data[tcase][selected_category_id]': id_value,
75                      'data[tcase][Apply]': '确认导入',
76                      'dsc_token': '16vSWxWRr85KB5Rn'}
77         sure_res = s.post(url=sure_url, headers=headers, data=sure_data)
78         print(sure_res)
79 
80 
81 if __name__ == '__main__':
82     # 进入项目的测试用例页面,点击退出后,再登录时的请求url
83     login_url='xxxx'
84     # 登录账号
85     mobilephone='xxx'
86     # 登录密码,可在登录是请求参数中查看,urlencode形式
87     pwd='xxx'
88     # 导入项目id
89     project_id='xxx'
90     # 测试用例所在目录
91     casepath='C:/xxx/xxx/xxx测试用例.xlsx'
92     # paraname代表创建测试目录的根目录,如果传空,则新增的测试子目录默认创建在【所有的】目录下,如果传一个字符串,则后续测试子目录创建在该目录下
93     paraname="xxx项目V1.0版本"
94     creatFold_importCase(login_url,mobilephone,pwd,project_id,casepath,paraname)

运行结果:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM