【测试效率提升技巧】xmind测试用例转换为excel工具使用手册

2023-11-01

【测试效率提升技巧】xmind测试用例转换为excel工具使用手册

一、前置环境配置

1.在命令行执行pip install xmind2testcase -U
2.到python中xmind2testcase的安装路径(我的路径是D:\python\Lib\site-packages\xmind2testcase)下新建一个文件夹,命名为web
3.在命令行cd到刚刚创建的web文件夹,执行pip freeze > requirements.txt
4.命令行执行pip install -r requirements.txt -U

PS:请尽量使用xMind8 Update9版本编写测试用例,否则可能出现无法转换的情况

二、执行

运行python安装目录下的application.py文件(我的文件位置在D:\python\Lib\site-packages\webtool\application.py)
命令行会显示本地生成的网页网址,直接复制到浏览器进入即可
在这里插入图片描述
实现效果如下:
在这里插入图片描述

Xmind2testcase的转换方法

1.在控制台输入xmind2testcase [path/xmind文件路径] [-csv] [-xml] [-json],例:xmind2testcase /root/homin/XX测试点.xmind -csv ##在当前目录下会转换为对应的csv类型文件。

2.在控制台输入 xmind2testcase webtool 8000 ,定义好本地端口后访问http://127.0.0.1:8000/,可通过web端进行文件转换,之后可通过点击“Get Zentao CSV / Get TestLink XML / Go Back”,生成对应的文件类型。

三、xmind书写模板和规则

这里是标准的xmind转换库所要求的xming用例格式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第六条规则,我们使用标注优先级图标作为”测试标题”与”测试步骤”界线,如果解析过程没有遇到优先级图标,则TestSuite后面的子主题链作为一条测试用例。
一条测试用例支持只有标题,没有测试步骤和预期结果,因为实际测试过程中,我们常常通过用例标题就可以明确测试点了。

之所以有第六条规则这样设计,因为实际测试用例设计过程中,我们所测产品往往有非常多的模块和层级。

四.xmind2testcase转换库针对禅道代码改良

默认下xmind2testcase转换的csv文件导入禅道时,不会添加用例类型和测试阶段。这里通过修改代码的方式使其导入时具有默认值,免去了导入后还要手动填写的麻烦。

4.1修改优先级,修改zentao.py

def gen_case_priority(priority):
    # 修改前
    # mapping = {1: '高', 2: '中', 3: '低'}
    # 修改后
    mapping = {1: '1', 2: '2', 3: '3', 4: '4'}
    if priority in mapping.keys():
        return mapping[priority]
    else:
        # 修改前
        return '中'
        # 修改后
        return '2'

4.2.修改用例类型,修改zentao.py

# 用例类型 用星星实现
def gen_case_type(case_type):
    mapping = {'star-red': "功能", "star-orange": "UI自动化", "star-blue": "接口自动化", "star-green": "性能",
               "star-purple": "安全", "star-dark-green": "安装部署", "star-dark-gray": "其他"}
    if case_type in mapping.keys():
        return mapping[case_type]
    else:
        return '功能'

4.3.修改适应阶段,修改zentao.py

def gen_a_testcase_row(testcase_dict):
    # ['所属模块', '相关需求', '用例标题', '前置条件', '步骤', '预期', '关键词', '优先级', '用例类型', '适用阶段']
    case_module = gen_case_module(testcase_dict['suite'])
    case_demand_name = gen_case_demand_name(testcase_dict['demand_name'])
    case_title = testcase_dict['name']
    case_precontion = testcase_dict['preconditions']  # 前置条件
    case_step, case_expected_result = gen_case_step_and_expected_result(testcase_dict['steps'])  # 测试步骤和预期
    case_keyword = gen_case_keyword(testcase_dict['demand_name'])  #关键词
    case_priority = gen_case_priority(testcase_dict['importance'])
    case_type = gen_case_type(testcase_dict['execution_type'])  # 用例类型 默认功能 标签实现
    # 修改前
    # case_apply_phase = '迭代测试'
    # 修改后
    case_apply_phase = '功能测试阶段'
    row = [case_module, case_demand_name, case_title, case_precontion, case_step, case_expected_result, case_keyword,
           case_priority, case_type, case_apply_phase]
    return row

