【Web_接口测试_Python3_PyDeepLX&openpyxl】批量翻译,将Excel测试用例文件,批量从中文翻译成英文

# -*- coding: utf-8 -*-

# This code shows an example of text translation from English to Simplified-Chinese.
# This code runs on Python 2.7.x and Python 3.x.
# You may install `requests` to run this code: pip install requests
# Please refer to `https://api.fanyi.baidu.com/doc/21` for complete api document

# For list of language codes, please refer to `https://api.fanyi.baidu.com/doc/21`
# from_lang = 'zh'
# to_lang =  'en'
# query = 'Hello World! This is 1st paragraph.\nThis is 2nd paragraph.'

# -- 原始代码
# salt = random.randint(32768, 65536)
# sign = make_md5(appid + query + str(salt) + appkey)
#
# # Build request
# headers = {'Content-Type': 'application/x-www-form-urlencoded'}
# payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}
#
# # Send request
# r = requests.post(url, params=payload, headers=headers)
# result = r.json()
#
# # Show response
# # 原始内容:
# # {
# #     "from": "zh",
# #     "to": "en",
# #     "trans_result": [
# #         {
# #             "src": "Hello World! This is 1st paragraph.",
# #             "dst": "Hello World! This is the first paragraph"
# #         },
# #         {
# #             "src": "This is 2nd paragraph.",
# #             "dst": "This is the 2nd paragraph"
# #         }
# #     ]
# # }
# print(json.dumps(result, indent=4, ensure_ascii=False))
import traceback
import requests
import random
import json
import time
import openpyxl
from hashlib import md5
# from config.config_log import log


# Generate salt and sign
def make_md5(s, encoding='utf-8'):
    return md5(s.encode(encoding)).hexdigest()

def baidu_api(query, from_lang, to_lang):
    appid = ''
    appkey = ''
    try:
        if query is None or len(query) < 1:
            print(f"{str(query)} --> {str(None)}")
            return None
    except Exception as e:
        print(f"打印失败({query}):不影响流程-1,失败原因({e})")
    salt = random.randint(32768, 65536)
    sign = make_md5(appid + query + str(salt) + appkey)

    # Build request
    endpoint = 'http://api.fanyi.baidu.com'
    path = '/api/trans/vip/translate'
    url = endpoint + path
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}

    # Send request
    res = requests.post(url, params=payload, headers=headers)

    # Show response
    # print(json.dumps(result, indent=4, ensure_ascii=False))
    try:
        res_value = res.json()["trans_result"][0]['dst']
        if "【" in res_value: res_value = str(res_value).replace("【", "[")
        if "】" in res_value: res_value = str(res_value).replace("】", "]")
        print(f"{query} --> {res_value}")
    except Exception as e:
        res_value = "exception"
        print(f"打印失败({query}):不影响流程-2,失败原因({e})")
    return res_value


def deepl_api(query="商机页面,必填字段检查", source_lang="ZH", target_lang="EN"):
    url = "http://localhost:1188/translate"
    # EN ,ZH
    payload = json.dumps({
        "text": query,
        "source_lang": source_lang,
        "target_lang": target_lang
    })
    headers = {
        'Content-Type': 'application/json'
    }
    res = requests.request("POST", url, headers=headers, data=payload)
    # print(response.text)
    # {"alternatives":["世界你好","你好世界","Hello World"],"code":200,"data":"你好,世界","id":8317711002,"method":"Free","source_lang":"EN","target_lang":"ZH"}
    try:
        res_value = res.json()["data"]
        # 格式化特殊字符
        if "【" in res_value: res_value = str(res_value).replace("【", "[")
        if "【" in res_value: res_value = str(res_value).replace("】", "]")
        print(f"{query} --> {res_value}")
    except Exception as e:
        res_value = "exception"
        print(f"打印失败({query}):不影响流程-2,失败原因({e})")
    return res_value


