parent
387dac5832
commit
54f2cf4ef0
@ -0,0 +1,4 @@
|
|||||||
|
op_name:Default/Cast-op6 op_type:Cast input_id:0 input_format:DefaultFormat input_data_type:40 input_shape:"32,3,224,224" output_id:0 output_format:DefaultFormat output_data_type:39 output_shape:"32,3,224,224"
|
||||||
|
op_name:Default/TransData-op7 op_type:TransData input_id:0 input_format:DefaultFormat input_data_type:39 input_shape:"32,3,224,224" output_id:0 output_format:NC1HWC0 output_data_type:39 output_shape:"32,1,224,224,16"
|
||||||
|
op_name:Default/network-WithLossCell/_backbone-ResNet/conv1-Conv2d/Cast-op5 op_type:Cast input_id:0 input_format:FracZ input_data_type:40 input_shape:"49,4,16,16" output_id:0 output_format:FracZ output_data_type:39 output_shape:"49,4,16,16"
|
||||||
|
op_name:Default/network-WithLossCell/_backbone-ResNet/layer1-SequentialCell/0-ResidualBlock/conv1-Conv2d/Cast-op28 op_type:Cast input_id:0 input_format:FracZ input_data_type:40 input_shape:"4,4,16,16" output_id:0 output_format:FracZ output_data_type:39 output_shape:"4,4,16,16"
|
@ -0,0 +1,4 @@
|
|||||||
|
Default/Cast-op6 32 51517 0
|
||||||
|
Default/TransData-op7 32 51518 0
|
||||||
|
Default/network-WithLossCell/_backbone-ResNet/conv1-Conv2d/Cast-op5 32 51519 0
|
||||||
|
Default/network-WithLossCell/_backbone-ResNet/layer1-SequentialCell/0-ResidualBlock/conv1-Conv2d/Cast-op28 4 51522 0
|
@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"sampling_interval": 10,
|
||||||
|
"op_info": [
|
||||||
|
{
|
||||||
|
"op_id": 4,
|
||||||
|
"op_type": "TFReader",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": null,
|
||||||
|
"children": [3]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 3,
|
||||||
|
"op_type": "TFReader",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": {
|
||||||
|
"output_queue": {
|
||||||
|
"size": [10, 20, 30],
|
||||||
|
"length": 64
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 2,
|
||||||
|
"op_type": "TFReader",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": {
|
||||||
|
"output_queue": {
|
||||||
|
"size": [10, 20, 30],
|
||||||
|
"length": 64
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 1,
|
||||||
|
"op_type": "Shuffle",
|
||||||
|
"num_workers": 1,
|
||||||
|
"metrics": {
|
||||||
|
"output_queue": {
|
||||||
|
"size": [10, 20, 30],
|
||||||
|
"length": 64
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": [2, 4]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 0,
|
||||||
|
"op_type": "Batch",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": null,
|
||||||
|
"children": [1]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Binary file not shown.
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"sampling_interval": 10,
|
||||||
|
"op_info": [
|
||||||
|
{
|
||||||
|
"op_id": 3,
|
||||||
|
"op_type": "TFReader",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": {
|
||||||
|
"output_queue": {
|
||||||
|
"size": [10, 20, 30],
|
||||||
|
"length": 64
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 2,
|
||||||
|
"op_type": "TFReader",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": {
|
||||||
|
"output_queue": {
|
||||||
|
"size": [10, 20, 30],
|
||||||
|
"length": 64
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 1,
|
||||||
|
"op_type": "Shuffle",
|
||||||
|
"num_workers": 1,
|
||||||
|
"metrics": {
|
||||||
|
"output_queue": {
|
||||||
|
"size": [10, 20, 30],
|
||||||
|
"length": 64
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": [2, 3]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 0,
|
||||||
|
"op_type": "Batch",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": null,
|
||||||
|
"children": [1]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
op_name:Default/Cast-op6 op_type:Cast input_id:0 input_format:DefaultFormat input_data_type:40 input_shape:"32,3,224,224" output_id:0 output_format:DefaultFormat output_data_type:39 output_shape:"32,3,224,224"
|
||||||
|
op_name:Default/TransData-op7 op_type:TransData input_id:0 input_format:DefaultFormat input_data_type:39 input_shape:"32,3,224,224" output_id:0 output_format:NC1HWC0 output_data_type:39 output_shape:"32,1,224,224,16"
|
||||||
|
op_name:Default/network-WithLossCell/_backbone-ResNet/conv1-Conv2d/Cast-op5 op_type:Cast input_id:0 input_format:FracZ input_data_type:40 input_shape:"49,4,16,16" output_id:0 output_format:FracZ output_data_type:39 output_shape:"49,4,16,16"
|
||||||
|
op_name:Default/network-WithLossCell/_backbone-ResNet/layer1-SequentialCell/0-ResidualBlock/conv1-Conv2d/Cast-op28 op_type:Cast input_id:0 input_format:FracZ input_data_type:40 input_shape:"4,4,16,16" output_id:0 output_format:FracZ output_data_type:39 output_shape:"4,4,16,16"
|
@ -0,0 +1,2 @@
|
|||||||
|
1 Default/Cast-op6
|
||||||
|
2 Default/TransData-op7
|
@ -0,0 +1,4 @@
|
|||||||
|
Default/Cast-op6 32 1 0
|
||||||
|
Default/TransData-op7 32 2 0
|
||||||
|
Default/network-WithLossCell/_backbone-ResNet/conv1-Conv2d/Cast-op5 32 3 0
|
||||||
|
Default/network-WithLossCell/_backbone-ResNet/layer1-SequentialCell/0-ResidualBlock/conv1-Conv2d/Cast-op28 4 4 0
|
Binary file not shown.
@ -0,0 +1,5 @@
|
|||||||
|
serial_number node_type_name total_time(ms) dispatch_time(ms) run_start run_end
|
||||||
|
1 InitData 1.567 0.1 2298200409 2298200538
|
||||||
|
2 GetNext 0.989 0.087 2302769932 2302769980
|
||||||
|
3 TruncatedNormal 1.566 0.105 4098200409 4098200538
|
||||||
|
AI CPU Total Time(ms): 4.122000
|
@ -0,0 +1,4 @@
|
|||||||
|
op_name:Default/Cast-op6 op_type:Cast input_id:0 input_format:DefaultFormat input_data_type:40 input_shape:"32,3,224,224" output_id:0 output_format:DefaultFormat output_data_type:39 output_shape:"32,3,224,224"
|
||||||
|
op_name:Default/TransData-op7 op_type:TransData input_id:0 input_format:DefaultFormat input_data_type:39 input_shape:"32,3,224,224" output_id:0 output_format:NC1HWC0 output_data_type:39 output_shape:"32,1,224,224,16"
|
||||||
|
op_name:Default/network-WithLossCell/_backbone-ResNet/conv1-Conv2d/Cast-op5 op_type:Cast input_id:0 input_format:FracZ input_data_type:40 input_shape:"49,4,16,16" output_id:0 output_format:FracZ output_data_type:39 output_shape:"49,4,16,16"
|
||||||
|
op_name:Default/network-WithLossCell/_backbone-ResNet/layer1-SequentialCell/0-ResidualBlock/conv1-Conv2d/Cast-op28 op_type:Cast input_id:0 input_format:FracZ input_data_type:40 input_shape:"4,4,16,16" output_id:0 output_format:FracZ output_data_type:39 output_shape:"4,4,16,16"
|
@ -0,0 +1,4 @@
|
|||||||
|
Default/Cast-op6 32 51517 0
|
||||||
|
Default/TransData-op7 32 51518 0
|
||||||
|
Default/network-WithLossCell/_backbone-ResNet/conv1-Conv2d/Cast-op5 32 51519 0
|
||||||
|
Default/network-WithLossCell/_backbone-ResNet/layer1-SequentialCell/0-ResidualBlock/conv1-Conv2d/Cast-op28 4 51522 0
|
|
|
|
|
|
@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"sampling_interval": 10,
|
||||||
|
"op_info": [
|
||||||
|
{
|
||||||
|
"op_id": 4,
|
||||||
|
"op_type": "TFReader",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": null,
|
||||||
|
"children": [3]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 3,
|
||||||
|
"op_type": "TFReader",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": {
|
||||||
|
"output_queue": {
|
||||||
|
"size": [10, 20, 30],
|
||||||
|
"length": 64
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 2,
|
||||||
|
"op_type": "TFReader",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": {
|
||||||
|
"output_queue": {
|
||||||
|
"size": [10, 20, 30],
|
||||||
|
"length": 64
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 1,
|
||||||
|
"op_type": "Shuffle",
|
||||||
|
"num_workers": 1,
|
||||||
|
"metrics": {
|
||||||
|
"output_queue": {
|
||||||
|
"size": [10, 20, 30],
|
||||||
|
"length": 64
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": [2, 4]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op_id": 0,
|
||||||
|
"op_type": "Batch",
|
||||||
|
"num_workers": 4,
|
||||||
|
"metrics": null,
|
||||||
|
"children": [1]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
|
@ -0,0 +1,21 @@
|
|||||||
|
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
# ============================================================================
|
||||||
|
"""Unit test for profiler."""
|
||||||
|
import os
|
||||||
|
|
||||||
|
RAW_DATA_BASE = os.path.realpath(os.path.join(os.path.dirname(__file__), '../../data/profiler_data'))
|
||||||
|
RAW_DATA = os.path.realpath(os.path.join(RAW_DATA_BASE, 'JOB1'))
|
||||||
|
RAW_DATA_JOB2 = os.path.realpath(os.path.join(RAW_DATA_BASE, 'JOB2'))
|
||||||
|
PROFILER_DIR = os.path.realpath(os.path.join(RAW_DATA_BASE, 'profiler'))
|
@ -0,0 +1,14 @@
|
|||||||
|
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
# ============================================================================
|
@ -0,0 +1,74 @@
|
|||||||
|
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
# ============================================================================
|
||||||
|
"""Test the aicpu parser."""
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
from unittest import TestCase
|
||||||
|
|
||||||
|
from mindspore.profiler.parser.aicpu_data_parser import DataPreProcessParser
|
||||||
|
|
||||||
|
|
||||||
|
def get_result(file_path):
|
||||||
|
"""
|
||||||
|
Get result from the aicpu file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
file_path (str): The aicpu file path.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list[list], the parsed aicpu information.
|
||||||
|
"""
|
||||||
|
result = []
|
||||||
|
try:
|
||||||
|
file = open(file_path, 'r')
|
||||||
|
result.append(file.read())
|
||||||
|
return result
|
||||||
|
finally:
|
||||||
|
if file:
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
|
||||||
|
class TestAicpuParser(TestCase):
|
||||||
|
"""Test the class of Aicpu Parser."""
|
||||||
|
|
||||||
|
def setUp(self) -> None:
|
||||||
|
"""Initialization before test case execution."""
|
||||||
|
self.profiling_dir = os.path.realpath(os.path.join(os.path.dirname(__file__),
|
||||||
|
'../../../data/profiler_data/'
|
||||||
|
'JOB_AICPU/data'))
|
||||||
|
self.expect_dir = os.path.realpath(os.path.join(os.path.dirname(__file__),
|
||||||
|
'../../../data/profiler_data/'
|
||||||
|
'JOB_AICPU/expect'))
|
||||||
|
self.output_path = tempfile.mkdtemp(prefix='output_data_preprocess_aicpu_')
|
||||||
|
self.output_file = os.path.join(self.output_path, 'output_data_preprocess_aicpu_0.txt')
|
||||||
|
self.expect_file = os.path.join(self.expect_dir, 'output_data_preprocess_aicpu_0.txt')
|
||||||
|
|
||||||
|
def test_aicpu_parser(self):
|
||||||
|
"""Test the class of Aicpu Parser."""
|
||||||
|
data = DataPreProcessParser(self.profiling_dir, self.output_file)
|
||||||
|
data.execute()
|
||||||
|
expect_result = get_result(self.expect_file)
|
||||||
|
result = get_result(self.output_file)
|
||||||
|
shutil.rmtree(self.output_path)
|
||||||
|
assert expect_result == result
|
||||||
|
|
||||||
|
def test_aicpu_parser_file_not_exist(self):
|
||||||
|
"""Test the class of Aicpu Parser."""
|
||||||
|
profiling_dir = os.path.realpath(os.path.join(self.profiling_dir, 'data'))
|
||||||
|
data = DataPreProcessParser(profiling_dir, self.output_file)
|
||||||
|
data.execute()
|
||||||
|
shutil.rmtree(self.output_path)
|
@ -0,0 +1,128 @@
|
|||||||
|
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
# ============================================================================
|
||||||
|
"""Test the framework parser module."""
|
||||||
|
import csv
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import tempfile
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from mindspore.profiler.common.exceptions.exceptions import \
|
||||||
|
ProfilerFileNotFoundException
|
||||||
|
from mindspore.profiler.parser.framework_parser import FrameworkParser
|
||||||
|
from tests.ut.python.profiler import PROFILER_DIR, RAW_DATA_BASE
|
||||||
|
|
||||||
|
|
||||||
|
def get_framework_result(file_path):
|
||||||
|
"""
|
||||||
|
Get framework result from the framework file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
file_path (str): The framework file path.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list[list], the parsed framework information.
|
||||||
|
"""
|
||||||
|
result = []
|
||||||
|
with open(file_path, 'r') as file:
|
||||||
|
csv_reader = csv.reader(file)
|
||||||
|
for row in csv_reader:
|
||||||
|
result.append(row)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
class TestFrameworkParser:
|
||||||
|
"""Test the class of `FrameworkParser`."""
|
||||||
|
def setup_method(self):
|
||||||
|
"""Initialization before test case execution."""
|
||||||
|
with mock.patch.object(FrameworkParser, '_raw_data_dir', RAW_DATA_BASE):
|
||||||
|
self._output_path_1 = tempfile.mkdtemp(prefix='test_framework_parser_')
|
||||||
|
self._parser_1 = FrameworkParser('JOB1', '0', self._output_path_1)
|
||||||
|
self._output_path_2 = tempfile.mkdtemp(prefix='test_framework_parser_')
|
||||||
|
self._parser_2 = FrameworkParser('JOB2', '0', self._output_path_2)
|
||||||
|
self._output_path_4 = tempfile.mkdtemp(prefix='test_framework_parser_')
|
||||||
|
self._parser_4 = FrameworkParser('JOB4', '0', self._output_path_4)
|
||||||
|
|
||||||
|
def teardown_method(self) -> None:
|
||||||
|
"""Clear up after test case execution."""
|
||||||
|
shutil.rmtree(self._output_path_1)
|
||||||
|
shutil.rmtree(self._output_path_2)
|
||||||
|
shutil.rmtree(self._output_path_4)
|
||||||
|
|
||||||
|
def test_save_path(self):
|
||||||
|
"""Test the querying save path function."""
|
||||||
|
expect_result = os.path.join(self._output_path_1, 'framework_raw_0.csv')
|
||||||
|
assert expect_result == self._parser_1.save_path
|
||||||
|
|
||||||
|
expect_result = os.path.join(self._output_path_2, 'framework_raw_0.csv')
|
||||||
|
assert expect_result == self._parser_2.save_path
|
||||||
|
|
||||||
|
def test_point_info(self):
|
||||||
|
"""Test the querying point info function."""
|
||||||
|
expect_result = {
|
||||||
|
1: 'Default/Cast-op6',
|
||||||
|
2: 'Default/TransData-op7'
|
||||||
|
}
|
||||||
|
assert expect_result == self._parser_4.point_info
|
||||||
|
|
||||||
|
def test_to_task_id_full_op_name_dict(self):
|
||||||
|
"""Test the querying task id and full operator name dict function."""
|
||||||
|
expect_result = {
|
||||||
|
'51517': 'Default/Cast-op6',
|
||||||
|
'51518': 'Default/TransData-op7',
|
||||||
|
'51519': 'Default/network-WithLossCell/_backbone-ResNet/conv1-Conv2d/Cast-op5',
|
||||||
|
'51522': 'Default/network-WithLossCell/_backbone-ResNet/'
|
||||||
|
'layer1-SequentialCell/0-ResidualBlock/conv1-Conv2d/Cast-op28'
|
||||||
|
}
|
||||||
|
assert expect_result == self._parser_1.to_task_id_full_op_name_dict()
|
||||||
|
assert expect_result == self._parser_2.to_task_id_full_op_name_dict()
|
||||||
|
|
||||||
|
expect_result = {
|
||||||
|
'0_1': 'Default/Cast-op6',
|
||||||
|
'0_2': 'Default/TransData-op7',
|
||||||
|
'0_3': 'Default/network-WithLossCell/_backbone-ResNet/conv1-Conv2d/Cast-op5',
|
||||||
|
'0_4': 'Default/network-WithLossCell/_backbone-ResNet/layer1-SequentialCell/'
|
||||||
|
'0-ResidualBlock/conv1-Conv2d/Cast-op28'
|
||||||
|
}
|
||||||
|
assert expect_result == self._parser_4.to_task_id_full_op_name_dict()
|
||||||
|
|
||||||
|
def test_parse(self):
|
||||||
|
"""Test the parse function."""
|
||||||
|
expect_framework_file = os.path.join(PROFILER_DIR, 'framework_raw_0.csv')
|
||||||
|
expect_framework_file = os.path.realpath(expect_framework_file)
|
||||||
|
expect_result = get_framework_result(expect_framework_file)
|
||||||
|
|
||||||
|
self._parser_1.parse()
|
||||||
|
framework_file = os.path.join(self._output_path_1, 'framework_raw_0.csv')
|
||||||
|
result = get_framework_result(framework_file)
|
||||||
|
assert expect_result == result
|
||||||
|
|
||||||
|
self._parser_2.parse()
|
||||||
|
framework_file = os.path.join(self._output_path_2, 'framework_raw_0.csv')
|
||||||
|
result = get_framework_result(framework_file)
|
||||||
|
assert expect_result == result
|
||||||
|
|
||||||
|
@mock.patch('os.listdir')
|
||||||
|
@mock.patch('os.path.isdir')
|
||||||
|
def test_create_framework_parser_fail_1(self, *args):
|
||||||
|
"""Test the function of fail to create framework parser."""
|
||||||
|
args[0].return_value = True
|
||||||
|
args[1].return_value = []
|
||||||
|
with pytest.raises(ProfilerFileNotFoundException) as exc_info:
|
||||||
|
FrameworkParser('JOB1', '0')
|
||||||
|
assert exc_info.value.error_code == '50546084'
|
||||||
|
assert exc_info.value.message == 'The file <Framework> not found.'
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue