使用腳本向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