def main_translate(start_path, sheet_name="SIT测试用例", mode="deepl"):
    """
    mode = baidu
    mode = deepl
    """
    print(f"sheet_name:{sheet_name},mode:{mode}")
    wb = openpyxl.load_workbook(start_path)
    # sheet = wb.active
    sheet = wb[sheet_name]

    # 翻译次数来之不易,建议失败了也保存部分内容
    try:
        for i in range(1, sheet.max_row, 1):
        # for i in range(1, 5):
            row_line = str(i + 1)
            print(f"第{row_line}行".center(100, "-"))
            for col in [
                "B_B",
                "D_D",
                "G_G",
                "F_F",
                "J_J",
                "L_L",
                "M_M"
            ]:

                start_index, end_index = col.split("_")[0], col.split("_")[1]
                if sheet[start_index + row_line].value is None:
                    # cell = sheet[start_index + row_line]
                    # merged_start_cell = sheet.cell(cell.range.start_row, cell.range.start_column)
                    # merged_start_cell.value = "New Value"
                    pass
                else:
                    # 判断翻译方式:EN ZH
                    if mode == "baidu":
                        # 百度普通开发者,每秒只能发送1个请求
                        sheet[end_index + row_line] = baidu_api(query=sheet[start_index + row_line].value, from_lang="auto", to_lang="en")
                    elif mode == "deepl":
                        sheet[end_index + row_line] = deepl_api(query=sheet[start_index + row_line].value, source_lang="ZH", target_lang="EN")
                    time.sleep(1)
    except Exception as e:
        print(traceback.format_exc())
    end_path = start_path.replace(".xlsx", f"""(EN)_{time.strftime("%Y%m%d_%H%M%S")}.xlsx""")
    wb.save(end_path)


