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

250 lines
48 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><><EFBFBD>iQS<00><00><><00>dZddlZddlmcmZddlZddlZddl Z
ddl Z ddl Z ddlZddlmZddlmZmZddlmZddlmZddlmZGd<08>d <09><00>ZGd
<EFBFBD>d <0B><00>ZGd <0C>d <0A><00>ZGd<0E>d<0F><00>Zejd<10><00><00>ZGd<11>d<12><00>Z Gd<13>d<14><00>Z!Gd<15>d<16><00>Z"Gd<17>d<18><00>Z#ejd<19><00><00>Z$dS)u<>性能测试 - 验证系统性能指标。
测试内容:
1. 数据理解阶段性能(< 30秒
2. 完整分析流程性能(< 30分钟
3. 大数据集处理100万行
4. 内存使用
需求NFR-1.1, NFR-1.2
<EFBFBD>N)<01>Path)<02>Dict<63>Any)<01> run_analysis)<01>DataAccessLayer)<01>understand_datac<00>B<00>eZdZdZd<02>Zd<03>Zd<04>Zdededej fd<08>Z
d S)
<EFBFBD> TestDataUnderstandingPerformance<63>$测试数据理解阶段的性能。c<00><><00>|dz }|<00>dd<03><04><00>}|<03>|d<05><06><00>tj<00><00>}tjt |<02><00><00><00>}t |<05><00>}tj<00><00>|z
}d}||k} | s<>tjd| fd ||f<02><00>d
tj
<00><00>vstj |<07><00>rtj |<07><00>nd
tj |<08><00>d <0B>z}
tj d |d <0A>d<0E><03><00>dzd|
iz} ttj| <0B><00><00><00><00>dx} }|j} d} | | k} | s<>tjd| fd| | f<02><00>dtj
<00><00>vstj |<06><00>rtj |<06><00>ndtj | <09><00>tj | <0C><00>d<15>z} dd| iz}ttj|<0E><00><00><00><00>dx} x} } |j} d} | | k} | s<>tjd| fd| | f<02><00>dtj
<00><00>vstj |<06><00>rtj |<06><00>ndtj | <09><00>tj | <0C><00>d<15>z} dd| iz}ttj|<0E><00><00><00><00>dx} x} } dS)u+测试小数据集1000行的性能。zsmall_data.csv<73><76><00>
<00><02>rows<77>colsF<73><01>index<65><00><01><<3C>z%(py0)s < %(py3)s<>elapsed<65><02>py0<79>py3u小数据集理解耗时 <20>.2fu超过5秒限制<E99990>
>assert %(py5)s<>py5N<35><01>==<3D>z1%(py2)s
{%(py2)s = %(py0)s.row_count
} == %(py5)s<>profile<6C>r<00>py2r<00>assert %(py7)s<>py7<79>z4%(py2)s
{%(py2)s = %(py0)s.column_count
} == %(py5)s<><12>_generate_test_data<74>to_csv<73>timer<00>load_from_file<6C>strr<00>
@pytest_ar<61>_call_reprcompare<72> @py_builtins<6E>locals<6C>_should_repr_global_name<6D> _saferepr<70>_format_assertmsg<73>AssertionError<6F>_format_explanation<6F> row_count<6E> column_count<6E><0F>self<6C>tmp_path<74> data_file<6C>df<64>
start_time<EFBFBD>dalr"r<00> @py_assert2<74> @py_assert1<74> @py_format4<74> @py_format6<74> @py_assert4<74> @py_assert3<74> @py_format8s <20>=D:\code\iov_data_analysis_agent_old\tests\test_performance.py<70>test_small_dataset_performancez?TestDataUnderstandingPerformance.test_small_dataset_performances><00><00><1D>/<2F>/<2F> <09> <11> %<25> %<25>4<EFBFBD>b<EFBFBD> %<25> 9<> 9<><02>
<EFBFBD> <09> <09>)<29>5<EFBFBD> <09>)<29>)<29>)<29><1A>Y<EFBFBD>[<5B>[<5B>
<EFBFBD><1D>,<2C>S<EFBFBD><19>^<5E>^<5E><<3C><<3C><03>!<21>#<23>&<26>&<26><07><16>)<29>+<2B>+<2B>
<EFBFBD>*<2A><07> \<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>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>(<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>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>)<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>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>c<00><><00>|dz }|<00>dd<03><04><00>}|<03>|d<05><06><00>tj<00><00>}tjt |<02><00><00><00>}t |<05><00>}tj<00><00>|z
}d}||k} | s<>tjd| fd ||f<02><00>d
tj
<00><00>vstj |<07><00>rtj |<07><00>nd
tj |<08><00>d <0B>z}
tj d |d <0A>d<0E><03><00>dzd|
iz} ttj| <0B><00><00><00><00>dx} }|j} d} | | k} | s<>tjd| fd| | f<02><00>dtj
<00><00>vstj |<06><00>rtj |<06><00>ndtj | <09><00>tj | <0C><00>d<15>z} dd| iz}ttj|<0E><00><00><00><00>dx} x} } |j} d} | | k} | s<>tjd| fd| | f<02><00>dtj
<00><00>vstj |<06><00>rtj |<06><00>ndtj | <09><00>tj | <0C><00>d<15>z} dd| iz}ttj|<0E><00><00><00><00>dx} x} } dS)u/测试中等数据集10万行的性能。zmedium_data.csv順<00>rFr<00>rrrru中等数据集理解耗时 ru超过15秒限制rrNrr!r"r#r%r&r'r(r9s rG<00>test_medium_dataset_performancez@TestDataUnderstandingPerformance.test_medium_dataset_performance/s><00><00><1D>0<>0<> <09> <11> %<25> %<25>6<EFBFBD><02> %<25> ;<3B> ;<3B><02>
<EFBFBD> <09> <09>)<29>5<EFBFBD> <09>)<29>)<29>)<29><1A>Y<EFBFBD>[<5B>[<5B>
<EFBFBD><1D>,<2C>S<EFBFBD><19>^<5E>^<5E><<3C><<3C><03>!<21>#<23>&<26>&<26><07><16>)<29>+<2B>+<2B>
<EFBFBD>*<2A><07> a<01>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>*<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>)<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>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)rIc<00><><00>|dz }|<00>dd<03><04><00>}|<03>|d<05><06><00>tj<00><00>}tjt |<02><00><00><00>}t |<05><00>}tj<00><00>|z
}d}||k} | s<>tjd| fd||f<02><00>d tj
<00><00>vstj |<07><00>rtj |<07><00>nd tj |<08><00>d
<EFBFBD>z}
tj d |d <0C>d <0A><03><00>dzd|
iz} ttj| <0B><00><00><00><00>dx} }|j} d} | | k} | s<>tjd| fd| | f<02><00>dtj
<00><00>vstj |<06><00>rtj |<06><00>ndtj | <09><00>tj | <0C><00>d<14>z} dd| iz}ttj|<0E><00><00><00><00>dx} x} } |j} d} | | k} | s<>tjd| fd| | f<02><00>dtj
<00><00>vstj |<06><00>rtj |<06><00>ndtj | <09><00>tj | <0C><00>d<14>z} dd| iz}ttj|<0E><00><00><00><00>dx} x} } t%d|d <0C>d<19><03><00>dS)u<>测试大数据集100万行的性能。
需求NFR-1.1 - 数据理解阶段 < 30秒
需求NFR-1.2 - 支持最大100万行数据
zlarge_data.csvi@B<00>rFrrrrru大数据集理解耗时 ru超过30秒限制rrNrr!r"r#r%r&r'u-✓ 大数据集100万行理解耗时: <20>秒)r)r*r+rr,r-rr.r/r0r1r2r3r4r5r6r7r8<00>printr9s rG<00>test_large_dataset_performancez?TestDataUnderstandingPerformance.test_large_dataset_performanceAs[<00><00><1D>/<2F>/<2F> <09> <11> %<25> %<25>7<EFBFBD><12> %<25> <<3C> <<3C><02>
<EFBFBD> <09> <09>)<29>5<EFBFBD> <09>)<29>)<29>)<29><1A>Y<EFBFBD>[<5B>[<5B>
<EFBFBD><1D>,<2C>S<EFBFBD><19>^<5E>^<5E><<3C><<3C><03>!<21>#<23>&<26>&<26><07><16>)<29>+<2B>+<2B>
<EFBFBD>*<2A><07> ^<01>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>)<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>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29> <0A>N<>g<EFBFBD>N<>N<>N<>N<>O<>O<>O<>O<>OrIrr<00>returnc<00><><00>i}t|<02><00>D]<5D>}|dz}|dkr&tj<00>|<01><00>|d|<04><00><<00>3|dkr+gd<05>}tj<00>||<01><00>|d|<04><00><<00>d|dkr2t jd<08><00>}t j||d <09>
<EFBFBD><00>|d |<04><00><<00><>d <0C>t|<01><00>D<00><00>|d |<04><00><<00><>t j|<03><00>S)<0E>生成测试数据。<E68DAE>r<00>numeric_<63>)<05>A<>B<>C<>D<>E<> category_<79><00>
2020-01-01<30>H<><02>periods<64>freq<65>date_c<00><00>g|]}d|<01><00><02><02>S)<01>text_<74><00><02>.0<EFBFBD>js rG<00>
<listcomp>zHTestDataUnderstandingPerformance._generate_test_data.<locals>.<listcomp>js<00><00>$F<>$F<>$F<>Q<EFBFBD>[<5B>Q<EFBFBD>[<5B>[<5B>$F<>$F<>$FrIrh) <09>range<67>np<6E>random<6F>randn<64>choice<63>pd<70> Timestamp<6D>
date_range<EFBFBD> DataFrame)r:rr<00>data<74>i<>col_type<70>
categories<EFBFBD>
start_dates rGr)z4TestDataUnderstandingPerformance._generate_test_dataYs<00><00><11><04><17>t<EFBFBD><1B><1B> G<01> G<01>A<EFBFBD><18>1<EFBFBD>u<EFBFBD>H<EFBFBD><17>1<EFBFBD>}<7D>}<7D>')<29>y<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>'<<3C>'<<3C><04>^<5E><01>^<5E>^<5E>$<24>$<24><19>Q<EFBFBD><1D><1D>6<>6<>6<>
<EFBFBD>(*<2A> <09>(8<>(8<><1A>T<EFBFBD>(J<>(J<><04>_<EFBFBD><11>_<EFBFBD>_<EFBFBD>%<25>%<25><19>Q<EFBFBD><1D><1D><1F>\<5C>,<2C>7<>7<>
<EFBFBD>$&<26>M<EFBFBD>*<2A>d<EFBFBD>QT<51>$U<>$U<>$U<><04>[<5B>Q<EFBFBD>[<5B>[<5B>!<21>!<21>$F<>$F<>%<25><04>+<2B>+<2B>$F<>$F<>$F<><04>[<5B>Q<EFBFBD>[<5B>[<5B>!<21>!<21><11>|<7C>D<EFBFBD>!<21>!<21>!rIN) <0B>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__rHrNrS<00>intrsrvr)rirIrGr
r
su<00><00><00><00><00><00>.<2E>.<2E>*<2A>*<2A>*<2A>$*<2A>*<2A>*<2A>$P<01>P<01>P<01>0"<22><03>"<22>3<EFBFBD>"<22>2<EFBFBD><<3C>"<22>"<22>"<22>"<22>"<22>"rIr
c<00><><00>eZdZdZejjd<02><00><00>Zejjej<00>e j
d<03><00>dkd<05><06><00>d<07><00><00><00><00>Z de d e jfd
<EFBFBD>Zd S) <0C>TestFullAnalysisPerformanceu$测试完整分析流程的性能。c<00><><00>|dz }|<00>d<02><03><00>}|<03>|d<04><05><00>|dz }tj<00><00>}tt |<02><00>dt |<04><00><00><08><00>}tj<00><00>|z
}d }||k} | s<>t jd
| fd ||f<02><00>d tj<00><00>vst j |<07><00>rt j
|<07><00>nd t j
|<08><00>d <0A>z}
t j d|d<0F>d<10><03><00>dzd|
iz} tt j | <0B><00><00><00><00>dx} }|d} d} | | u}|slt jd|fd| | f<02><00>t j
| <0C><00>t j
| <0A><00>d<18>z}dd|iz}tt j |<0F><00><00><00><00>dx} x}} td|d<0F>d<1C><03><00>dS)u*测试小数据集的完整分析流程。z test_data.csvr <00>rFr<00>outputu分析工单数据<E695B0>r<<00>user_requirement<6E>
output_diri,rrrru小数据集完整分析耗时 ru超过5分钟限制rrN<>successT<73><01>is<69>z%(py1)s is %(py4)s<><02>py1<79>py4<79>assert %(py6)s<>py6u1✓ 小数据集1000行完整分析耗时: rQ<00><0F>_generate_ticket_datar*r+rr-r.r/r0r1r2r3r4r5r6rR<00>r:r;r<r=r<>r><00>resultrr@rArBrC<00> @py_assert0rE<00> @py_format5<74> @py_format7s rG<00> test_small_dataset_full_analysisz<TestFullAnalysisPerformance.test_small_dataset_full_analysisrsL<00><00><1D><EFBFBD>.<2E> <09> <11> '<27> '<27>T<EFBFBD> '<27> 2<> 2<><02>
<EFBFBD> <09> <09>)<29>5<EFBFBD> <09>)<29>)<29>)<29><1E><08>(<28>
<EFBFBD><1A>Y<EFBFBD>[<5B>[<5B>
<EFBFBD><1D><19>)<29>n<EFBFBD>n<EFBFBD>1<><1A>:<3A><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><06>
<17>)<29>+<2B>+<2B>
<EFBFBD>*<2A><07> g<01>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>f<>(<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> <0A>R<>'<27>R<>R<>R<>R<>S<>S<>S<>S<>SrI<00>SKIP_LONG_TESTS<54>1u跳过长时间运行的测试)<01>reasonc<00><><00>|dz }|<00>d<02><03><00>}|<03>|d<04><05><00>|dz }tj<00><00>}tt |<02><00>dt |<04><00><00><08><00>}tj<00><00>|z
}d }||k} | s<>t jd
| fd ||f<02><00>d tj<00><00>vst j |<07><00>rt j
|<07><00>nd t j
|<08><00>d <0A>z}
t j d|d<0F>d<10><03><00>dzd|
iz} tt j | <0B><00><00><00><00>dx} }|d} d} | | u}|slt jd|fd| | f<02><00>t j
| <0C><00>t j
| <0A><00>d<18>z}dd|iz}tt j |<0F><00><00><00><00>dx} x}} td|d<0F>d<1C><03><00>dS)uu测试大数据集的完整分析流程。
需求NFR-1.1 - 完整分析流程 < 30分钟
zlarge_test_data.csvrKr<>Frr<>u分析工单健康度r<E5BAA6>irrrru大数据集完整分析耗时 ru超过30分钟限制rrNr<4E>Tr<54>r<>r<>r<>r<>u2✓ 大数据集10万行完整分析耗时: rQr<>r<>s rG<00> test_large_dataset_full_analysisz<TestFullAnalysisPerformance.test_large_dataset_full_analysis<69>sM<00><00><1D>4<>4<> <09> <11> '<27> '<27>V<EFBFBD> '<27> 4<> 4<><02>
<EFBFBD> <09> <09>)<29>5<EFBFBD> <09>)<29>)<29>)<29><1E><08>(<28>
<EFBFBD><1A>Y<EFBFBD>[<5B>[<5B>
<EFBFBD><1D><19>)<29>n<EFBFBD>n<EFBFBD>4<><1A>:<3A><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><06>
<17>)<29>+<2B>+<2B>
<EFBFBD>*<2A><07> i<01>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>h<>(<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> <0A>S<>7<EFBFBD>S<>S<>S<>S<>T<>T<>T<>T<>TrIrrTc <00><<00>gd<01>}gd<02>}gd<03>}gd<04>}d<05>t|<01><00>D<00><00>tj<00>||<01><00>tj<00>||<01><00>tj<00>||<01><00>tj<00>||<01><00>t jd|d<07><08><00>t jd|d<07><08><00>t jd <09>
<EFBFBD><00>ztj<00>d d |<01><00>d <0A>}t j|<06><00>S)<0E>生成工单测试数据。)<04> 待处理<E5A484> 处理中<E79086> 已关闭u 已解决)u低u中u高u紧急)<04>故障<E69585>咨询<E592A8>投诉u建议)zModel AzModel BzModel CzModel Dc<00><00>g|]}d|d<01><04><02><02> S<00><02>T<>06dri<00>rkrxs rGrmzETestFullAnalysisPerformance._generate_ticket_data.<locals>.<listcomp><3E><00> <00><00>;<3B>;<3B>;<3B>!<21>+<2B>a<EFBFBD>+<2B>+<2B>+<2B>;<3B>;<3B>;rI<00>
2023-01-01<30>5minrc<00>)<01>hoursrY<00>d)<08> ticket_id<69>status<75>priority<74>type<70>model<65>
created_at<EFBFBD> closed_at<61>duration_hours) rnrorprrrsru<00> Timedelta<74>randintrv)r:r<00>statuses<65>
priorities<EFBFBD>types<65>modelsrws rGr<>z1TestFullAnalysisPerformance._generate_ticket_data<74>s <00><00>G<>G<>G<><08>4<>4<>4<>
<EFBFBD>8<>8<>8<><05>=<3D>=<3D>=<3D><06><<3C>;<3B>u<EFBFBD>T<EFBFBD>{<7B>{<7B>;<3B>;<3B>;<3B><18>i<EFBFBD>&<26>&<26>x<EFBFBD><14>6<>6<><1A> <09>(<28>(<28><1A>T<EFBFBD>:<3A>:<3A><16>I<EFBFBD>$<24>$<24>U<EFBFBD>D<EFBFBD>1<>1<><17>Y<EFBFBD>%<25>%<25>f<EFBFBD>d<EFBFBD>3<>3<><1C>-<2D> <0C>d<EFBFBD><16>P<>P<>P<><1B><1D>|<7C>T<EFBFBD><06>O<>O<>O<>RT<52>R^<5E>eg<65>Rh<52>Rh<52>Rh<52>h<> <20>i<EFBFBD>/<2F>/<2F><01>3<EFBFBD><04>=<3D>=<3D> 
<EFBFBD> 
<EFBFBD><04><12>|<7C>D<EFBFBD>!<21>!<21>!rIN)r|r}r~r<00>pytest<73>mark<72>slowr<77><00>skipif<69>os<6F>getenvr<76>r<>rsrvr<>rirIrGr<>r<>os<><00><00><00><00><00><00>.<2E>.<2E> <0B>[<5B><15>T<01>T<01><16><15>T<01>2 <0C>[<5B><15> <0B>[<5B><17><17><11><02> <09>#<23>$<24>$<24><03>+<2B>/<2F><18><06><06>U<01>U<01> <06><06><16><15>
U<01>8"<22>#<23>"<22>"<22>,<2C>"<22>"<22>"<22>"<22>"<22>"rIr<>c<00><<00>eZdZdZd<02>Zd<03>Zdededejfd<07>Z dS) <09>TestMemoryUsageu测试内存使用。c<00><00>|dz }|<00>dd<03><04><00>}|<03>|d<05><06><00>tj<00><00>}|<04><00><00>jdz dz }t jt|<02><00><00><00>}t|<06><00>}|<04><00><00>jdz dz }||z
} d}
| |
k} | s<>tj d | fd
| |
f<02><00>d tj <00><00>vstj| <09><00>rtj| <09><00>nd tj|
<EFBFBD><00>d <0C>z} tjd | d<0E>d<0F><03><00>dzd| iz} t#tj| <0A><00><00><00><00>dx} }
t'd| d<0E>d<14><03><00>dS)u$测试数据加载的内存使用。zmemory_test.csvrK<00>2rFr<00>i<>rr<00>memory_increaser<00> 内存增长 ruMB超过500MB限制rrNu✓ 数据加载内存增长: <20>MB)r)r*<00>psutil<69>Process<73> memory_info<66>rssrr,r-rr.r/r0r1r2r3r4r5r6rR)r:r;r<r=<00>process<73>initial_memoryr?r"<00> final_memoryr<79>r@rArBrCs rG<00>test_data_loading_memoryz(TestMemoryUsage.test_data_loading_memory<72>s<><00><00><1D>0<>0<> <09> <11> %<25> %<25>6<EFBFBD><02> %<25> ;<3B> ;<3B><02>
<EFBFBD> <09> <09>)<29>5<EFBFBD> <09>)<29>)<29>)<29><19>.<2E>"<22>"<22><07> <20>,<2C>,<2C>.<2E>.<2E>2<>T<EFBFBD>9<>D<EFBFBD>@<40><0E><1E>,<2C>S<EFBFBD><19>^<5E>^<5E><<3C><<3C><03>!<21>#<23>&<26>&<26><07><1F>*<2A>*<2A>,<2C>,<2C>0<>4<EFBFBD>7<>$<24>><3E> <0C>&<26><1E>7<><0F> b<01>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<>a<> <0A>F<><EFBFBD>F<>F<>F<>F<>G<>G<>G<>G<>GrIc<00><><00>|dz }|<00>dd<03><04><00>}|<03>|d<05><06><00>tj<00>|<02><00>dz dz }t d|d <09>d
<EFBFBD><03><00>t j<00><00>}|<05><00><00>j dz dz }tj t|<02><00><00><00>}t|<07><00>}|<05><00><00>j dz dz } | |z
}
d} |
| k} | s<>tjd | fd |
| f<02><00>d t!j<00><00>vstj|
<EFBFBD><00>rtj|
<EFBFBD><00>nd tj| <0B><00>d<0E>z} tjd|
d <09>d<10><03><00>dzd| iz}t+tj|<0E><00><00><00><00>dx} } t d|
d <09>d
<EFBFBD><03><00>dS)uo测试大数据集的内存使用。
需求NFR-1.2 - 支持最大100MB的CSV文件
zlarge_memory_test.csvi <20>r<>rFrr<>u测试文件大小: rr<>rrr<>rr<>uMB超过1GB限制rrNu✓ 大数据集内存增长: )r)r*r<><00>path<74>getsizerRr<>r<>r<>r<>rr,r-rr.r/r0r1r2r3r4r5r6)r:r;r<r=<00> file_sizer<65>r<>r?r"r<>r<>r@rArBrCs rG<00>test_large_dataset_memoryz)TestMemoryUsage.test_large_dataset_memory<72>s<00><00> <1D>6<>6<> <09> <11> %<25> %<25>6<EFBFBD><02> %<25> ;<3B> ;<3B><02>
<EFBFBD> <09> <09>)<29>5<EFBFBD> <09>)<29>)<29>)<29><17>G<EFBFBD>O<EFBFBD>O<EFBFBD>I<EFBFBD>.<2E>.<2E><14>5<><04><<3C> <09> <0A>6<>Y<EFBFBD>6<>6<>6<>6<>7<>7<>7<><19>.<2E>"<22>"<22><07> <20>,<2C>,<2C>.<2E>.<2E>2<>T<EFBFBD>9<>D<EFBFBD>@<40><0E><1E>,<2C>S<EFBFBD><19>^<5E>^<5E><<3C><<3C><03>!<21>#<23>&<26>&<26><07><1F>*<2A>*<2A>,<2C>,<2C>0<>4<EFBFBD>7<>$<24>><3E> <0C>&<26><1E>7<><0F> a<01>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60>`<60> <0A>F<><EFBFBD>F<>F<>F<>F<>G<>G<>G<>G<>GrIrrrTc<00><><00>i}t|<02><00>D]<5D>}|dz}|dkr&tj<00>|<01><00>|d|<04><00><<00>3|dkr)tj<00>gd<05>|<01><00>|d|<04><00><<00>b|dkrt jd|d<08> <09><00>|d|<04><00><<00><>d
<EFBFBD>t|<01><00>D<00><00>|d|<04><00><<00><>t j|<03><00>S) rVrWr<00>col_rY<00>rZr[r\r]r`rarbrcc<00><00>g|]
}d|dz<00><00><02><02> S)rhr rirjs rGrmz7TestMemoryUsage._generate_test_data.<locals>.<listcomp>
s%<00><00>#L<>#L<>#L<>1<EFBFBD>$6<>A<EFBFBD><04>H<EFBFBD>$6<>$6<>#L<>#L<>#LrI<00>rnrorprqrrrsrurv)r:rrrwrxrys rGr)z#TestMemoryUsage._generate_test_data<74>s<><00><00><11><04><16>t<EFBFBD><1B><1B>
M<01>
M<01>A<EFBFBD><18>1<EFBFBD>u<EFBFBD>H<EFBFBD><17>1<EFBFBD>}<7D>}<7D>#%<25>9<EFBFBD>?<3F>?<3F>4<EFBFBD>#8<>#8<><04>Z<EFBFBD>A<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20><19>Q<EFBFBD><1D><1D>#%<25>9<EFBFBD>#3<>#3<>4H<34>4H<34>4H<34>$<24>#O<>#O<><04>Z<EFBFBD>A<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20><19>Q<EFBFBD><1D><1D>#%<25>=<3D><1C>t<EFBFBD>RU<52>#V<>#V<>#V<><04>Z<EFBFBD>A<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20>#L<>#L<><05>d<EFBFBD> <0B> <0B>#L<>#L<>#L<><04>Z<EFBFBD>A<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20><11>|<7C>D<EFBFBD>!<21>!<21>!rIN)
r|r}r~rr<>r<>r<>rsrvr)rirIrGr<>r<><00>si<00><00><00><00><00><00><1F><1F>H<01>H<01>H<01>0H<01>H<01>H<01>>"<22><03>"<22>3<EFBFBD>"<22>2<EFBFBD><<3C>"<22>"<22>"<22>"<22>"<22>"rIr<>c<00>6<00>eZdZdZd<02>Zdededejfd<06>ZdS)<08>TestStagePerformanceu!测试各阶段的性能指标。c<00><><00>|dz }|<00>dd<03><04><00>}|<03>|d<05><06><00>tj<00><00>}tjt |<02><00><00><00>}t |<05><00>}tj<00><00>|z
}d}||k} | s<>tjd| fd ||f<02><00>d
tj
<00><00>vstj |<07><00>rtj |<07><00>nd
tj |<08><00>d <0B>z}
tj d |d <0A>d<0E><03><00>dzd|
iz} ttj| <0B><00><00><00><00>dx} }t!d|d <0A>d<13><03><00>dS)r zstage_test.csv<73>P<EFBFBD>rPrFrrLrrrru数据理解阶段耗时 ru超过20秒限制rrNu+✓ 数据理解阶段5万行耗时: rQ)r)r*r+rr,r-rr.r/r0r1r2r3r4r5r6rR) r:r;r<r=r>r?r"rr@rArBrCs rG<00>test_data_understanding_stagez2TestStagePerformance.test_data_understanding_stages<><00><00><1D>/<2F>/<2F> <09> <11> %<25> %<25>5<EFBFBD>r<EFBFBD> %<25> :<3A> :<3A><02>
<EFBFBD> <09> <09>)<29>5<EFBFBD> <09>)<29>)<29>)<29><1A>Y<EFBFBD>[<5B>[<5B>
<EFBFBD><1D>,<2C>S<EFBFBD><19>^<5E>^<5E><<3C><<3C><03>!<21>#<23>&<26>&<26><07><16>)<29>+<2B>+<2B>
<EFBFBD>*<2A><07> ^<01>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D>]<5D> <0A>L<>G<EFBFBD>L<>L<>L<>L<>M<>M<>M<>M<>MrIrrrTc<00>N<00>i}t|<02><00>D]<5D>}|dzdkr&tj<00>|<01><00>|d|<04><00><<00>1|dzdkr)tj<00>gd<05>|<01><00>|d|<04><00><<00>ct jd|d<07><08><00>|d|<04><00><<00><>t j|<03><00>S<00> rV<00>rr<>rY)rZr[r\ra<00>minrcr<><00>r:rrrwrxs rGr)z(TestStagePerformance._generate_test_data$<00><><00><00><11><04><16>t<EFBFBD><1B><1B> Y<01> Y<01>A<EFBFBD><10>1<EFBFBD>u<EFBFBD><01>z<EFBFBD>z<EFBFBD>#%<25>9<EFBFBD>?<3F>?<3F>4<EFBFBD>#8<>#8<><04>Z<EFBFBD>A<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20><12>Q<EFBFBD><15>!<21><1A><1A>#%<25>9<EFBFBD>#3<>#3<>O<EFBFBD>O<EFBFBD>O<EFBFBD>T<EFBFBD>#J<>#J<><04>Z<EFBFBD>A<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20>#%<25>=<3D><1C>t<EFBFBD>RW<52>#X<>#X<>#X<><04>Z<EFBFBD>A<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20><11>|<7C>D<EFBFBD>!<21>!<21>!rIN) r|r}r~rr<>r<>rsrvr)rirIrGr<>r<>sW<00><00><00><00><00><00>+<2B>+<2B>N<01>N<01>N<01>$ "<22><03> "<22>3<EFBFBD> "<22>2<EFBFBD><<3C> "<22> "<22> "<22> "<22> "<22> "rIr<>c#<00>K<00>|dz }|V<00>|<01><00><00>r_td<02><00>td<03><00>td<04><00>t|<01><00><00><00><00>td<04><00>dSdS)u生成性能测试报告。zperformance_report.txtz=
============================================================u性能测试报告z<============================================================N)<03>existsrR<00> read_text)r;<00> report_files rG<00>performance_reportr<74>3s<><00><00><00><00><1B>5<>5<>K<EFBFBD>
<15><15><15><15><13><19><19><1B><1B><16> <0A>m<EFBFBD><1C><1C><1C> <0A>"<22>#<23>#<23>#<23> <0A>f<EFBFBD> <0A> <0A> <0A> <0A>k<EFBFBD>#<23>#<23>%<25>%<25>&<26>&<26>&<26> <0A>f<EFBFBD> <0A> <0A> <0A> <0A> <0A> <16>rIc<00>B<00>eZdZdZd<02>Zd<03>Zd<04>Zdededej fd<08>Z
d S)
<EFBFBD>TestOptimizationEffectivenessu!测试性能优化的有效性。c<00><><00>|dz }|<00>dd<03><04><00>}|<03>|d<05><06><00>tjt |<02><00>d<05><07><00>}|j<00>d<08> <09><00><00><00><00>d
z d
z }tjt |<02><00>d<08><07><00>}|j<00>d<08> <09><00><00><00><00>d
z d
z }||z
}||z d z} td |d <0A>d|d <0A>d<0F><05><00>td|d <0A>d| d<12>d<13><05><00>d}
||
k} | s<>tj
d| fd||
f<02><00>dtj <00><00>vstj |<08><00>rtj|<08><00>ndtj|
<EFBFBD><00>d<18>z} tjd<19><00>dzd| iz} t!tj| <0A><00><00><00><00>dx} }
dS)u测试内存优化的效果。zoptimization_test.csvrKrPrFr)<01>optimize_memoryT)<01>deepr<70>r<>u✓ 内存优化效果: rzMB -> r<>u✓ 节省内存: zMB (z.1fz%)r)<01>>)z%(py0)s > %(py3)s<> memory_savedru$内存优化应该减少内存使用rrN)r)r*rr,r-<00>_data<74> memory_usage<67>sumrRr.r/r0r1r2r3r4r5r6)r:r;r<r=<00>
dal_no_opt<EFBFBD> memory_no_opt<70>dal_opt<70>
memory_optr<EFBFBD><00>savings_percentr@rArBrCs rG<00>test_memory_optimizationz6TestOptimizationEffectiveness.test_memory_optimizationGs&<00><00><1D>6<>6<> <09> <11> %<25> %<25>6<EFBFBD><02> %<25> ;<3B> ;<3B><02>
<EFBFBD> <09> <09>)<29>5<EFBFBD> <09>)<29>)<29>)<29>%<25>3<>C<EFBFBD> <09>N<EFBFBD>N<EFBFBD>TY<54>Z<>Z<>Z<>
<EFBFBD>"<22>(<28>5<>5<>4<EFBFBD>5<>@<40>@<40>D<>D<>F<>F<><14>M<>PT<50>T<> <0A>"<22>0<><13>Y<EFBFBD><1E><1E>QU<51>V<>V<>V<><07><1C>]<5D>/<2F>/<2F>T<EFBFBD>/<2F>:<3A>:<3A>><3E>><3E>@<40>@<40>4<EFBFBD>G<>$<24>N<>
<EFBFBD>%<25>z<EFBFBD>1<> <0C>'<27>-<2D>7<>3<EFBFBD>><3E><0F> <0A>T<><1D>T<>T<>T<>*<2A>T<>T<>T<>T<>U<>U<>U<> <0A>P<><<3C>P<>P<>P<><1F>P<>P<>P<>P<>Q<>Q<>Q<> H<01>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>GrIc<00><><00>ddlm}|dz }|t|<03><00><00><00>}d}ddi}|<04>||<06><00>|<04>|<05><00>}d}||u} | s<>t jd| fd ||f<02><00>d
tj<00><00>vst j |<07><00>rt j
|<07><00>nd
t j
|<08><00>d <0B>z}
d d |
iz} tt j | <0B><00><00><00><00>dx} }||k} | s<>t jd| fd||f<02><00>d
tj<00><00>vst j |<07><00>rt j
|<07><00>nd
dtj<00><00>vst j |<06><00>rt j
|<06><00>ndd<11>z} dd| iz} tt j | <0A><00><00><00><00>d} td<14><00>dS)u测试缓存的有效性。r)<01>LLMCache<68>cacheu 测试提示r<E7A4BA>u 测试响应N<E5BA94><01>is not<6F>z%(py0)s is not %(py3)s<>cached_responser<00>assert %(py5)srr)z%(py0)s == %(py2)s<>response)rr$zassert %(py4)sr<73>u✓ 缓存功能正常工作)<0E>src.performance_optimizationrr-<00>set<65>getr.r/r0r1r2r3r5r6rR)r:r;r<00> cache_dirr<00>promptrrr@rArBrC<00> @py_format3r<33>s rG<00>test_cache_effectivenessz6TestOptimizationEffectiveness.test_cache_effectiveness`s5<00><00>9<>9<>9<>9<>9<>9<><1C>w<EFBFBD>&<26> <09><18><08><13>Y<EFBFBD><1E><1E>(<28>(<28><05> <20><06><1C>n<EFBFBD>-<2D><08> <0E> <09> <09>&<26>(<28>#<23>#<23>#<23> <20>)<29>)<29>F<EFBFBD>+<2B>+<2B><0F>*<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>*<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> <0A>,<2C>-<2D>-<2D>-<2D>-<2D>-rIc<00>@<00>ddlm}|d<03><04><00>}ttd<05><00><00><00>}d<06>}t j<00><00>}|<02>||<04><00>}t j<00><00>|z
}t |<06><00>}d} || k}
|
s<EFBFBD>tjd|
fd|| f<02><00>d tj
<00><00>vstj t <00><00>rtj t <00><00>nd d
tj
<00><00>vstj |<06><00>rtj |<06><00>nd
tj |<08><00>tj | <09><00>d <0B>z} d d | iz} ttj| <0C><00><00><00><00>dx}x}
} |d} d}| |k}|sltjd|fd| |f<02><00>tj | <0A><00>tj |<0E><00>d<10>z}dd|iz} ttj| <0B><00><00><00><00>dx} x}}|d} d}| |k}|sltjd|fd| |f<02><00>tj | <0A><00>tj |<0E><00>d<10>z}dd|iz} ttj| <0B><00><00><00><00>dx} x}}td|d<15>d<16><03><00>dS)u测试批处理的效果。r)<01>BatchProcessorr)<01>
batch_sizer<EFBFBD>c<00> <00>|dzS)Nr`ri)<01>items rG<00> process_itemzITestOptimizationEffectiveness.test_batch_processing.<locals>.process_item<65>s <00><00><17>!<21>8<EFBFBD>OrIr)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)s<>len<65>results)rr<>rr<>zassert %(py8)s<>py8N<38>z%(py1)s == %(py4)sr<73>r<>r<>r<>u!✓ 批处理100个项目耗时: <20>.3frQ)r r<00>listrnr+<00> process_batchrr.r/r0r1r2r3r5r6rR)r:r<00> processor<6F>itemsrr>rrr@<00> @py_assert5rDr<><00> @py_format9r<39>rEr<>s rG<00>test_batch_processingz3TestOptimizationEffectiveness.test_batch_processingvs&<00><00>?<3F>?<3F>?<3F>?<3F>?<3F>?<3F>"<22>N<EFBFBD>b<EFBFBD>1<>1<>1<> <09><15>U<EFBFBD>3<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20><05> <1C> <1C> <1C><1A>Y<EFBFBD>[<5B>[<5B>
<EFBFBD><1B>)<29>)<29>%<25><1C>><3E>><3E><07><16>)<29>+<2B>+<2B>
<EFBFBD>*<2A><07> #<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>"<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><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21> <0A>B<>'<27>B<>B<>B<>B<>C<>C<>C<>C<>CrIrrrTc<00>V<00>i}t|<02><00>D]<5D>}|dzdkr(tj<00>dd|<01><00>|d|<04><00><<00>3|dzdkr)tj<00>gd<06>|<01><00>|d|<04><00><<00>ed<07>t|<01><00>D<00><00>|d|<04><00><<00><>t j|<03><00>S)rVr<>rr<>r<>rYr<>c<00><00>g|]
}d|dz<00><00><02><02> S)rhr<>rirjs rGrmzETestOptimizationEffectiveness._generate_test_data.<locals>.<listcomp><3E>s%<00><00>#K<>#K<>#K<>!<21>$5<>A<EFBFBD><03>G<EFBFBD>$5<>$5<>#K<>#K<>#KrI)rnrorpr<>rrrsrvr<>s rGr)z1TestOptimizationEffectiveness._generate_test_data<74>s<><00><00><11><04><16>t<EFBFBD><1B><1B> L<01> L<01>A<EFBFBD><10>1<EFBFBD>u<EFBFBD><01>z<EFBFBD>z<EFBFBD>#%<25>9<EFBFBD>#4<>#4<>Q<EFBFBD><03>T<EFBFBD>#B<>#B<><04>Z<EFBFBD>A<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20><12>Q<EFBFBD><15>!<21><1A><1A>#%<25>9<EFBFBD>#3<>#3<>4H<34>4H<34>4H<34>$<24>#O<>#O<><04>Z<EFBFBD>A<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20>#K<>#K<>u<EFBFBD>T<EFBFBD>{<7B>{<7B>#K<>#K<>#K<><04>Z<EFBFBD>A<EFBFBD>Z<EFBFBD>Z<EFBFBD> <20> <20><11>|<7C>D<EFBFBD>!<21>!<21>!rIN) r|r}r~rr<>rr!r<>rsrvr)rirIrGr<>r<>Dsx<00><00><00><00><00><00>+<2B>+<2B>H<01>H<01>H<01>2.<2E>.<2E>.<2E>,D<01>D<01>D<01>2 "<22><03> "<22>3<EFBFBD> "<22>2<EFBFBD><<3C> "<22> "<22> "<22> "<22> "<22> "rIr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestPerformanceMonitoringu测试性能监控功能。c <00>V<00>ddlm}|<01><00>}|<02>dd<04><00>|<02>dd<05><00>|<02>dd<06><00>|<02>d<03><00>}|d}d}||k}|slt jd |fd
||f<02><00>t j|<04><00>t j|<05><00>d <0B>z}d d |iz}tt j|<08><00><00><00><00>dx}x}}|d}tj
} d}
d} | |
| <0B><12><00>} || k}|s<>t jd |fd|| f<02><00>t j|<04><00>dtj <00><00>vst j t<00><00>rt jt<00><00>ndt j| <09><00>t j|
<EFBFBD><00>t j| <0B><00>t j| <0C><00>d<15>z} dd| iz}tt j|<0E><00><00><00><00>dx}x}x} x}
x} } |d}d}||k}|slt jd |fd
||f<02><00>t j|<04><00>t j|<05><00>d <0B>z}d d |iz}tt j|<08><00><00><00><00>dx}x}}|d}d}||k}|slt jd |fd
||f<02><00>t j|<04><00>t j|<05><00>d <0B>z}d d |iz}tt j|<08><00><00><00><00>dx}x}}td<1A><00>dS)u测试性能监控器。r)<01>PerformanceMonitor<6F> test_metricg<00>?g@g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>countr<74>rrr<>r<>r<>N<>meang<12><>ʡE<CAA1>?g{<14>G<EFBFBD>z<EFBFBD>?)<01>rel)z[%(py1)s == %(py11)s
{%(py11)s = %(py5)s
{%(py5)s = %(py3)s.approx
}(%(py7)s, rel=%(py9)s)
}r<>)r<>rrr&<00>py9<79>py11zassert %(py13)s<>py13r<33><00>maxu✓ 性能监控器正常工作)r r'<00>record<72> get_statsr.r/r3r5r6r<><00>approxr0r1r2rR)r:r'<00>monitor<6F>statsr<73>rEr@r<>r<>rD<00> @py_assert6<74> @py_assert8<74> @py_assert10<31> @py_format12<31> @py_format14s rG<00>test_performance_monitorz2TestPerformanceMonitoring.test_performance_monitor<6F>s<><00><00>C<>C<>C<>C<>C<>C<>$<24>$<24>&<26>&<26><07> <10><0E><0E>}<7D>c<EFBFBD>*<2A>*<2A>*<2A><0F><0E><0E>}<7D>c<EFBFBD>*<2A>*<2A>*<2A><0F><0E><0E>}<7D>c<EFBFBD>*<2A>*<2A>*<2A><18>!<21>!<21>-<2D>0<>0<><05>"<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>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>"<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>"<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> <0A>/<2F>0<>0<>0<>0<>0rIc<00> <00>ddlm}m}|<02><00>}|d|<03><04><00>d<05><00><00>}|<04><00>}d}||k}|s<>tjd|fd||f<02><00>d t j<00><00>vstj|<05><00>rtj|<05><00>nd tj|<06><00>d
<EFBFBD>z}d d |iz} ttj
| <09><00><00><00><00>d x}}|<03> d<03><00>}
|
d} d} | | k}|sltjd|fd| | f<02><00>tj| <0B><00>tj| <0C><00>d<11>z} dd| iz}ttj
|<0E><00><00><00><00>d x} x}} |
d} d} | | k}|sltjd|fd| | f<02><00>tj| <0B><00>tj| <0C><00>d<11>z} dd| iz}ttj
|<0E><00><00><00><00>d x} x}} td<18><00>d S)u测试计时装饰器。r)<02>timedr'<00> test_function)<02> metric_namer3c<00>.<00>tjd<01><00>dS)N皙<4E><E79A99><EFBFBD><EFBFBD><EFBFBD>?<3F>done)r+<00>sleeprirIrG<00> slow_functionzETestPerformanceMonitoring.test_timed_decorator.<locals>.slow_function<6F>s<00><00> <10>J<EFBFBD>s<EFBFBD>O<EFBFBD>O<EFBFBD>O<EFBFBD><19>6rIrAr)z%(py0)s == %(py3)sr<73>rrrNr)rYrr<>r<>r<>r*r@)<01>>=)z%(py1)s >= %(py4)su✓ 计时装饰器正常工作) r r<r'r.r/r0r1r2r3r5r6r1rR)r:r<r'r3rCr<>r@rArBrCr4r<>rEr<>r<>s rG<00>test_timed_decoratorz.TestPerformanceMonitoring.test_timed_decorator<6F>s<><00><00>J<>J<>J<>J<>J<>J<>J<>J<>$<24>$<24>&<26>&<26><07> <0E><15>?<3F>G<EFBFBD> <<3C> <<3C> <<3C> <1A> <1A>
=<3D> <<3C> <1A>
<1F><1D><1F><1F><06><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><18>!<21>!<21>/<2F>2<>2<><05>"<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>#<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> <0A>/<2F>0<>0<>0<>0<>0rIN)r|r}r~rr:rErirIrGr%r%<00>s8<00><00><00><00><00><00>%<25>%<25>1<>1<>1<>*1<>1<>1<>1<>1rIr%c<00>2<00>eZdZdZd<02>Zdedejfd<05>ZdS)<07>TestEndToEndPerformanceu端到端性能测试。c<00><00>ddlm}|dz }|<00>d<04><05><00>}|<04>|d<06><07><00>|<02><00>}|<05><00><00>t jt|<03><00><00><00>}t|<06><00>}|<05> <00><00>}td<08><00>|<08> <00><00>D]$\} }
|
rtd | <09>d
|
d d <0C>d <0A><05><00><00>%d} || u} | s<>tj d| fd|| f<02><00>dtj<00><00>vstj|<07><00>rtj|<07><00>ndtj| <0B><00>d<12>z} dd| iz}t%tj|<0E><00><00><00><00>dx} } dS)u测试性能报告生成。r)<01>get_global_monitorz e2e_test.csvi<76>r<>Fru
性能统计:z z: r*rrQNrrr"rrr)r rIr<>r*<00>clearrr,r-r<00> get_all_statsrRrr.r/r0r1r2r3r5r6)r:r;rIr<r=r3r?r"r4r><00> metric_statsr@rArBrCs rG<00>"test_performance_report_generationz:TestEndToEndPerformance.test_performance_report_generation<6F>s<><00><00>C<>C<>C<>C<>C<>C<><1D>~<7E>-<2D> <09> <11> '<27> '<27>T<EFBFBD> '<27> 2<> 2<><02>
<EFBFBD> <09> <09>)<29>5<EFBFBD> <09>)<29>)<29>)<29>%<25>$<24>&<26>&<26><07><0F> <0A> <0A><0F><0F><0F><1E>,<2C>S<EFBFBD><19>^<5E>^<5E><<3C><<3C><03>!<21>#<23>&<26>&<26><07><18>%<25>%<25>'<27>'<27><05> <0A><1F> <20> <20> <20>).<2E><1B><1B><1D><1D> I<01> I<01> %<25>K<EFBFBD><1C><1B> I<01><15>G<>;<3B>G<>G<>,<2C>v<EFBFBD>*><3E>G<>G<>G<>G<>H<>H<>H<><48>"<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>"<22>"<22>"rIrrTc <00>X<00>gd<01>}gd<02>}d<03>t|<01><00>D<00><00>tj<00>||<01><00>tj<00>||<01><00>t jd|d<05><06><00>tj<00>dd|<01><00>d <09>}t j|<04><00>S)
r<EFBFBD>)r<>r<>r<>)r<>r<>r<>c<00><00>g|]}d|d<01><04><02><02> Sr<>rir<>s rGrmzATestEndToEndPerformance._generate_ticket_data.<locals>.<listcomp><3E>r<>rIr<>r<>rcrYr<>)r<>r<>r<>r<><00>duration)rnrorprrrsrur<>rv)r:rr<>r<>rws rGr<>z-TestEndToEndPerformance._generate_ticket_data<74>s<><00><00>:<3A>:<3A>:<3A><08>.<2E>.<2E>.<2E><05><<3C>;<3B>u<EFBFBD>T<EFBFBD>{<7B>{<7B>;<3B>;<3B>;<3B><18>i<EFBFBD>&<26>&<26>x<EFBFBD><14>6<>6<><16>I<EFBFBD>$<24>$<24>U<EFBFBD>D<EFBFBD>1<>1<><1C>-<2D> <0C>d<EFBFBD><16>P<>P<>P<><1A> <09>)<29>)<29>!<21>S<EFBFBD>$<24>7<>7<> 
<EFBFBD>
<EFBFBD><04><12>|<7C>D<EFBFBD>!<21>!<21>!rIN) r|r}r~rrMr<>rsrvr<>rirIrGrGrG<00>sM<00><00><00><00><00><00>"<22>"<22>#<23>#<23>#<23>6 "<22>#<23> "<22>"<22>,<2C> "<22> "<22> "<22> "<22> "<22> "rIrGc<00><<00>eZdZdZd<02>Zd<03>Zdededejfd<07>Z dS) <09>TestPerformanceBenchmarksu性能基准测试。c <00>(<00>gd<01>}g}|D]<5D>}|d|<05>d<03>z }|<00>|d<04><05><00>}|<07>|d<06><07><00>tj<00><00>}tjt |<06><00><00><00>} tj<00><00>|z
}
|<04>||
||
z d<08><03><00><00><>td <09><00>td
d <0B>d d d<0E>d dd<10><04><05><00>td<11><00>|D].} t| dd <0B>d | dd<14>d | dd<16><04><05><00><00>/dS)u数据加载性能基准。)r <00>'rK<00>
benchmark_<EFBFBD>.csvrLrFr<00><03>sizer+<00>rows_per_secondu
数据加载性能基准:<3A>行数<E8A18C><10<31> <20> 耗时(秒)<29><12<31>行/秒<><15<31>(----------------------------------------rXr+<00><12.3frY<00><15.0fN)r)r*r+rr,r-<00>appendrR) r:r;<00>benchmark_report<72>sizesrrXr<r=r>r?r<00>rs rG<00>test_data_loading_benchmarkz5TestPerformanceBenchmarks.test_data_loading_benchmark<72>sl<00><00>%<25>%<25>%<25><05><14><07><19> <0F> <0F>D<EFBFBD> <20>#:<3A><04>#:<3A>#:<3A>#:<3A>:<3A>I<EFBFBD><15>)<29>)<29>t<EFBFBD>"<22>)<29>=<3D>=<3D>B<EFBFBD> <0E>I<EFBFBD>I<EFBFBD>i<EFBFBD>u<EFBFBD>I<EFBFBD> -<2D> -<2D> -<2D><1D><19><1B><1B>J<EFBFBD>!<21>0<><13>Y<EFBFBD><1E><1E>@<40>@<40>C<EFBFBD><1A>i<EFBFBD>k<EFBFBD>k<EFBFBD>J<EFBFBD>.<2E>G<EFBFBD> <13>N<EFBFBD>N<EFBFBD><1C><1F>#'<27>'<27>><3E><0E><0E> <0F> <0F> <0F> <0F> <0E>+<2B>,<2C>,<2C>,<2C> <0A><18>C<>C<>C<> <0A>C<>C<>C<>I<EFBFBD>C<>C<>C<>D<>D<>D<> <0A>h<EFBFBD><0F><0F><0F><18> W<01> W<01>A<EFBFBD> <11>Q<EFBFBD>v<EFBFBD>Y<EFBFBD>U<>U<>U<>Q<EFBFBD>v<EFBFBD>Y<EFBFBD>U<>U<>U<><01>:K<>8L<38>U<>U<>U<> V<> V<> V<> V<> W<01> WrIc <00>F<00>gd<01>}g}|D]<5D>}|d|<04>d<03>z }|<00>|d<04><05><00>}|<06>|d<06><07><00>tjt |<05><00><00><00>}t j<00><00>}t |<07><00>} t j<00><00>|z
}
|<03>||
||
z d<08><03><00><00><>td <09><00>td
d <0B>d d d<0E>d dd<10><04><05><00>td<11><00>|D].} t| dd <0B>d | dd<14>d | dd<16><04><05><00><00>/dS)u数据理解性能基准。)r rTr<><00>understanding_rVrLrFrrWu
数据理解性能基准:rZr[r\r]r^r_r`rarXr+rbrYrcN) r)r*rr,r-r+rrdrR) r:r;rfrrXr<r=r?r>r"rrgs rG<00>!test_data_understanding_benchmarkz;TestPerformanceBenchmarks.test_data_understanding_benchmarksy<00><00>$<24>$<24>$<24><05><14><07><19> <0F> <0F>D<EFBFBD> <20>#><3E>D<EFBFBD>#><3E>#><3E>#><3E>><3E>I<EFBFBD><15>)<29>)<29>t<EFBFBD>"<22>)<29>=<3D>=<3D>B<EFBFBD> <0E>I<EFBFBD>I<EFBFBD>i<EFBFBD>u<EFBFBD>I<EFBFBD> -<2D> -<2D> -<2D>!<21>0<><13>Y<EFBFBD><1E><1E>@<40>@<40>C<EFBFBD><1D><19><1B><1B>J<EFBFBD>%<25>c<EFBFBD>*<2A>*<2A>G<EFBFBD><1A>i<EFBFBD>k<EFBFBD>k<EFBFBD>J<EFBFBD>.<2E>G<EFBFBD> <13>N<EFBFBD>N<EFBFBD><1C><1F>#'<27>'<27>><3E><0E><0E> <0F> <0F> <0F> <0F> <0E>+<2B>,<2C>,<2C>,<2C> <0A><18>C<>C<>C<> <0A>C<>C<>C<>I<EFBFBD>C<>C<>C<>D<>D<>D<> <0A>h<EFBFBD><0F><0F><0F><18> W<01> W<01>A<EFBFBD> <11>Q<EFBFBD>v<EFBFBD>Y<EFBFBD>U<>U<>U<>Q<EFBFBD>v<EFBFBD>Y<EFBFBD>U<>U<>U<><01>:K<>8L<38>U<>U<>U<> V<> V<> V<> V<> W<01> WrIrrrTc<00>N<00>i}t|<02><00>D]<5D>}|dzdkr&tj<00>|<01><00>|d|<04><00><<00>1|dzdkr)tj<00>gd<05>|<01><00>|d|<04><00><<00>ct jd|d<07><08><00>|d|<04><00><<00><>t j|<03><00>Sr<>r<>r<>s rGr)z-TestPerformanceBenchmarks._generate_test_data7r<>rIN)
r|r}r~rrhrkr<>rsrvr)rirIrGrRrR<00>si<00><00><00><00><00><00><1F><1F>W<01>W<01>W<01>6W<01>W<01>W<01>: "<22><03> "<22>3<EFBFBD> "<22>2<EFBFBD><<3C> "<22> "<22> "<22> "<22> "<22> "rIrRc#<00>K<00>dV<00>dS)u基准测试报告fixture。NririrIrGrereFs<00><00><00><00>
<EFBFBD>E<EFBFBD>E<EFBFBD>E<EFBFBD>E<EFBFBD>ErI)%r<00>builtinsr0<00>_pytest.assertion.rewrite<74> assertion<6F>rewriter.r<>r+<00>pandasrs<00>numpyror<>r<><00>pathlibr<00>typingrr<00>src.mainr<00>src.data_accessr<00>src.engines.data_understandingrr
r<>r<>r<><00>fixturer<65>r<>r%rGrRrerirIrG<00><module>rzs{<00><01> <04> <04><01><00><00><00><00><00><00><00><00><00><00><00><00> <0A> <0A> <0A> <0A> <0B> <0B> <0B> <0B><13><13><13><13><12><12><12><12> <0A> <0A> <0A> <0A> <09> <09> <09> <09><18><18><18><18><18><18><1C><1C><1C><1C><1C><1C><1C><1C>!<21>!<21>!<21>!<21>!<21>!<21>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>R"<22>R"<22>R"<22>R"<22>R"<22>R"<22>R"<22>R"<22>jP"<22>P"<22>P"<22>P"<22>P"<22>P"<22>P"<22>P"<22>fJ"<22>J"<22>J"<22>J"<22>J"<22>J"<22>J"<22>J"<22>Z!"<22>!"<22>!"<22>!"<22>!"<22>!"<22>!"<22>!"<22>H<08><1E> <16> <16><10><1E> <16> W"<22>W"<22>W"<22>W"<22>W"<22>W"<22>W"<22>W"<22>t-1<>-1<>-1<>-1<>-1<>-1<>-1<>-1<>`+"<22>+"<22>+"<22>+"<22>+"<22>+"<22>+"<22>+"<22>\G"<22>G"<22>G"<22>G"<22>G"<22>G"<22>G"<22>G"<22>T<08><1E>
<EFBFBD>
<EFBFBD><10><1E>
<EFBFBD>
<EFBFBD>
rI