4.4.导出文件有空行,修改zentao.py

zentao.py文件找到xmind_to_zentao_csv_file函数,写入文件方法加上newline=''
# 修改前
# with open(zentao_file, 'w', encoding='utf8') as f:
# 修改后
with open(zentao_file, 'w', encoding='utf8', newline='') as f:

4.5.用例步骤、预期结果序号后多一个空格,修改zentao.py

def gen_case_step_and_expected_result(steps):
    case_step = ''
    case_expected_result = ''
    # 修改后,把+ '. ' + 后的空格去掉  + '.' +
    for step_dict in steps:
        case_step += str(step_dict['step_number']) + '.' + step_dict['actions'].replace('\n', '').strip() + '\n'
        case_expected_result += str(step_dict['step_number']) + '.' + \
                                step_dict['expectedresults'].replace('\n', '').strip() + '\n' \

4.6.每导出一个用例步骤和预期结果都会多一个换行符,修改zentao.py

在这里插入图片描述
需要去除最后一个换行符

def gen_case_step_and_expected_result(steps):
    case_step = ''
    case_expected_result = ''
    # 修改后,把+ '. ' + 后的空格去掉  + '.' +
    for step_dict in steps:
        case_step += str(step_dict['step_number']) + '.' + step_dict['actions'].replace('\n', '').strip() + '\n'
        case_expected_result += str(step_dict['step_number']) + '.' + \
                                step_dict['expectedresults'].replace('\n', '').strip() + '\n' \
            if step_dict.get('expectedresults', '') else ''
    # 添加,去除每个单元格里最后一个换行符
    case_step = case_step.rstrip('\n')
    case_expected_result = case_expected_result.rstrip('\n')
    return case_step, case_expected_result

4.7.填写默认关键词,修改zentao.py

def gen_a_testcase_row(testcase_dict):
    case_module = gen_case_module(testcase_dict['suite'])
    case_title = testcase_dict['name']
    case_precontion = testcase_dict['preconditions']
    case_step, case_expected_result = gen_case_step_and_expected_result(testcase_dict['steps'])
    # 此处可填写默认关键词
    case_keyword = ''

4.8.去掉用例标题中的空格,修改parser.py

def gen_testcase_title(topics):
    """Link all topic's title as testcase title"""
    titles = [topic['title'] for topic in topics]
    titles = filter_empty_or_ignore_element(titles)
 
    # when separator is not blank, will add space around separator, e.g. '/' will be changed to ' / '
    separator = config['sep']
    if separator != ' ':
        # 修改前
        # separator = ' {} '.format(separator)
        # 修改后
        separator = ' {} '.format(separator)
    return separator.join(titles)

4.9.增加需求字段

4.9.1修改metadata.py

    def __init__(self, name='', demand_name='', details='', testcase_list=None, sub_suites=None, statistics=None):
        """
        TestSuite
        :param name: test suite name 模块名
        :param name: test suite demand_name 需求名
        :param details: test suite detail infomation
        :param testcase_list: test case list
        :param sub_suites: sub test suite list
        :param statistics: testsuite statistics info {'case_num': 0, 'non_execution': 0, 'pass': 0, 'failed': 0, 'blocked': 0, 'skipped': 0}
        """
        self.name = name
        self.demand_name = demand_name
        self.details = details
        self.testcase_list = testcase_list
        self.sub_suites = sub_suites
        self.statistics = statistics
    def to_dict(self):
        data = {
            'name': self.name,
            'demand_name': self.demand_name,
            'details': self.details,
            'testcase_list': [],
            'sub_suites': []
        }        

4.9.2 修改utils.py