if __name__ == '__main__':
    start_path = r""
    # main_translate(start_path, sheet_name="SIT测试用例", mode="baidu")
    main_translate(start_path, sheet_name="SIT测试用例", mode="deepl")  # 这种方法,字符串中有【】,翻译后会自动少第二个括号,需要批量改为[]再翻译

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将Xmind转换Excel测试用例,可以使用Python编程语言进行自动化操作。下面是一个简单的步骤: 1. 安装所需的Python库:首先,需要安装一些Python库以便处理Xmind和Excel文件。可以使用pip命令安装openpyxl和xmindparser库:`pip install openpyxl xmindparser` 2. 导入所需的库:在Python脚本中,导入openpyxl和xmindparser库以及其他可能需要的库文件: ```python import openpyxl import xmindparser ``` 3. 解析Xmind文件:使用xmindparser库将Xmind文件解析为Python对象,以便进一步处理: ```python xmind_file = xmindparser.load("path_to_xmind_file.xmind") ``` 4. 创建Excel文件和工作表:使用openpyxl库创建一个Excel文件并添加一个工作表: ```python excel_file = openpyxl.Workbook() sheet = excel_file.active ``` 5. 遍历Xmind对象并写入Excel文件:使用循环遍历Xmind对象的各个部分,并将它们写入Excel文件中的相应位置。具体如何遍历和写入将根据Xmind文件的结构而定,以下是一个示例: ```python for topic in xmind_file[0]["topic"]["topics"]: sheet.cell(row=row_num, column=1, value=topic["title"]) for subtopic in topic["topics"]: sheet.cell(row=row_num, column=2, value=subtopic["title"]) row_num += 1 ``` 6. 保存并关闭Excel文件:在完写入后,使用openpyxl库的save方法将Excel文件保存在磁盘上,并使用close方法关闭文件: ```python excel_file.save("path_to_excel_file.xlsx") excel_file.close() ``` 通过以上步骤,就能够使用Python将Xmind转换为Excel测试用例。根据实际需求,可能需要进一步处理和调整代码,例如设置样式、添加其他信息等。 ### 回答2: Python可以使用一些库和工具将Xmind格式的思维导图转换为Excel测试用例。下面介绍一种常见的方法: 1. 首先,我们需要安装并导入相关库,例如`xlwt`用于创建Excel文件、`xmind`用于读取Xmind文件等。 ```python import xlwt from xmindparser import xmind_to_dict ``` 2. 接下来,我们需要将Xmind文件加载并转换为字典。这可以通过`xmind_to_dict`函数来实现。 ```python xmind_file = 'path/to/xmind_file.xmind' data = xmind_to_dict(xmind_file) ``` 3. 现在,我们可以通过遍历字典中的内容来提取测试用例的相关信息,并将其存储到Excel文件中。 ```python workbook = xlwt.Workbook() worksheet = workbook.add_sheet('Test Cases') # 写入表头 header = ['用例名称', '用例编号', '前置条件', '步骤', '预期结果'] for col, name in enumerate(header): worksheet.write(0, col, name) # 遍历Xmind字典 def parse_xmind(data, row): for item in data: if 'topic' in item: topic = item['topic'] case_name = topic['title'] case_id = topic['id'] precondition = '' # 前置条件 steps = '' # 步骤 expected_result = '' # 预期结果 # 检查是否存在子主题 if 'topics' in topic: for sub_topic in topic['topics']: if 'title' in sub_topic: title = sub_topic['title'] if title == '前置条件': precondition = sub_topic['topics'][0]['title'] elif title == '步骤': for step in sub_topic['topics']: steps += step['topics'][0]['title'] + '\n' elif title == '预期结果': for result in sub_topic['topics']: expected_result += result['topics'][0]['title'] + '\n' # 将用例信息写入Excel worksheet.write(row, 0, case_name) worksheet.write(row, 1, case_id) worksheet.write(row, 2, precondition) worksheet.write(row, 3, steps) worksheet.write(row, 4, expected_result) row += 1 # 递归处理子主题 if 'topics' in topic: row = parse_xmind(topic['topics'], row) return row # 开始处理Xmind数据 row = parse_xmind(data, 1) # 保存Excel文件 workbook.save('path/to/test_cases.xls') ``` 以上是将Xmind转换为Excel测试用例的一个简单示例。通过解析Xmind文件的层级结构,并针对每个主题提取相应的信息,我们可以轻松地生Excel文件,其中包含测试用例的名称、编号、前置条件、步骤和预期结果等内容。 ### 回答3: Python提供了丰富的第三方库和工具,可以帮助我们实现将XMind转换Excel测试用例的功能。下面是一个简单的示例代码,用于将XMind文件中的测试用例转换Excel格式: 1. 首先,我们需要使用Python中的xlwt库来创建Excel文件并写入测试用例数据。 ```python import xlwt from xmindparser import xmind_to_dict def convert_xmind_to_excel(xmind_file, excel_file): # 读取XMind文件 workbook_dict = xmind_to_dict(xmind_file) # 创建Excel文件 workbook = xlwt.Workbook() worksheet = workbook.add_sheet('Test Cases') # 写入表头 headers = ['Test Case ID', 'Test Case Name', 'Steps', 'Expected Result'] for index, header in enumerate(headers): worksheet.write(0, index, header) # 写入测试用例数据 row = 1 for sheet in workbook_dict['sheets']: for topic in sheet['rootTopic']['topics']: test_case_id = topic['title'] test_case_name = topic['topics'][0]['title'] steps = topic['topics'][0]['topics'][0]['title'] expected_result = topic['topics'][0]['topics'][0]['topics'][0]['title'] worksheet.write(row, 0, test_case_id) worksheet.write(row, 1, test_case_name) worksheet.write(row, 2, steps) worksheet.write(row, 3, expected_result) row += 1 # 保存Excel文件 workbook.save(excel_file) ``` 2. 在上述代码中,我们使用了`xmindparser`库来解析XMind文件,需要使用`pip install xmindparser`命令来安装该库。 3. `convert_xmind_to_excel`函数接受两个参数,分别是XMind文件路径以及要保存的Excel文件路径。 4. 函数首先使用`xmind_to_dict`函数将XMind文件解析一个字典,然后创建一个Excel对象。 5. 接下来,我们按照Excel的格式,将测试用例的数据逐行写入Excel文件,包括测试用例ID、名称、步骤和预期结果。 6. 最后,使用`workbook.save(excel_file)`保存Excel文件。 通过以上代码,我们可以将XMind文件中的测试用例转换Excel格式,方便进行测试用例管理和执行。当然,根据实际需求,还可以根据XMind文件的结构进行更复杂的操作,例如解析不同分支、处理更多层级的数据等。可以根据具体情况对代码进行适当的优化和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值