Files
vibe_data_ana/tests/__pycache__/test_integration.cpython-311-pytest-8.3.3.pyc

298 lines
44 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><><EFBFBD>i<EFBFBD>1<00><00>n<00>dZddlZddlmcmZddlZddlZ ddl
m Z ddl Z ddl Z ddlmZmZddlmZejd<06><00><00>Zejd<07><00><00>Zejd<08><00><00>Zejd <09><00><00>ZGd
<EFBFBD>d <0B><00>ZGd <0C>d <0A><00>ZGd<0E>d<0F><00>ZGd<10>d<11><00>ZGd<12>d<13><00>ZdS)u-集成测试 - 测试端到端分析流程。<E7A88B>N)<01>Path)<02> run_analysis<69>AnalysisOrchestrator)<01>DataAccessLayerc#<00>dK<00>tj<00><00>}|V<00>tj|d<01><02><00>dS)u创建临时输出目录。T)<01> ignore_errorsN)<04>tempfile<6C>mkdtemp<6D>shutil<69>rmtree)<01>temp_dirs <20>=D:\code\iov_data_analysis_agent_old\tests\test_integration.py<70>temp_output_dirr s:<00><00><00><00><18><1F>!<21>!<21>H<EFBFBD>
<12>N<EFBFBD>N<EFBFBD>N<EFBFBD>
<EFBFBD>M<EFBFBD>(<28>$<24>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>c<00><><00>tjtdd<02><00>dgdzdgdzzdgdzzd gdzd
gd zzd gdzztjd dd<0F><10><00>dgdzt tjddd<0F><10><00><00><00>zdgd zdgdzzdgdzzdgdzdgd zzdgdzzd<19><07><00>}|dz }|<01>|d<1B><1C><00>t |<02><00>S)u创建示例工单数据。<E68DAE><00>e<00>open<65>2<00>closed<65><00>pending<6E><00>high<67>medium<75>(<00>low<6F>
2024-01-01<30>d<00>D<><02>periods<64>freqNz
2024-02-01<30>bug<75>feature<72>support<72><00>0<00> )<07> ticket_id<69>status<75>priority<74>
created_at<EFBFBD> closed_at<61>category<72>duration_hoursz tickets.csvF<76><01>index)<07>pd<70> DataFrame<6D>range<67>
date_range<EFBFBD>list<73>to_csv<73>str<74><03>tmp_path<74>data<74> file_paths r<00>sample_ticket_datar>s<00><00> <0E><<3C><1A>1<EFBFBD>c<EFBFBD>]<5D>]<5D><19>(<28>R<EFBFBD>-<2D>8<EFBFBD>*<2A>r<EFBFBD>/<2F>1<>Y<EFBFBD>K<EFBFBD>"<22>4D<34>D<><1B>H<EFBFBD>r<EFBFBD>M<EFBFBD>X<EFBFBD>J<EFBFBD><12>O<EFBFBD>3<>u<EFBFBD>g<EFBFBD><02>l<EFBFBD>B<><18>m<EFBFBD>L<EFBFBD>#<23>C<EFBFBD>H<>H<>H<><1A>V<EFBFBD>b<EFBFBD>[<5B>4<EFBFBD><02> <0A>l<EFBFBD>B<EFBFBD>UX<55>(Y<>(Y<>(Y<>#Z<>#Z<>Z<><1A>G<EFBFBD>b<EFBFBD>L<EFBFBD>I<EFBFBD>;<3B><12>#3<>3<>y<EFBFBD>k<EFBFBD>B<EFBFBD>6F<36>F<><1D>$<24><12>)<29>r<EFBFBD>d<EFBFBD>R<EFBFBD>i<EFBFBD>/<2F>2<EFBFBD>$<24><12>)<29>;<3B><06><06> <07> <07>D<EFBFBD><19>=<3D>(<28>I<EFBFBD><08>K<EFBFBD>K<EFBFBD> <09><15>K<EFBFBD>'<27>'<27>'<27> <0E>y<EFBFBD>><3E>><3E>rc <00>0<00>tjtdd<02><00>dgdzdgdzzdgdzzgd<08>d zgd
<EFBFBD>d ztjd d d <0A><0E><00>dgdzdgdzzdgdzzd<12><06><00>}|dz }|<01>|d<14><15><00>t |<02><00>S)u创建示例销售数据。rr<00>Ar<00>Br<00>C)r<00><00><00><00>r)gY@gi@g<00>b@g<00>r@g@o@rrr r!<00>North<74>South<74>East)<06>order_id<69>product<63>quantity<74>price<63>date<74>regionz sales.csvFr1)r3r4r5r6r8r9r:s r<00>sample_sales_datarP(s<><00><00> <0E><<3C><19>!<21>S<EFBFBD>M<EFBFBD>M<EFBFBD><17>5<EFBFBD>2<EFBFBD>:<3A><13><05><02>
<EFBFBD>*<2A>c<EFBFBD>U<EFBFBD>R<EFBFBD>Z<EFBFBD>7<>#<23>O<EFBFBD>O<EFBFBD>b<EFBFBD>(<28>4<>4<>4<>r<EFBFBD>9<><12> <0A>l<EFBFBD>C<EFBFBD>c<EFBFBD>B<>B<>B<><1A>)<29>b<EFBFBD>.<2E>G<EFBFBD>9<EFBFBD>r<EFBFBD>><3E>1<>V<EFBFBD>H<EFBFBD>r<EFBFBD>M<EFBFBD>A<> <06><06> <07> <07>D<EFBFBD><19>;<3B>&<26>I<EFBFBD><08>K<EFBFBD>K<EFBFBD> <09><15>K<EFBFBD>'<27>'<27>'<27> <0E>y<EFBFBD>><3E>><3E>rc<00>\<00>d}|dz }|<02>|d<03><04><00>t|<02><00>S)u创建示例模板。u<E38082># 工单分析模板
## 1. 概述
- 总工单数
- 状态分布
## 2. 优先级分析
- 优先级分布
- 高优先级工单处理情况
## 3. 时间分析
- 创建趋势
- 处理时长分析
## 4. 分类分析
- 类别分布
- 各类别处理情况
z template.md<6D>utf-8<><01>encoding)<02>
write_textr9)r;<00>template_contentr=s r<00>sample_templaterW9s<<00><00><04><14>&<19>=<3D>(<28>I<EFBFBD> <0A><18><18>)<29>G<EFBFBD><18><<3C><<3C><<3C> <0E>y<EFBFBD>><3E>><3E>rc<00>*<00>eZdZdZd<02>Zd<03>Zd<04>Zd<05>ZdS)<07>TestEndToEndAnalysisu端到端分析流程测试。c<00><><00>t|d|<02><02><00>}|d}d}||u}|s<>tjd|fd||f<02><00>tj|<04><00>tj|<05><00>d<07>z}tjd|<03>d <09><00><00><00><02><00>d
zd |iz}t tj|<08><00><00><00><00>dx}x}}d }||v}|s<>tjd |fd||f<02><00>tj|<04><00>dtj <00><00>vstj
|<03><00>rtj|<03><00>ndd<10>z} dd| iz}
t tj|
<EFBFBD><00><00><00><00>dx}}|d}d}||k}|sltjd|fd||f<02><00>tj|<04><00>tj|<05><00>d<07>z}dd |iz}t tj|<08><00><00><00><00>dx}x}}|d}d}||k}|sltjd|fd||f<02><00>tj|<04><00>tj|<05><00>d<07>z}dd |iz}t tj|<08><00><00><00><00>dx}x}}|d}d}||k}|sltjd|fd||f<02><00>tj|<04><00>tj|<05><00>d<07>z}dd |iz}t tj|<08><00><00><00><00>dx}x}}t|d<00><00>} | j } | <0C><00>}|s<>ddtj <00><00>vstj
| <0B><00>rtj| <0B><00>ndtj| <0C><00>tj|<05><00>d<1C>z}t tj|<07><00><00><00><00>dx} }| j } | <0C><00>}|j} d}| |k}|s<>tjd|fd| |f<02><00>dtj <00><00>vstj
| <0B><00>rtj| <0B><00>ndtj| <0C><00>tj|<05><00>tj| <0A><00>tj|<0E><00>d<1E>z}dd |iz}t tj|<11><00><00><00><00>dx} x}x} x}}| <0B>d!<21>"<22><00>}t!|<12><00>}d} || k}|s<>tjd|fd#|| f<02><00>d$tj <00><00>vstj
t <00><00>rtjt <00><00>nd$d%tj <00><00>vstj
|<12><00>rtj|<12><00>nd%tj|<06><00>tj| <0A><00>d&<26>z}d'd(|iz}t tj|<14><00><00><00><00>dx}x}} g} d)}||v}|}|sd*}||v}|}|<04>sXtjd |fd+||f<02><00>tj|<06><00>d%tj <00><00>vstj
|<12><00>rtj|<12><00>nd%d,<2C>z}
d-d.|
iz}| <0C>|<17><00>|s<>tjd |fd/||f<02><00>tj|<15><00>d%tj <00><00>vstj
|<12><00>rtj|<12><00>nd%d0<64>z}d1d2|iz}| <0C>|<19><00>tj| d3<64><00>iz}d4d5|iz}t tj|<1B><00><00><00><00>dx}x} x}x}x}}dS)6u<36>
测试完全自主分析(无用户需求)。
验证:
- 能够加载数据
- 能够推断数据类型
- 能够生成分析计划
- 能够执行任务
- 能够生成报告
N<><03> data_file<6C>user_requirement<6E>
output_dir<EFBFBD>successT<73><01>is<69>z%(py1)s is %(py4)s<><02>py1<79>py4<79>分析失败: <20>error<6F>
>assert %(py6)s<>py6<79> data_type<70><01>in<69>z%(py1)s in %(py3)s<>result<6C>rd<00>py3<79>assert %(py5)s<>py5<79>objectives_countr<00><01>><3E>z%(py1)s > %(py4)s<>assert %(py6)s<> tasks_count<6E> results_count<6E> report_path<74>Aassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}<7D><03>py0<79>py2re)z_%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.stat
}()
}.st_size
} > %(py9)s)r}r~reri<00>py9zassert %(py11)s<>py11rRrS<00>z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)s<>len<65>report_content<6E>r}rdrpri<00>assert %(py8)s<>py8u 分析报告u报告<E68AA5>z%(py3)s in %(py5)s<>rprr<00>%(py7)s<>py7<79>z%(py10)s in %(py12)s<><02>py10<31>py12<31>%(py14)s<>py14r<00>assert %(py17)s<>py17)r<00>
@pytest_ar<61>_call_reprcompare<72> _saferepr<70>_format_assertmsg<73>get<65>AssertionError<6F>_format_explanation<6F> @py_builtins<6E>locals<6C>_should_repr_global_namer<00>exists<74>stat<61>st_size<7A> read_textr<74><00>append<6E>_format_boolop)<1C>selfr>rrn<00> @py_assert0<74> @py_assert3<74> @py_assert2<74> @py_format5<74> @py_format7<74> @py_format4<74> @py_format6rz<00> @py_assert1<74> @py_assert5<74> @py_assert8<74> @py_assert7<74> @py_format10<31> @py_format12r<32><00> @py_assert4<74> @py_format9<74> @py_assert9<74> @py_assert11<31> @py_format8<74> @py_format13<31> @py_format15<31> @py_format16<31> @py_format18s r<00>*test_complete_analysis_without_requirementz?TestEndToEndAnalysis.test_complete_analysis_without_requirementWs<><00><00><1E>(<28>!<21>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD><06> Q<01>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A><1B>6<EFBFBD>-<2D>0<>1<>1<> <0B>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>%<25>.<2E>.<2E><07>.<2E>@<40>@<40><0E>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>Mrc<00>T<00> <0B>t|d|<02><02><00>}|d}d}||u}|s<>tjd|fd||f<02><00>tj|<04><00>tj|<05><00>d<07>z}tjd|<03>d <09><00><00><00><02><00>d
zd |iz}t tj|<08><00><00><00><00>d x}x}}|d }d}||k}|sltjd|fd||f<02><00>tj|<04><00>tj|<05><00>d<07>z}dd |iz}t tj|<08><00><00><00><00>d x}x}}t|d<00><00>} | <09> d<13><14><00><00> <0B> fd<15>dD<00><00>}
t|
<EFBFBD><00>}|s<>ddtj <00><00>vstj t<00><00>rtjt<00><00>ndtj|
<EFBFBD><00>tj|<05><00>d<19>z}t tj|<07><00><00><00><00>d x}
}d S)u<>
测试指定需求的分析。
验证:
- 能够理解用户需求
- 生成的分析目标与需求相关
- 报告聚焦于用户需求
u'分析工单的健康度和处理效率r[r_Tr`rbrcrfrgrhriNrsrrtrvrwrzrRrSc3<00> <00>K<00>|]}|<01>vV<00><00> dS)N<>)<03>.0<EFBFBD>keywordr<64>s <20>r<00> <genexpr>zFTestEndToEndAnalysis.test_analysis_with_requirement.<locals>.<genexpr><3E>s+<00><><00><00><00>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[r)u健康u效率u处理z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}<7D>anyr|)rr<>r<>r<>r<>r<>r<>r<>rr<>r<>r<>r<>r<>) r<>r>rrnr<>r<>r<>r<>r<>rzr<>r<>s @r<00>test_analysis_with_requirementz3TestEndToEndAnalysis.test_analysis_with_requirementzs<><00><><00><1E>(<28>F<>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD><06> Q<01>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D><1B>6<EFBFBD>-<2D>0<>1<>1<> <0B>$<24>.<2E>.<2E><07>.<2E>@<40>@<40><0E> \<01>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[rc<00><><00>t|||<03><01><00>}|d}d}||u}|s<>tjd|fd||f<02><00>tj|<05><00>tj|<06><00>d<06>z}tjd|<04>d<08><00><00><00><02><00>d zd
|iz} t tj| <09><00><00><00><00>d x}x}}t|d <00><00>}
|
<EFBFBD> d <0A><0E><00>} g} d}|| v} | }| sd}|| v}|}|<05>sXtjd| fd|| f<02><00>tj|<07><00>dtj <00><00>vstj | <0B><00>rtj| <0B><00>ndd<14>z}dd|iz}| <0C> |<11><00>| s<>tjd|fd|| f<02><00>tj|<0E><00>dtj <00><00>vstj | <0B><00>rtj| <0B><00>ndd<18>z}dd|iz}| <0C> |<13><00>tj| d<1B><00>iz}dd|iz}t tj|<15><00><00><00><00>d x}x} x}x} x}}g} d}|| v} | }| sd}|| v}|}|<05>sXtjd| fd|| f<02><00>tj|<07><00>dtj <00><00>vstj | <0B><00>rtj| <0B><00>ndd<14>z}dd|iz}| <0C> |<11><00>| s<>tjd|fd|| f<02><00>tj|<0E><00>dtj <00><00>vstj | <0B><00>rtj| <0B><00>ndd<18>z}dd|iz}| <0C> |<13><00>tj| d<1B><00>iz}dd|iz}t tj|<15><00><00><00><00>d x}x} x}x} x}}d S) u<>
测试基于模板的分析。
验证:
- 能够解析模板
- 报告结构遵循模板
- 如果数据不满足模板要求,能够灵活调整
)r\<00> template_filer^r_Tr`rbrcrfrgrhriNrzrRrSu概述u 总工单数rkr<>r<>r<>r<>r<>r<>r<>r<>r<>rr<>r<>u 优先级u分类)rr<>r<>r<>r<>r<>r<>r<>rr<>r<>r<>r<>r<>r<>)r<>r>rWrrnr<>r<>r<>r<>r<>rzr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>s r<00>test_template_based_analysisz1TestEndToEndAnalysis.test_template_based_analysis<69>s<00><00><1E>(<28>)<29>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD><06> Q<01>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<><1B>6<EFBFBD>-<2D>0<>1<>1<> <0B>$<24>.<2E>.<2E><07>.<2E>@<40>@<40><0E> N<01>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>J<>Jrc<00><><00>t||<02><01><00>}|d}d}||u}|s<>tjd|fd||f<02><00>tj|<04><00>tj|<05><00>d<06>z}tjd|<03>d<08><00><00><00><02><00>d zd
|iz}t tj|<08><00><00><00><00>d x}x}}d }||v}|s<>tjd |fd||f<02><00>tj|<04><00>dtj <00><00>vstj
|<03><00>rtj|<03><00>ndd<10>z} dd| iz}
t tj|
<EFBFBD><00><00><00><00>d x}}|d}d}||k}|sltjd|fd||f<02><00>tj|<04><00>tj|<05><00>d<06>z}dd
|iz}t tj|<08><00><00><00><00>d x}x}}d S)u<>
测试不同类型的数据。
验证:
- 能够识别不同的数据类型
- 能够为不同数据类型生成合适的分析
<20>r\r^r_Tr`rbrcrfrgrhriNrjrkrmrnrorqrrrxrrtrvrw) rr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>) r<>rPrrnr<>r<>r<>r<>r<>r<>r<>s r<00>test_different_data_typesz.TestEndToEndAnalysis.test_different_data_types<65>sv<00><00><1E>'<27>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD><06> Q<01>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>P<>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(rN)<08>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r<5F>r<>r<>r<>r<>rrrYrYTs`<00><00><00><00><00><00>(<28>(<28>!N<01>!N<01>!N<01>F\<01>\<01>\<01>6K<01>K<01>K<01>6)<29>)<29>)<29>)<29>)rrYc<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>TestErrorRecoveryu错误恢复测试。c<00>R<00>td|<01><02><00>}|d}d}||u}|sltjd|fd||f<02><00>tj|<03><00>tj|<04><00>d<07>z}dd |iz}t tj|<07><00><00><00><00>d
x}x}}d }||v}|s<>tjd |fd ||f<02><00>tj|<03><00>dt j<00><00>vstj|<02><00>rtj|<02><00>ndd<0F>z}dd|iz} t tj| <09><00><00><00><00>d
x}}|d }
t|
<EFBFBD><00>}d} || k} | s<>tjd| fd|| f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>ndtj|
<EFBFBD><00>tj|<04><00>tj| <0B><00>d<16>z} dd| iz}t tj|<0E><00><00><00><00>d
x}
x}x} } d
S)u<>
测试无效文件路径的处理。
验证:
- 能够捕获文件不存在错误
- 返回有意义的错误信息
znonexistent_file.csvr<76>r_Fr`rbrcrwriNrgrkrmrnrorqrrrrt)z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)sr<73>)r}r~rer<>zassert %(py9)sr)
rr<>r<>r<>r<>r<>r<>r<>r<>r<>)r<>rrnr<>r<>r<>r<>r<>r<>r<>r<><00> @py_assert6r<36>r<>r<>s r<00>test_invalid_file_pathz(TestErrorRecovery.test_invalid_file_path<74>s<><00><00><1E>,<2C>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD><06> *<2A>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'rc<00><><00>|dz }|<03>dd<03><04><00>tt|<03><00>|<02><05><00>}|d}d}||u}|sltjd|fd ||f<02><00>tj|<05><00>tj|<06><00>d
<EFBFBD>z}d d |iz} t tj| <09><00><00><00><00>d x}x}}d}||v}|s<>tjd|fd||f<02><00>tj|<05><00>dtj <00><00>vstj
|<04><00>rtj|<04><00>ndd<12>z}
dd|
iz} t tj| <0B><00><00><00><00>d x}}d S)u<>
测试空文件的处理。
验证:
- 能够检测空文件
- 返回有意义的错误信息
z empty.csv<73>rRrSr<>r_Fr`rbrcrwriNrgrkrmrnrorqrr) rUrr9r<>r<>r<>r<>r<>r<>r<>r<>) r<>r;r<00>
empty_filernr<>r<>r<>r<>r<>r<>r<>s r<00>test_empty_filez!TestErrorRecovery.test_empty_file<6C>s<><00><00><1E> <0B>+<2B>
<EFBFBD><12><1D><1D>b<EFBFBD>7<EFBFBD><1D>3<>3<>3<><1E><19>*<2A>o<EFBFBD>o<EFBFBD>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD><06> *<2A>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> rc<00><00>|dz }|<03>dd<03><04><00>tt|<03><00>|<02><05><00>}d}||v}|s<>tjd|fd||f<02><00>tj|<05><00>d t j<00><00>vstj|<04><00>rtj|<04><00>nd d
<EFBFBD>z}d d |iz}ttj
|<08><00><00><00><00>d x}}d}||v}|s<>tjd|fd||f<02><00>tj|<05><00>d t j<00><00>vstj|<04><00>rtj|<04><00>nd d
<EFBFBD>z}d d |iz}ttj
|<08><00><00><00><00>d x}}d S)u<>
测试格式错误的 CSV 文件。
验证:
- 能够处理格式错误
- 尝试多种解析策略
z malformed.csvz%col1,col2
value1
value2,value3,value4rRrSr<>r_rkrmrnrorqrrN<> elapsed_time) rUrr9r<>r<>r<>r<>r<>r<>r<>r<>) r<>r;r<00>malformed_filernr<>r<>r<>r<>s r<00>test_malformed_csvz$TestErrorRecovery.test_malformed_csv<73>s<><00><00>"<22>O<EFBFBD>3<><0E><16>!<21>!<21>"K<>V]<5D>!<21>^<5E>^<5E>^<5E><1E><19>.<2E>)<29>)<29>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD><06> #<23>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'rN)r<>r<>r<>r<>r<>r<>r<>r<>rrr<>r<><00>sG<00><00><00><00><00><00><1F><1F>(<28>(<28>(<28>&!<21>!<21>!<21>,(<28>(<28>(<28>(<28>(rr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestOrchestratoru编排器测试。c<00><><00>t||<02><01><00>}|j}||k}|s<>tjd|fd||f<02><00>dt j<00><00>vstj|<03><00>rtj|<03><00>ndtj|<04><00>dt j<00><00>vstj|<01><00>rtj|<01><00>ndd<06>z}dd|iz}ttj |<07><00><00><00><00>d x}}|j
}|j }|<05><00>}|s<>d
dt j<00><00>vstj|<03><00>rtj|<03><00>ndtj|<04><00>tj|<05><00>tj|<08><00>d <0B>z}ttj |<07><00><00><00><00>d x}x}}|j
}|j }|<05><00>}|s<>d dt j<00><00>vstj|<03><00>rtj|<03><00>ndtj|<04><00>tj|<05><00>tj|<08><00>d <0B>z}ttj |<07><00><00><00><00>d x}x}}d S) u<>
测试编排器初始化。
验证:
- 能够正确初始化
- 输出目录被创建
r<><00><01>==)z1%(py2)s
{%(py2)s = %(py0)s.data_file
} == %(py4)s<> orchestratorr>r|rwriNzaassert %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.output_dir
}.exists
}()
})r}r~rerizaassert %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.output_dir
}.is_dir
}()
}) rr\r<>r<>r<>r<>r<>r<>r<>r<>r^r<><00>is_dir) r<>r>rr<>r<>r<>r<>r<>r<>s r<00> test_orchestrator_initializationz1TestOrchestrator.test_orchestrator_initialization
s<><00><00>,<2C>(<28>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD> <0C>
<<3C>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/rc<00><> <00>t||<02><01><00>}|<03><00><00>}|j}d}||u}|s<>tjd|fd||f<02><00>dt j<00><00>vstj|<03><00>rtj|<03><00>ndtj|<05><00>tj|<06><00>d<06>z}dd|iz} ttj
| <09><00><00><00><00>dx}x}}|j }d}||u}|s<>tjd|fd ||f<02><00>dt j<00><00>vstj|<03><00>rtj|<03><00>ndtj|<05><00>tj|<06><00>d<06>z}dd|iz} ttj
| <09><00><00><00><00>dx}x}}|j }d}||u}|s<>tjd|fd
||f<02><00>dt j<00><00>vstj|<03><00>rtj|<03><00>ndtj|<05><00>tj|<06><00>d<06>z}dd|iz} ttj
| <09><00><00><00><00>dx}x}}|j }
t|
<EFBFBD><00>}d } || k} | <0C>stjd | fd || f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>nddt j<00><00>vstj|<03><00>rtj|<03><00>ndtj|
<EFBFBD><00>tj|<06><00>tj| <0B><00>d<0F>z} dd| iz}ttj
|<0E><00><00><00><00>dx}
x}x} } |j}d}||u}|s<>tjd|fd||f<02><00>dt j<00><00>vstj|<03><00>rtj|<03><00>ndtj|<05><00>tj|<06><00>d<06>z}dd|iz} ttj
| <09><00><00><00><00>dx}x}}|d}d}||u}
|
sltjd|
fd||f<02><00>tj|<0F><00>tj|<07><00>d<17>z}dd|iz}ttj
|<11><00><00><00><00>dx}x}
}dS)u<>
测试编排器各阶段执行。
验证:
- 各阶段按顺序执行
- 每个阶段产生预期输出
r<>N)<01>is not)z8%(py2)s
{%(py2)s = %(py0)s.data_profile
} is not %(py5)sr<73><00>r}r~rr<00>assert %(py7)sr<73>)z<%(py2)s
{%(py2)s = %(py0)s.requirement_spec
} is not %(py5)s)z9%(py2)s
{%(py2)s = %(py0)s.analysis_plan
} is not %(py5)srrt)zU%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.analysis_results
})
} > %(py8)sr<73>)r}rdrprrr<>zassert %(py10)sr<73>)z2%(py2)s
{%(py2)s = %(py0)s.report
} is not %(py5)sr_Tr`rbrcrwri)rr<00> data_profiler<65>r<>r<>r<>r<>r<>r<>r<><00>requirement_spec<65> analysis_plan<61>analysis_resultsr<73><00>report)r<>r>rr<>rnr<>r<>r<>r<>r<>r<>r<>r<>r<><00> @py_format11r<31>r<>r<>s r<00>test_orchestrator_stagesz)TestOrchestrator.test_orchestrator_stagess<><00><00>,<2C>(<28>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD> <0C> <1E>*<2A>*<2A>,<2C>,<2C><06> 5<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E> )<29>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(rN)r<>r<>r<>r<>r<>r<>r<>rrr<>r<>s8<00><00><00><00><00><00><1C><1C>0<>0<>0<>")<29>)<29>)<29>)<29>)rr<>c<00><00>eZdZdZd<02>ZdS)<04>TestProgressTrackingu进度跟踪测试。c<00><><00><0F>g<00><0F>fd<01>}t|||<03><02><00>}t<00><0F><00>}d}||k}|s<>tjd|fd||f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>nddt j<00><00>vstj<00><0F><00>rtj<00><0F><00>ndtj|<05><00>tj|<06><00>d<08>z}d d
|iz} ttj | <09><00><00><00><00>d x}x}}tt<00><0F><00>d z
<00><00>D]<5D>}
<EFBFBD>|
d } <0B>|
d zd } | | k}|sltjd|fd| | f<02><00>tj| <0B><00>tj| <0C><00>d<10>z} dd| iz}ttj |<08><00><00><00><00>d x} x}} <0C><><EFBFBD>d}|d } |d} | | k}|sltjd|fd| | f<02><00>tj| <0B><00>tj| <0C><00>d<10>z} dd| iz}ttj |<08><00><00><00><00>d x} x}} d S)u<>
测试进度回调。
验证:
- 进度回调被正确调用
- 进度信息正确
c<00>:<00><01><00><03>|||d<01><03><00>dS)N)<03>stage<67>current<6E>total)r<>)r<>r<>r<><00>progress_callss <20>r<00>callbackz=TestProgressTracking.test_progress_callback.<locals>.callbackCs8<00><><00> <1A> !<21> !<21><1E>"<22><1E>#<0E>#<0E> <0F> <0F> <0F> <0F> r)r\r^<00>progress_callbackrrtr<>r<>r<>r<>r<>r<>Nrr<>)<01><=)z%(py1)s <= %(py4)srcrwri<00><><EFBFBD><EFBFBD><EFBFBD>r<EFBFBD>r<>)z%(py1)s == %(py4)s) rr<>r<>r<>r<>r<>r<>r<>r<>r<>r5)r<>r>rr<>rnr<>r<>r<>r<>r<><00>ir<69>r<>r<><00> last_callr<6C>s @r<00>test_progress_callbackz+TestProgressTracking.test_progress_callback9s$<00><><00><1C><0E> <0F> <0F> <0F> <0F> <0F><1E>(<28>&<26>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD><06> '<27>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26><17>s<EFBFBD>><3E>*<2A>*<2A>Q<EFBFBD>.<2E>/<2F>/<2F> T<01> T<01>A<EFBFBD> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<> S<>#<23>2<EFBFBD>&<26> <09>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9rN)r<>r<>r<>r<>r<>r<>rrr<>r<>6s)<00><00><00><00><00><00><1F><1F>!:<3A>!:<3A>!:<3A>!:<3A>!:rr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestOutputFilesu输出文件测试。c<00>j<00>t||<02><01><00>}|d}d}||u}|sltjd|fd||f<02><00>tj|<04><00>tj|<05><00>d<06>z}dd|iz}t tj|<08><00><00><00><00>d x}x}}t |d
<00><00>} | j}
|
<EFBFBD><00>}|s<>d d
tj <00><00>vstj
| <09><00>rtj| <09><00>nd
tj|
<EFBFBD><00>tj|<05><00>d <0C>z}t tj|<07><00><00><00><00>d x}
}| j }
d } |
| k}|s<>tjd|fd|
| f<02><00>d
tj <00><00>vstj
| <09><00>rtj| <09><00>nd
tj|
<EFBFBD><00>tj| <0B><00>d<10>z} dd| iz} t tj| <0A><00><00><00><00>d x}
x}} | <09> d<13><14><00>}t|<0E><00>}d}||k} | s<>tjd| fd||f<02><00>dtj <00><00>vstj
t<00><00>rtjt<00><00>nddtj <00><00>vstj
|<0E><00>rtj|<0E><00>ndtj|<06><00>tj|<0F><00>d<1A>z}dd|iz}t tj|<10><00><00><00><00>d x}x} }d S)u<>
测试报告文件创建。
验证:
- 报告文件被创建
- 报告文件格式正确
r<>r_Tr`rbrcrwriNrzr{r|z.mdr<64>)z.%(py2)s
{%(py2)s = %(py0)s.suffix
} == %(py5)sr<73>r<>r<>rRrSrrtr<>r<><00>contentr<74>r<>r<>)rr<>r<>r<>r<>r<>rr<>r<>r<>r<><00>suffixr<78>r<>)r<>r>rrnr<>r<>r<>r<>r<>rzr<>r<>r<>r<>r<>r<>r<>s r<00>test_report_file_creationz)TestOutputFiles.test_report_file_creation`s<><00><00><1E>(<28>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD><06>
)<29>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28><1B>6<EFBFBD>-<2D>0<>1<>1<> <0B>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A><1E>'<27>'<27><17>'<27>9<>9<><07><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F>rc<00><00>ddlm}ddl}t|<02><00>dz }||jt |<05><00><00><05><00>t ||<02><06><00>}|<05><00><00><00>r<>|<05>d<07><08><00>}t|<07><00>}d} || k}
|
s<EFBFBD>tj d |
fd
|| f<02><00>d tj <00><00>vstjt<00><00>rtjt<00><00>nd d tj <00><00>vstj|<07><00>rtj|<07><00>nd tj|<08><00>tj| <09><00>d <0A>z} dd| iz} t!tj| <0C><00><00><00><00>dx}x}
} g} d}||v}
|
}|
sd}||v}|}|<0E>sXtj d|
fd||f<02><00>tj|<08><00>d tj <00><00>vstj|<07><00>rtj|<07><00>nd d<14>z}dd|iz}| <0A>|<12><00>|
s<EFBFBD>tj d|fd||f<02><00>tj|<0F><00>d tj <00><00>vstj|<07><00>rtj|<07><00>nd d<18>z}dd|iz}| <0A>|<14><00>tj| d<1B><00>iz}dd|iz}t!tj|<16><00><00><00><00>dx}x} x}x}
x}}dSdS)u<>
测试日志文件创建。
验证:
- 日志文件被创建(如果配置)
- 日志内容正确
r)<01> setup_loggingNztest.log)<02>level<65>log_filer<65>rRrSrtr<>r<><00> log_contentr<74>r<>r<>u 数据理解<E79086>INFOrkr<>r<>r<>r<>r<>r<>r<>r<>rr<>r<>)<14>src.logging_configr<00>loggingrrr9rr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>)r<>r>rrr rrnrr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>s r<00>test_log_file_creationz&TestOutputFiles.test_log_file_creationxs<><00><00> 5<>4<>4<>4<>4<>4<><16><0E><0E><0E><17><0F>(<28>(<28>:<3A>5<><08><15> <0A><19>,<2C><18><18>]<5D>]<5D>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD> <1E>(<28>&<26>
<EFBFBD>
<EFBFBD>
<EFBFBD><06> <14>?<3F>?<3F> <1C> <1C> J<01>"<22>,<2C>,<2C>g<EFBFBD>,<2C>><3E>><3E>K<EFBFBD> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> I<> J<01> JrN)r<>r<>r<>r<>rr
r<>rrr<>r<>]s=<00><00><00><00><00><00><1F><1F> <20> <20> <20>0J<01>J<01>J<01>J<01>Jrr<>)r<><00>builtinsr<73><00>_pytest.assertion.rewrite<74> assertion<6F>rewriter<65><00>pytest<73>pandasr3<00>pathlibrr r <00>src.mainrr<00>src.data_accessr<00>fixturerr>rPrWrYr<>r<>r<>r<>r<>rr<00><module>rs<><00><01>3<>3<><00><00><00><00><00><00><00><00><00><00><00><00><00> <0A> <0A> <0A> <0A><13><13><13><13><18><18><18><18><18><18><0F><0F><0F><0F> <0A> <0A> <0A> <0A>7<>7<>7<>7<>7<>7<>7<>7<>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B><08><1E>0<>0<><10><1E>0<><08><1E><1A><1A><10><1E><1A>"<08><1E> <1A> <1A><10><1E> <1A> <08><1E><1A><1A><10><1E><1A>4m)<29>m)<29>m)<29>m)<29>m)<29>m)<29>m)<29>m)<29>`@(<28>@(<28>@(<28>@(<28>@(<28>@(<28>@(<28>@(<28>F,)<29>,)<29>,)<29>,)<29>,)<29>,)<29>,)<29>,)<29>^$:<3A>$:<3A>$:<3A>$:<3A>$:<3A>$:<3A>$:<3A>$:<3A>N7J<01>7J<01>7J<01>7J<01>7J<01>7J<01>7J<01>7J<01>7J<01>7Jr