def get_xmind_testcase_list(xmind_file):
    """Load the XMind file and get all testcase in it

    :param xmind_file: the target XMind file
    :return: a list of testcase data
    """
    xmind_file = get_absolute_path(xmind_file)
    testsuites = get_xmind_testsuites(xmind_file)
    testcases = []

    for testsuite in testsuites:
        product = testsuite.name
        for suite in testsuite.sub_suites:
            for case in suite.testcase_list:
                case_data = case.to_dict()
                case_data['product'] = product
                case_data['suite'] = suite.name
                case_data['demand_name'] = suite.demand_name
                testcases.append(case_data)
    return testcases

4.10.把原先的产品名(中心主题)改为功能模块名,输出文件名字一致,修改parser.py

def xmind_to_testsuites(xmind_content_dict):
    """convert xmind file to `xmind2testcase.metadata.TestSuite` list"""
    suites = []
    for sheet in xmind_content_dict:
        root_topic = sheet['topic']
        for i in range(len(root_topic['topics'])):
            suite = sheet_to_suite(root_topic['topics'][i])
            suites.append(suite)
    return suites


def filter_empty_or_ignore_element(values):
    """Filter all empty or ignore XMind elements, especially notes、comments、labels element"""
    result = []
    for value in values:
        if isinstance(value, str) and not value.strip() == '' and not value[0] in config['ignore_char']:
            result.append(value.strip())
    return result


def sheet_to_suite(root_topic):
    """convert a xmind sheet to a `TestSuite` instance"""
    suite = TestSuite()
    root_title = []

    def x(data):
        root_title.append(data['title'])
        if 'topics' in data.keys():
            data = data['topics'][0]
            x(data)
    x(root_topic)
    global module_name, demand_name
    module_name = root_title[1]  # 模块名
    demand_name = root_title[0] # 需求名


    suite.name = module_name  # 模块名
    suite.demand_name = demand_name  # 需求名
    suite.details = root_topic['note']
    suite.sub_suites = []

    for suite_dict in [root_topic]:
        suite.sub_suites.append(parse_testsuite(suite_dict))

    return suite


def parse_testsuite(suite_dict):
    testsuite = TestSuite()
    testsuite.name = module_name  # 模块名
    testsuite.demand_name = demand_name  # 需求名
    testsuite.details = suite_dict['note']
    testsuite.testcase_list = []

    for cases_dict in suite_dict.get('topics', []):
        for case in recurse_parse_testcase(cases_dict):
            testsuite.testcase_list.append(case)
    return testsuite


def recurse_parse_testcase(case_dict, parent=None):
    if is_testcase_topic(case_dict):
        case = parse_a_testcase(case_dict, parent)
        yield case
    else:
        if not parent:
            parent = []

        parent.append(case_dict)

        for child_dict in case_dict.get('topics', []):
            for case in recurse_parse_testcase(child_dict, parent):
                yield case

        parent.pop()


def is_testcase_topic(case_dict):
    """A topic with a priority marker, or no subtopic, indicates that it is a testcase"""
    priority = get_priority(case_dict)
    if priority:
        return True

    children = case_dict.get('topics', [])
    if children:
        return False

    return True


# 用例数据组合
def parse_a_testcase(case_dict, parent):
    testcase = TestCase()
    topics = parent + [case_dict] if parent else [case_dict]
    # 用例名称
    testcase.name = gen_testcase_title(topics)
    # 前置条件
    preconditions = gen_testcase_preconditions(topics)
    testcase.preconditions = preconditions if preconditions else ' '
    summary = gen_testcase_summary(topics)
    testcase.summary = summary if summary else testcase.name
    testcase.execution_type = get_execution_type(case_dict)  # 用例类型
    testcase.importance = get_priority(case_dict) or 2  # 优先级 1 2 3 4

    step_dict_list = case_dict.get('topics', [])
    if step_dict_list:
        testcase.steps = parse_test_steps(step_dict_list)
    testcase.result = get_test_result(case_dict['markers'])

    if testcase.result == 0 and testcase.steps:
        for step in testcase.steps:
            if step.result == 2:
                testcase.result = 2
                break
            if step.result == 3:
                testcase.result = 3
                break
            testcase.result = step.result
    return testcase


# 用例类型
def get_execution_type(case_dict):
    if isinstance(case_dict['markers'], list):
        for marker in case_dict['markers']:
            if marker.startswith('star'):
                return marker


# 优先级
def get_priority(case_dict):
    """Get the topic's priority(equivalent to the importance of the testcase)"""
    if isinstance(case_dict['markers'], list):
        for marker in case_dict['markers']:
            if marker.startswith('priority'):
                return int(marker[-1])


# 用例名称
def gen_testcase_title(topics):
    """Link all topic's title as testcase title"""
    titles = [topic['title'] for topic in topics]
    titles = filter_empty_or_ignore_element(titles)
    return titles[-1]


# 前置条件 修改成标签
def gen_testcase_preconditions(topics):
    labels = [topic.get('label', '') for topic in topics]
    labels = filter_empty_or_ignore_element(labels)
    for item in labels[::-1]:
        return item


def gen_testcase_summary(topics):
    comments = [topic['comment'] for topic in topics]
    comments = filter_empty_or_ignore_element(comments)
    return config['summary_sep'].join(comments)


# 用例步骤
def parse_test_steps(step_dict_list):
    steps = []
    for step_num, step_dict in enumerate(step_dict_list, 1):
        test_step = parse_a_test_step(step_dict)
        test_step.step_number = step_num
        steps.append(test_step)
    return steps


# 预期结果
def parse_a_test_step(step_dict):
    test_step = TestStep()
    test_step.actions = step_dict['title']
    expected_topics = step_dict.get('topics', [])
    if expected_topics:
        # 预期结果获取
        expected_topic = expected_topics[0]
        expected_result = expected_topic['title']
        if expected_result is None:  # 如果预期结果为空 使用空格占位
            expected_result = ' '
        test_step.expectedresults = expected_result
        markers = expected_topic['markers']
        test_step.result = get_test_result(markers)
    else:
        markers = step_dict['markers']
        test_step.result = get_test_result(markers)
    return test_step

五.修改xmind2testcase支持导出xlsx文档

默认只能导出csv格式的,而公司用的禅道版本又只支持xlsx格式的导入

5.1 使用pandas库

5.1.1在zentao.py文件中添加函数:xmind_to_zentao_xlsx_file_by_pandas,如下:

import pandas as pd    #使用pandas包来写入excel的,需要引入
def xmind_to_zentao_xlsx_file_by_pandas(xmind_file): #xmind导出禅道用例模板的xlsx格式
    """Convert XMind file to a zentao xlsx file"""
    xmind_file = get_absolute_path(xmind_file)
    logging.info('Start converting XMind file(%s) to zentao file...', xmind_file)
    testcases = get_xmind_testcase_list(xmind_file)

    fileheader = ["所属模块", "相关需求", "用例标题", "前置条件", "步骤", "预期", "关键词", "优先级", "用例类型", "适用阶段"]  # zd:添加“相关需求”字段
    zentao_testcase_rows = []
    for testcase in testcases:
        row = gen_a_testcase_row(testcase)
        zentao_testcase_rows.append(row)

    zentao_file = xmind_file[:-6] + '.xlsx'
    df = pd.DataFrame(data=zentao_testcase_rows, columns=fileheader) #构造数据
    df.to_excel(zentao_file, index=False)  #写入文件,设置不需要索引
    logging.info('Convert XMind file(%s) to a zentao csv file(%s) successfully!', xmind_file, zentao_file)
    return zentao_file

5.1.2在application.py中添加路由

@app.route('/<filename>/to/zentao_xlsx')
def download_zentao_xlsx_file(filename):
    full_path = join(app.config['UPLOAD_FOLDER'], filename)

    if not exists(full_path):
        abort(404)

    zentao_xlsx_file = xmind_to_zentao_xlsx_file_by_pandas(full_path)
    filename = os.path.basename(zentao_xlsx_file) if zentao_xlsx_file else abort(404)

    return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)

5.1.3在index.html添加xlsx的访问路径

<a href="{{ url_for('download_zentao_xlsx_file',filename=record[1]) }}">xlsx</a> |

5.1.4在ipreview.html添加xlsx的访问路径

<a href="{{ url_for('download_zentao_xlsx_file',filename= name) }}">Get Zentao xlsx</a>

运行application.py,即可看到此项目以运行,访问后则可以看到添加的xlsx导出链接
在这里插入图片描述

5.2 使用openpyxl

def xmind_to_zentao_xlsx_file(xmind_file):
    xmind_file = get_absolute_path(xmind_file)
    testcases = get_xmind_testcase_list(xmind_file)
    # print(testcases)

    fileheader = ["所属模块", "相关需求", "用例标题", "前置条件", "步骤", "预期", "关键词", "优先级", "用例类型", "适用阶段"]
    zentao_testcase_rows = [fileheader]
    for testcase in testcases:
        row = gen_a_testcase_row(testcase)
        zentao_testcase_rows.append(row)

    zentao_file = xmind_file[:-6] + '.xlsx'
    if os.path.exists(zentao_file):
        os.remove(zentao_file)
    xl = openpyxl.Workbook()
    xls = xl.create_sheet(index=0)
    for i in zentao_testcase_rows:
        xls.append(i)
    xl.save(zentao_file)
    return zentao_file

六.编写规则

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【测试效率提升技巧】xmind测试用例转换为excel工具使用手册 的相关文章

  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 在本地网络上运行 Bokeh 服务器

    我有一个简单的 Bokeh 应用程序 名为app py如下 contents of app py from bokeh client import push session from bokeh embed import server do
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解

随机推荐

  • matlab中如何表示开方,在matlab里面怎么输入开方号(根号)?9的开方怎么写?...

    答 sqrt 9 nthroot 8 3 人家想求的就是实数根把 不信你试试 8 1 3 和 nthroot 8 3 你就知道区别了 很多人不知道nthroot这个函数 用指数的方法画x的3次方根的图像结果发现x 答 sqrt 9 nthr
  • 说说代码评审

    关注公众号 1024个为什么 及时接收最新推送文章 本文内容 1 代码评审的目的 2 评审准备工作 3 评审过程中容易出问题的点 4 共同成长 近一段时间以来 组内严格实行代码评审制度 参与过多次评审后发现 一次有效的代码评审并不简单 把一
  • ucint核心边缘分析_物联网加速器:边缘计算,万亿芯片新空间

    温馨提示 如需原文档 可在PC端登陆未来智库官网 www vzkoo com 搜索下载本文档 报告概览 什么是边缘计算 边缘计算被定义为 一种新的计算方式 这种模式将计算与存储资源部署在更贴近移动设备或传感器的网络边缘 其核心在于 贴近 终
  • 解决github无法访问的办法

    方法 步骤 1 问题描述 能联网但不能访问github com 2 找到hosts文件 地址 C Windows System32 drivers etc 一般是在这的 3 不要直接在这修改hosts文件 需要将hosts文件复制粘贴到桌面
  • 杨辉三角形(超级简单的Python实现方法)

    杨辉三角形大家都知道 那么在这里就不再介绍了 大家肯定都用C C 实现过杨辉三角形 是把数据存放在了一个二维数组里 那么如何让用Python来实现杨辉三角形呢 我查看了网上的很多方法 都很麻烦 有的还用到了生成器 那我们来看看简单的方法吧
  • 一个完整的项目管理流程

    一个完整的项目管理流程 从一个项目提出到结束 按照ISO9001 2000的项目管理流程 大致有如下步骤 1 产品立项报告 按照公司的管理流程 由公司有关人等都有可能提出 产品立项报告 比如公司老总 市场部门 研发部门 一般是在公司组织的定
  • 字符数组的学习总结

    今天主要讲了两点 一是字符数组的定义 二是字符数组的拷贝 也是重点 一 字符数组的定义 char arr 5 a b c d e char brr 5 a b c 聚合类型 只初始化部分 剩余部分为0 0 char crr a b c d
  • CTF逆向工程入门_1

    这篇文章写给众多参加东华网络安全大赛的小伙伴们 初次撰写 大佬们发现错误的地方可以指正出来哈 CTF逆向工程入门 1 http blog csdn net s1054436218 article details 71698904 CTF逆向
  • 刘强东的自白:我为啥要和苏宁打价格战?

    价格屠夫 挑事者 城府很深 这是很多人对于刘强东的评价 刘强东则辩白称 他没有想象的那样复杂 同时 他也自述了为何要与苏宁 国美展开价格战 以及此次价格战的京东兵法 精彩语录 1 李国庆他们就是擦皮鞋的 他们有能力打价格战吗 有能力的话不需
  • 【数据结构】顺序表(SeqList)(增、删、查、改)详解

    一 顺序表的概念和结构 1 顺序表的概念 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构 一般情况下采用数组存储 在数组上完成数据的增删查改 2 顺序表的结构 1 静态顺序表 使用定长数组存储元素 缺点 只适用于确定知道需要
  • AWS EC2使用过程总结

    步骤1 开通AWS账号 需要一个邮箱 一个信用卡账号 有第一年的免费试用 EC2每个月免费试用750小时 注册完成后 得到实例管理平台 步骤2 开通EC2实例 步骤3 开通网关和安全组 使外部可以访问 在任何一台电脑的浏览器输入云服务器的公
  • 3.微服务概述

    1 大型网络架构变迁 SOA与微服务最大的差别就是服务拆分的细度 目前大多数微服务实际上是SOA架构 真正的微服务应该是一个接口对应一个服务器 开发速度快 成本高 微服务 SOA 能拆分的就拆分 是整体的 服务能放一起的都放一起 业务逻辑存
  • java处理网络图片

    将网络图片地址转为InputStream 获取网络图片 HttpURLConnection connection HttpURLConnection new URL url openConnection connection setRead
  • webgoat全关教程手册

    Webgoat Webwolf owaspbwa里面的两个服务 搭建 先要安装jdk Webgoat和Webwolf Webgoat和Webwolf jdk1 8不支持了 需要安装jdk11 去git上下载Webgoat和Webwolf h
  • 李宏毅课程作业五 CNN Explaination

    李宏毅课程作业五 CNN Explaination 本文主要是对课程里的代码加上自己的注解 记录下点滴知识 一 代码作业 1 环境设置 2 引入库 3 参数分析 4 定义模型 5 定义创建数据集 6 显著性图片 7 解释性Filter ex
  • Linux如何压缩或解压文件到指定目录

    解压文件到指定目录 命令格式 tar zxvf 压缩包文件名 tar gz C 路径 例如 tar zxvf aaa tar gz C tmp 压缩文件到指定目录 命令格式 tar zcvf 目录 压缩包文件名 tar gz 源文件 例如
  • springboot配置分页插件pageHelper(yml)

    1 导入maven
  • 一份超详细的Spring4常用知识清单!

    文章目录 1 Spring 是什么 2 Spring模块结构 3 Spring核心 3 1 IOC 和 DI 3 2 Spring 容器 4 Spring中Bean 4 1 IOC 容器中 Bean 的生命周期方法 4 2 在 Spring
  • C++ std::bind用于成员函数

    使用bind绑定到成员函数时 即使成员函数不需参数 也要将this绑定在第一个参数 include
  • 【测试效率提升技巧】xmind测试用例转换为excel工具使用手册

    测试效率提升技巧 xmind测试用例转换为excel工具使用手册 一 前置环境配置 二 执行 Xmind2testcase的转换方法 1 在控制台输入xmind2testcase path xmind文件路径 csv xml json 例