提交 48f6adfd076f6a28dcb8f72e230a82aea56c90a3

作者 Shishutong
1 个父辈 9b12b66a

1.项目维护

1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4"> 2 <project version="4">
3 <component name="ChangeListManager"> 3 <component name="ChangeListManager">
4 - <list default="true" id="129454fc-5415-4c7e-9855-d0293355ede5" name="Default Changelist" comment="版本:1.0.13&#10;1.封装生成身份证&quot;年&quot;"> 4 + <list default="true" id="129454fc-5415-4c7e-9855-d0293355ede5" name="Default Changelist" comment="1.项目维护">
  5 + <change afterPath="$PROJECT_DIR$/data/Internship_manage/test_08_log_marking.xlsx" afterDir="false" />
  6 + <change afterPath="$PROJECT_DIR$/data/Internship_manage/test_09_leave_record.xlsx" afterDir="false" />
5 <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> 7 <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
  8 + <change beforePath="$PROJECT_DIR$/conf/config.ini" beforeDir="false" afterPath="$PROJECT_DIR$/conf/config.ini" afterDir="false" />
6 <change beforePath="$PROJECT_DIR$/data/Internship_manage/test_07_apply_audit.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/Internship_manage/test_07_apply_audit.xlsx" afterDir="false" /> 9 <change beforePath="$PROJECT_DIR$/data/Internship_manage/test_07_apply_audit.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/Internship_manage/test_07_apply_audit.xlsx" afterDir="false" />
7 <change beforePath="$PROJECT_DIR$/data/Internship_preparation/test_04_internship_plan.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/Internship_preparation/test_04_internship_plan.xlsx" afterDir="false" /> 10 <change beforePath="$PROJECT_DIR$/data/Internship_preparation/test_04_internship_plan.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/Internship_preparation/test_04_internship_plan.xlsx" afterDir="false" />
8 <change beforePath="$PROJECT_DIR$/data/Internship_preparation/test_05_internship_project.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/Internship_preparation/test_05_internship_project.xlsx" afterDir="false" /> 11 <change beforePath="$PROJECT_DIR$/data/Internship_preparation/test_05_internship_project.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/Internship_preparation/test_05_internship_project.xlsx" afterDir="false" />
@@ -15,9 +18,16 @@ @@ -15,9 +18,16 @@
15 <change beforePath="$PROJECT_DIR$/data/teaching_affairs/test_03_student.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/teaching_affairs/test_03_student.xlsx" afterDir="false" /> 18 <change beforePath="$PROJECT_DIR$/data/teaching_affairs/test_03_student.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/teaching_affairs/test_03_student.xlsx" afterDir="false" />
16 <change beforePath="$PROJECT_DIR$/data/teaching_affairs/test_03_teacher.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/teaching_affairs/test_03_teacher.xlsx" afterDir="false" /> 19 <change beforePath="$PROJECT_DIR$/data/teaching_affairs/test_03_teacher.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/teaching_affairs/test_03_teacher.xlsx" afterDir="false" />
17 <change beforePath="$PROJECT_DIR$/data/test_01_login.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/test_01_login.xlsx" afterDir="false" /> 20 <change beforePath="$PROJECT_DIR$/data/test_01_login.xlsx" beforeDir="false" afterPath="$PROJECT_DIR$/data/test_01_login.xlsx" afterDir="false" />
18 - <change beforePath="$PROJECT_DIR$/logs/log.log.2022-12-24" beforeDir="false" />  
19 <change beforePath="$PROJECT_DIR$/report/history.json" beforeDir="false" afterPath="$PROJECT_DIR$/report/history.json" afterDir="false" /> 21 <change beforePath="$PROJECT_DIR$/report/history.json" beforeDir="false" afterPath="$PROJECT_DIR$/report/history.json" afterDir="false" />
  22 + <change beforePath="$PROJECT_DIR$/report/report2.html" beforeDir="false" afterPath="$PROJECT_DIR$/report/report2.html" afterDir="false" />
  23 + <change beforePath="$PROJECT_DIR$/run.py" beforeDir="false" afterPath="$PROJECT_DIR$/run.py" afterDir="false" />
  24 + <change beforePath="$PROJECT_DIR$/testcase/test_03_teaching_affairs.py" beforeDir="false" afterPath="$PROJECT_DIR$/testcase/test_03_teaching_affairs.py" afterDir="false" />
  25 + <change beforePath="$PROJECT_DIR$/testcase/test_04_Internship_preparation.py" beforeDir="false" afterPath="$PROJECT_DIR$/testcase/test_04_Internship_preparation.py" afterDir="false" />
  26 + <change beforePath="$PROJECT_DIR$/testcase/test_05_student_practice.py" beforeDir="false" afterPath="$PROJECT_DIR$/testcase/test_05_student_practice.py" afterDir="false" />
20 <change beforePath="$PROJECT_DIR$/testcase/test_06_internship_manage.py" beforeDir="false" afterPath="$PROJECT_DIR$/testcase/test_06_internship_manage.py" afterDir="false" /> 27 <change beforePath="$PROJECT_DIR$/testcase/test_06_internship_manage.py" beforeDir="false" afterPath="$PROJECT_DIR$/testcase/test_06_internship_manage.py" afterDir="false" />
  28 + <change beforePath="$PROJECT_DIR$/tools/fixture.py" beforeDir="false" afterPath="$PROJECT_DIR$/tools/fixture.py" afterDir="false" />
  29 + <change beforePath="$PROJECT_DIR$/tools/function.py" beforeDir="false" afterPath="$PROJECT_DIR$/tools/function.py" afterDir="false" />
  30 + <change beforePath="$PROJECT_DIR$/tools/handle_token.py" beforeDir="false" afterPath="$PROJECT_DIR$/tools/handle_token.py" afterDir="false" />
21 </list> 31 </list>
22 <option name="SHOW_DIALOG" value="false" /> 32 <option name="SHOW_DIALOG" value="false" />
23 <option name="HIGHLIGHT_CONFLICTS" value="true" /> 33 <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -68,19 +78,19 @@ @@ -68,19 +78,19 @@
68 <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" /> 78 <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
69 <property name="RunOnceActivity.ShowReadmeOnStart" value="true" /> 79 <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
70 <property name="WebServerToolWindowFactoryState" value="false" /> 80 <property name="WebServerToolWindowFactoryState" value="false" />
71 - <property name="last_opened_file_path" value="$PROJECT_DIR$/data/Internship_manage" /> 81 + <property name="last_opened_file_path" value="$PROJECT_DIR$/data/Internship_preparation" />
72 <property name="settings.editor.selected.configurable" value="preferences.pluginManager" /> 82 <property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
73 </component> 83 </component>
74 <component name="RecentsManager"> 84 <component name="RecentsManager">
75 <key name="CopyFile.RECENT_KEYS"> 85 <key name="CopyFile.RECENT_KEYS">
  86 + <recent name="$PROJECT_DIR$/data/Internship_preparation" />
76 <recent name="$PROJECT_DIR$/data/Internship_manage" /> 87 <recent name="$PROJECT_DIR$/data/Internship_manage" />
77 <recent name="$PROJECT_DIR$/data/student_practice" /> 88 <recent name="$PROJECT_DIR$/data/student_practice" />
78 - <recent name="$PROJECT_DIR$/data/Internship_preparation" />  
79 <recent name="$PROJECT_DIR$/data/teaching_affairs" /> 89 <recent name="$PROJECT_DIR$/data/teaching_affairs" />
80 <recent name="$PROJECT_DIR$/tools" /> 90 <recent name="$PROJECT_DIR$/tools" />
81 </key> 91 </key>
82 </component> 92 </component>
83 - <component name="RunManager" selected="Python tests.Unittests in test_06_internship_manage.py"> 93 + <component name="RunManager" selected="Python.run">
84 <configuration name="aaa" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> 94 <configuration name="aaa" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
85 <module name="yxly2" /> 95 <module name="yxly2" />
86 <option name="INTERPRETER_OPTIONS" value="" /> 96 <option name="INTERPRETER_OPTIONS" value="" />
@@ -186,11 +196,11 @@ @@ -186,11 +196,11 @@
186 </list> 196 </list>
187 <recent_temporary> 197 <recent_temporary>
188 <list> 198 <list>
189 - <item itemvalue="Python tests.Unittests in test_06_internship_manage.py" />  
190 <item itemvalue="Python.run" /> 199 <item itemvalue="Python.run" />
191 - <item itemvalue="Python.aaa" />  
192 <item itemvalue="Python.handle_token" /> 200 <item itemvalue="Python.handle_token" />
  201 + <item itemvalue="Python tests.Unittests in test_06_internship_manage.py" />
193 <item itemvalue="Python tests.Unittests in test_04_Internship_preparation.py" /> 202 <item itemvalue="Python tests.Unittests in test_04_Internship_preparation.py" />
  203 + <item itemvalue="Python.aaa" />
194 </list> 204 </list>
195 </recent_temporary> 205 </recent_temporary>
196 </component> 206 </component>
@@ -239,7 +249,44 @@ @@ -239,7 +249,44 @@
239 <workItem from="1675923047370" duration="1840000" /> 249 <workItem from="1675923047370" duration="1840000" />
240 <workItem from="1675993944948" duration="19838000" /> 250 <workItem from="1675993944948" duration="19838000" />
241 <workItem from="1676352585519" duration="649000" /> 251 <workItem from="1676352585519" duration="649000" />
242 - <workItem from="1676429711639" duration="13811000" /> 252 + <workItem from="1676429711639" duration="16558000" />
  253 + <workItem from="1676533277102" duration="8356000" />
  254 + <workItem from="1676598554552" duration="16514000" />
  255 + <workItem from="1676857239215" duration="17927000" />
  256 + <workItem from="1676943889754" duration="23167000" />
  257 + <workItem from="1677465101095" duration="3714000" />
  258 + <workItem from="1678066872906" duration="15833000" />
  259 + <workItem from="1678342329058" duration="349000" />
  260 + <workItem from="1678440283423" duration="3522000" />
  261 + <workItem from="1678670968785" duration="30552000" />
  262 + <workItem from="1679049143003" duration="2741000" />
  263 + <workItem from="1679302047492" duration="3219000" />
  264 + <workItem from="1679463110512" duration="4971000" />
  265 + <workItem from="1679635698276" duration="13882000" />
  266 + <workItem from="1679999876828" duration="52000" />
  267 + <workItem from="1680076840448" duration="16953000" />
  268 + <workItem from="1683256734428" duration="58000" />
  269 + <workItem from="1683265845967" duration="968000" />
  270 + <workItem from="1686724205755" duration="3232000" />
  271 + <workItem from="1686792679924" duration="2619000" />
  272 + <workItem from="1687138769856" duration="7331000" />
  273 + <workItem from="1687656975195" duration="6855000" />
  274 + <workItem from="1687743036927" duration="4715000" />
  275 + <workItem from="1687830426053" duration="2545000" />
  276 + <workItem from="1687847849541" duration="1370000" />
  277 + <workItem from="1687852053143" duration="1661000" />
  278 + <workItem from="1687855288373" duration="2781000" />
  279 + <workItem from="1687916234000" duration="3333000" />
  280 + <workItem from="1688003499790" duration="3404000" />
  281 + <workItem from="1688104723785" duration="2859000" />
  282 + <workItem from="1688362204086" duration="2377000" />
  283 + <workItem from="1689561559287" duration="2760000" />
  284 + <workItem from="1689644168358" duration="6421000" />
  285 + <workItem from="1689674572646" duration="1719000" />
  286 + <workItem from="1689730508198" duration="11129000" />
  287 + <workItem from="1689816981406" duration="4617000" />
  288 + <workItem from="1689903460923" duration="538000" />
  289 + <workItem from="1690180441280" duration="301000" />
243 </task> 290 </task>
244 <task id="LOCAL-00001" summary="1.0.0&#10;首次提交"> 291 <task id="LOCAL-00001" summary="1.0.0&#10;首次提交">
245 <created>1671544396986</created> 292 <created>1671544396986</created>
@@ -395,7 +442,14 @@ @@ -395,7 +442,14 @@
395 <option name="project" value="LOCAL" /> 442 <option name="project" value="LOCAL" />
396 <updated>1675679274029</updated> 443 <updated>1675679274029</updated>
397 </task> 444 </task>
398 - <option name="localTasksCounter" value="23" /> 445 + <task id="LOCAL-00023" summary="版本:1.0.14&#10;1.学生端进行选择开始实习时间&#10;2.生成实习单,当前学生进入实习中">
  446 + <created>1676453939322</created>
  447 + <option name="number" value="00023" />
  448 + <option name="presentableId" value="LOCAL-00023" />
  449 + <option name="project" value="LOCAL" />
  450 + <updated>1676453939322</updated>
  451 + </task>
  452 + <option name="localTasksCounter" value="24" />
399 <servers /> 453 <servers />
400 </component> 454 </component>
401 <component name="TypeScriptGeneratedFilesManager"> 455 <component name="TypeScriptGeneratedFilesManager">
@@ -446,7 +500,8 @@ @@ -446,7 +500,8 @@
446 <MESSAGE value="版本:1.0.11&#10;1.新增学校审核用例逻辑判断" /> 500 <MESSAGE value="版本:1.0.11&#10;1.新增学校审核用例逻辑判断" />
447 <MESSAGE value="版本:1.0.12&#10;1.优化hr登陆问题" /> 501 <MESSAGE value="版本:1.0.12&#10;1.优化hr登陆问题" />
448 <MESSAGE value="版本:1.0.13&#10;1.封装生成身份证&quot;年&quot;" /> 502 <MESSAGE value="版本:1.0.13&#10;1.封装生成身份证&quot;年&quot;" />
449 - <option name="LAST_COMMIT_MESSAGE" value="版本:1.0.13&#10;1.封装生成身份证&quot;年&quot;" /> 503 + <MESSAGE value="版本:1.0.14&#10;1.学生端进行选择开始实习时间&#10;2.生成实习单,当前学生进入实习中" />
  504 + <option name="LAST_COMMIT_MESSAGE" value="版本:1.0.14&#10;1.学生端进行选择开始实习时间&#10;2.生成实习单,当前学生进入实习中" />
450 </component> 505 </component>
451 <component name="XDebuggerManager"> 506 <component name="XDebuggerManager">
452 <breakpoint-manager> 507 <breakpoint-manager>
@@ -503,17 +558,17 @@ @@ -503,17 +558,17 @@
503 </line-breakpoint> 558 </line-breakpoint>
504 <line-breakpoint suspend="THREAD" type="python-line"> 559 <line-breakpoint suspend="THREAD" type="python-line">
505 <url>file://$PROJECT_DIR$/testcase/test_03_teaching_affairs.py</url> 560 <url>file://$PROJECT_DIR$/testcase/test_03_teaching_affairs.py</url>
506 - <line>291</line> 561 + <line>294</line>
507 <option name="timeStamp" value="35" /> 562 <option name="timeStamp" value="35" />
508 </line-breakpoint> 563 </line-breakpoint>
509 <line-breakpoint suspend="THREAD" type="python-line"> 564 <line-breakpoint suspend="THREAD" type="python-line">
510 <url>file://$PROJECT_DIR$/testcase/test_03_teaching_affairs.py</url> 565 <url>file://$PROJECT_DIR$/testcase/test_03_teaching_affairs.py</url>
511 - <line>319</line> 566 + <line>322</line>
512 <option name="timeStamp" value="37" /> 567 <option name="timeStamp" value="37" />
513 </line-breakpoint> 568 </line-breakpoint>
514 <line-breakpoint suspend="THREAD" type="python-line"> 569 <line-breakpoint suspend="THREAD" type="python-line">
515 <url>file://$PROJECT_DIR$/testcase/test_03_teaching_affairs.py</url> 570 <url>file://$PROJECT_DIR$/testcase/test_03_teaching_affairs.py</url>
516 - <line>363</line> 571 + <line>366</line>
517 <option name="timeStamp" value="38" /> 572 <option name="timeStamp" value="38" />
518 </line-breakpoint> 573 </line-breakpoint>
519 <line-breakpoint suspend="THREAD" type="python-line"> 574 <line-breakpoint suspend="THREAD" type="python-line">
@@ -562,23 +617,13 @@ @@ -562,23 +617,13 @@
562 <option name="timeStamp" value="78" /> 617 <option name="timeStamp" value="78" />
563 </line-breakpoint> 618 </line-breakpoint>
564 <line-breakpoint suspend="THREAD" type="python-line"> 619 <line-breakpoint suspend="THREAD" type="python-line">
565 - <url>file://$PROJECT_DIR$/testcase/test_04_Internship_preparation.py</url>  
566 - <line>323</line>  
567 - <option name="timeStamp" value="79" />  
568 - </line-breakpoint>  
569 - <line-breakpoint suspend="THREAD" type="python-line">  
570 - <url>file://$PROJECT_DIR$/tools/handle_token.py</url>  
571 - <line>52</line>  
572 - <option name="timeStamp" value="80" />  
573 - </line-breakpoint>  
574 - <line-breakpoint suspend="THREAD" type="python-line">  
575 <url>file://$PROJECT_DIR$/testcase/test_05_student_practice.py</url> 620 <url>file://$PROJECT_DIR$/testcase/test_05_student_practice.py</url>
576 - <line>109</line> 621 + <line>110</line>
577 <option name="timeStamp" value="98" /> 622 <option name="timeStamp" value="98" />
578 </line-breakpoint> 623 </line-breakpoint>
579 <line-breakpoint suspend="THREAD" type="python-line"> 624 <line-breakpoint suspend="THREAD" type="python-line">
580 <url>file://$PROJECT_DIR$/testcase/test_05_student_practice.py</url> 625 <url>file://$PROJECT_DIR$/testcase/test_05_student_practice.py</url>
581 - <line>101</line> 626 + <line>102</line>
582 <option name="timeStamp" value="99" /> 627 <option name="timeStamp" value="99" />
583 </line-breakpoint> 628 </line-breakpoint>
584 <line-breakpoint suspend="THREAD" type="python-line"> 629 <line-breakpoint suspend="THREAD" type="python-line">
@@ -588,27 +633,27 @@ @@ -588,27 +633,27 @@
588 </line-breakpoint> 633 </line-breakpoint>
589 <line-breakpoint suspend="THREAD" type="python-line"> 634 <line-breakpoint suspend="THREAD" type="python-line">
590 <url>file://$PROJECT_DIR$/run.py</url> 635 <url>file://$PROJECT_DIR$/run.py</url>
591 - <line>56</line> 636 + <line>60</line>
592 <option name="timeStamp" value="101" /> 637 <option name="timeStamp" value="101" />
593 </line-breakpoint> 638 </line-breakpoint>
594 <line-breakpoint suspend="THREAD" type="python-line"> 639 <line-breakpoint suspend="THREAD" type="python-line">
595 <url>file://$PROJECT_DIR$/run.py</url> 640 <url>file://$PROJECT_DIR$/run.py</url>
596 - <line>52</line> 641 + <line>56</line>
597 <option name="timeStamp" value="102" /> 642 <option name="timeStamp" value="102" />
598 </line-breakpoint> 643 </line-breakpoint>
599 <line-breakpoint suspend="THREAD" type="python-line"> 644 <line-breakpoint suspend="THREAD" type="python-line">
600 <url>file://$PROJECT_DIR$/run.py</url> 645 <url>file://$PROJECT_DIR$/run.py</url>
601 - <line>50</line> 646 + <line>54</line>
602 <option name="timeStamp" value="103" /> 647 <option name="timeStamp" value="103" />
603 </line-breakpoint> 648 </line-breakpoint>
604 <line-breakpoint suspend="THREAD" type="python-line"> 649 <line-breakpoint suspend="THREAD" type="python-line">
605 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 650 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
606 - <line>51</line> 651 + <line>52</line>
607 <option name="timeStamp" value="106" /> 652 <option name="timeStamp" value="106" />
608 </line-breakpoint> 653 </line-breakpoint>
609 <line-breakpoint suspend="THREAD" type="python-line"> 654 <line-breakpoint suspend="THREAD" type="python-line">
610 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 655 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
611 - <line>83</line> 656 + <line>84</line>
612 <option name="timeStamp" value="111" /> 657 <option name="timeStamp" value="111" />
613 </line-breakpoint> 658 </line-breakpoint>
614 <line-breakpoint suspend="THREAD" type="python-line"> 659 <line-breakpoint suspend="THREAD" type="python-line">
@@ -618,7 +663,7 @@ @@ -618,7 +663,7 @@
618 </line-breakpoint> 663 </line-breakpoint>
619 <line-breakpoint suspend="THREAD" type="python-line"> 664 <line-breakpoint suspend="THREAD" type="python-line">
620 <url>file://$PROJECT_DIR$/tools/handle_token.py</url> 665 <url>file://$PROJECT_DIR$/tools/handle_token.py</url>
621 - <line>49</line> 666 + <line>50</line>
622 <option name="timeStamp" value="116" /> 667 <option name="timeStamp" value="116" />
623 </line-breakpoint> 668 </line-breakpoint>
624 <line-breakpoint suspend="THREAD" type="python-line"> 669 <line-breakpoint suspend="THREAD" type="python-line">
@@ -628,27 +673,27 @@ @@ -628,27 +673,27 @@
628 </line-breakpoint> 673 </line-breakpoint>
629 <line-breakpoint suspend="THREAD" type="python-line"> 674 <line-breakpoint suspend="THREAD" type="python-line">
630 <url>file://$PROJECT_DIR$/tools/handle_token.py</url> 675 <url>file://$PROJECT_DIR$/tools/handle_token.py</url>
631 - <line>85</line> 676 + <line>86</line>
632 <option name="timeStamp" value="122" /> 677 <option name="timeStamp" value="122" />
633 </line-breakpoint> 678 </line-breakpoint>
634 <line-breakpoint suspend="THREAD" type="python-line"> 679 <line-breakpoint suspend="THREAD" type="python-line">
635 <url>file://$PROJECT_DIR$/tools/handle_token.py</url> 680 <url>file://$PROJECT_DIR$/tools/handle_token.py</url>
636 - <line>92</line> 681 + <line>93</line>
637 <option name="timeStamp" value="123" /> 682 <option name="timeStamp" value="123" />
638 </line-breakpoint> 683 </line-breakpoint>
639 <line-breakpoint suspend="THREAD" type="python-line"> 684 <line-breakpoint suspend="THREAD" type="python-line">
640 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 685 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
641 - <line>205</line> 686 + <line>208</line>
642 <option name="timeStamp" value="124" /> 687 <option name="timeStamp" value="124" />
643 </line-breakpoint> 688 </line-breakpoint>
644 <line-breakpoint suspend="THREAD" type="python-line"> 689 <line-breakpoint suspend="THREAD" type="python-line">
645 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 690 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
646 - <line>208</line> 691 + <line>211</line>
647 <option name="timeStamp" value="125" /> 692 <option name="timeStamp" value="125" />
648 </line-breakpoint> 693 </line-breakpoint>
649 <line-breakpoint suspend="THREAD" type="python-line"> 694 <line-breakpoint suspend="THREAD" type="python-line">
650 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 695 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
651 - <line>50</line> 696 + <line>51</line>
652 <option name="timeStamp" value="126" /> 697 <option name="timeStamp" value="126" />
653 </line-breakpoint> 698 </line-breakpoint>
654 <line-breakpoint suspend="THREAD" type="python-line"> 699 <line-breakpoint suspend="THREAD" type="python-line">
@@ -658,12 +703,12 @@ @@ -658,12 +703,12 @@
658 </line-breakpoint> 703 </line-breakpoint>
659 <line-breakpoint suspend="THREAD" type="python-line"> 704 <line-breakpoint suspend="THREAD" type="python-line">
660 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 705 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
661 - <line>153</line> 706 + <line>156</line>
662 <option name="timeStamp" value="129" /> 707 <option name="timeStamp" value="129" />
663 </line-breakpoint> 708 </line-breakpoint>
664 <line-breakpoint suspend="THREAD" type="python-line"> 709 <line-breakpoint suspend="THREAD" type="python-line">
665 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 710 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
666 - <line>210</line> 711 + <line>213</line>
667 <option name="timeStamp" value="130" /> 712 <option name="timeStamp" value="130" />
668 </line-breakpoint> 713 </line-breakpoint>
669 <line-breakpoint suspend="THREAD" type="python-line"> 714 <line-breakpoint suspend="THREAD" type="python-line">
@@ -673,22 +718,12 @@ @@ -673,22 +718,12 @@
673 </line-breakpoint> 718 </line-breakpoint>
674 <line-breakpoint suspend="THREAD" type="python-line"> 719 <line-breakpoint suspend="THREAD" type="python-line">
675 <url>file://$PROJECT_DIR$/tools/fixture.py</url> 720 <url>file://$PROJECT_DIR$/tools/fixture.py</url>
676 - <line>38</line>  
677 - <option name="timeStamp" value="138" />  
678 - </line-breakpoint>  
679 - <line-breakpoint suspend="THREAD" type="python-line">  
680 - <url>file://$PROJECT_DIR$/tools/fixture.py</url>  
681 - <line>36</line>  
682 - <option name="timeStamp" value="139" />  
683 - </line-breakpoint>  
684 - <line-breakpoint suspend="THREAD" type="python-line">  
685 - <url>file://$PROJECT_DIR$/tools/fixture.py</url>  
686 <line>35</line> 721 <line>35</line>
687 <option name="timeStamp" value="140" /> 722 <option name="timeStamp" value="140" />
688 </line-breakpoint> 723 </line-breakpoint>
689 <line-breakpoint suspend="THREAD" type="python-line"> 724 <line-breakpoint suspend="THREAD" type="python-line">
690 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 725 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
691 - <line>249</line> 726 + <line>253</line>
692 <option name="timeStamp" value="142" /> 727 <option name="timeStamp" value="142" />
693 </line-breakpoint> 728 </line-breakpoint>
694 <line-breakpoint suspend="THREAD" type="python-line"> 729 <line-breakpoint suspend="THREAD" type="python-line">
@@ -698,38 +733,113 @@ @@ -698,38 +733,113 @@
698 </line-breakpoint> 733 </line-breakpoint>
699 <line-breakpoint suspend="THREAD" type="python-line"> 734 <line-breakpoint suspend="THREAD" type="python-line">
700 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 735 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
701 - <line>274</line>  
702 - <option name="timeStamp" value="148" /> 736 + <line>279</line>
  737 + <option name="timeStamp" value="149" />
703 </line-breakpoint> 738 </line-breakpoint>
704 <line-breakpoint suspend="THREAD" type="python-line"> 739 <line-breakpoint suspend="THREAD" type="python-line">
705 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 740 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
706 <line>275</line> 741 <line>275</line>
707 - <option name="timeStamp" value="149" /> 742 + <option name="timeStamp" value="150" />
708 </line-breakpoint> 743 </line-breakpoint>
709 <line-breakpoint suspend="THREAD" type="python-line"> 744 <line-breakpoint suspend="THREAD" type="python-line">
710 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 745 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
711 - <line>271</line>  
712 - <option name="timeStamp" value="150" /> 746 + <line>241</line>
  747 + <option name="timeStamp" value="162" />
  748 + </line-breakpoint>
  749 + <line-breakpoint suspend="THREAD" type="python-line">
  750 + <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
  751 + <line>239</line>
  752 + <option name="timeStamp" value="163" />
713 </line-breakpoint> 753 </line-breakpoint>
714 <line-breakpoint suspend="THREAD" type="python-line"> 754 <line-breakpoint suspend="THREAD" type="python-line">
715 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 755 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
  756 + <line>434</line>
  757 + <option name="timeStamp" value="165" />
  758 + </line-breakpoint>
  759 + <line-breakpoint suspend="THREAD" type="python-line">
  760 + <url>file://$PROJECT_DIR$/tools/fixture.py</url>
  761 + <line>49</line>
  762 + <option name="timeStamp" value="166" />
  763 + </line-breakpoint>
  764 + <line-breakpoint suspend="THREAD" type="python-line">
  765 + <url>file://$PROJECT_DIR$/tools/fixture.py</url>
  766 + <line>50</line>
  767 + <option name="timeStamp" value="167" />
  768 + </line-breakpoint>
  769 + <line-breakpoint suspend="THREAD" type="python-line">
  770 + <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
  771 + <line>443</line>
  772 + <option name="timeStamp" value="169" />
  773 + </line-breakpoint>
  774 + <line-breakpoint suspend="THREAD" type="python-line">
  775 + <url>file://$PROJECT_DIR$/tools/fixture.py</url>
  776 + <line>38</line>
  777 + <option name="timeStamp" value="171" />
  778 + </line-breakpoint>
  779 + <line-breakpoint suspend="THREAD" type="python-line">
  780 + <url>file://$PROJECT_DIR$/testcase/test_04_Internship_preparation.py</url>
  781 + <line>323</line>
  782 + <option name="timeStamp" value="174" />
  783 + </line-breakpoint>
  784 + <line-breakpoint suspend="THREAD" type="python-line">
  785 + <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
  786 + <line>114</line>
  787 + <option name="timeStamp" value="175" />
  788 + </line-breakpoint>
  789 + <line-breakpoint suspend="THREAD" type="python-line">
  790 + <url>file://$PROJECT_DIR$/testcase/test_05_student_practice.py</url>
716 <line>93</line> 791 <line>93</line>
717 - <option name="timeStamp" value="151" /> 792 + <option name="timeStamp" value="177" />
718 </line-breakpoint> 793 </line-breakpoint>
719 <line-breakpoint suspend="THREAD" type="python-line"> 794 <line-breakpoint suspend="THREAD" type="python-line">
720 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 795 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
721 - <line>262</line>  
722 - <option name="timeStamp" value="152" /> 796 + <line>314</line>
  797 + <option name="timeStamp" value="182" />
723 </line-breakpoint> 798 </line-breakpoint>
724 <line-breakpoint suspend="THREAD" type="python-line"> 799 <line-breakpoint suspend="THREAD" type="python-line">
725 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 800 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
726 - <line>237</line>  
727 - <option name="timeStamp" value="162" /> 801 + <line>266</line>
  802 + <option name="timeStamp" value="191" />
728 </line-breakpoint> 803 </line-breakpoint>
729 <line-breakpoint suspend="THREAD" type="python-line"> 804 <line-breakpoint suspend="THREAD" type="python-line">
730 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url> 805 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
731 - <line>235</line>  
732 - <option name="timeStamp" value="163" /> 806 + <line>315</line>
  807 + <option name="timeStamp" value="193" />
  808 + </line-breakpoint>
  809 + <line-breakpoint suspend="THREAD" type="python-line">
  810 + <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
  811 + <line>265</line>
  812 + <option name="timeStamp" value="194" />
  813 + </line-breakpoint>
  814 + <line-breakpoint suspend="THREAD" type="python-line">
  815 + <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
  816 + <line>268</line>
  817 + <option name="timeStamp" value="195" />
  818 + </line-breakpoint>
  819 + <line-breakpoint suspend="THREAD" type="python-line">
  820 + <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
  821 + <line>257</line>
  822 + <option name="timeStamp" value="198" />
  823 + </line-breakpoint>
  824 + <line-breakpoint suspend="THREAD" type="python-line">
  825 + <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
  826 + <line>263</line>
  827 + <option name="timeStamp" value="199" />
  828 + </line-breakpoint>
  829 + <line-breakpoint suspend="THREAD" type="python-line">
  830 + <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
  831 + <line>278</line>
  832 + <option name="timeStamp" value="201" />
  833 + </line-breakpoint>
  834 + <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
  835 + <url>file://$PROJECT_DIR$/tools/handle_token.py</url>
  836 + <line>53</line>
  837 + <option name="timeStamp" value="203" />
  838 + </line-breakpoint>
  839 + <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
  840 + <url>file://$PROJECT_DIR$/tools/handle_token.py</url>
  841 + <line>51</line>
  842 + <option name="timeStamp" value="204" />
733 </line-breakpoint> 843 </line-breakpoint>
734 </breakpoints> 844 </breakpoints>
735 <default-breakpoints> 845 <default-breakpoints>
@@ -740,19 +850,24 @@ @@ -740,19 +850,24 @@
740 </breakpoint> 850 </breakpoint>
741 </default-breakpoints> 851 </default-breakpoints>
742 </breakpoint-manager> 852 </breakpoint-manager>
  853 + <watches-manager>
  854 + <configuration name="tests">
  855 + <watch expression="select_daily_log_excel" />
  856 + </configuration>
  857 + </watches-manager>
743 </component> 858 </component>
744 <component name="com.intellij.coverage.CoverageDataManagerImpl"> 859 <component name="com.intellij.coverage.CoverageDataManagerImpl">
745 <SUITE FILE_PATH="coverage/yxly$fixture__1_.coverage" NAME="fixture (1) Coverage Results" MODIFIED="1672814917701" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tools" /> 860 <SUITE FILE_PATH="coverage/yxly$fixture__1_.coverage" NAME="fixture (1) Coverage Results" MODIFIED="1672814917701" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tools" />
746 - <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_06_internship_manage_py.coverage" NAME="Unittests in test_06_internship_manage.py Coverage Results" MODIFIED="1676453107047" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" /> 861 + <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_06_internship_manage_py.coverage" NAME="Unittests in test_06_internship_manage.py Coverage Results" MODIFIED="1678695618207" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" />
747 <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_05_student_practice_py.coverage" NAME="Unittests in test_05_student_practice.py Coverage Results" MODIFIED="1673431777836" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" /> 862 <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_05_student_practice_py.coverage" NAME="Unittests in test_05_student_practice.py Coverage Results" MODIFIED="1673431777836" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" />
748 <SUITE FILE_PATH="coverage/yxly$fixture.coverage" NAME="fixture Coverage Results" MODIFIED="1671628017395" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" /> 863 <SUITE FILE_PATH="coverage/yxly$fixture.coverage" NAME="fixture Coverage Results" MODIFIED="1671628017395" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" />
749 - <SUITE FILE_PATH="coverage/yxly$handle_token.coverage" NAME="handle_token Coverage Results" MODIFIED="1674901030597" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tools" /> 864 + <SUITE FILE_PATH="coverage/yxly$handle_token.coverage" NAME="handle_token Coverage Results" MODIFIED="1687916804880" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tools" />
750 <SUITE FILE_PATH="coverage/yxly$Unittests_in_fixture_py.coverage" NAME="Unittests in fixture.py Coverage Results" MODIFIED="1671625806027" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" /> 865 <SUITE FILE_PATH="coverage/yxly$Unittests_in_fixture_py.coverage" NAME="Unittests in fixture.py Coverage Results" MODIFIED="1671625806027" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" />
751 <SUITE FILE_PATH="coverage/yxly$aaa.coverage" NAME="aaa Coverage Results" MODIFIED="1675678970517" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tools" /> 866 <SUITE FILE_PATH="coverage/yxly$aaa.coverage" NAME="aaa Coverage Results" MODIFIED="1675678970517" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tools" />
752 - <SUITE FILE_PATH="coverage/yxly$run.coverage" NAME="run Coverage Results" MODIFIED="1676452765292" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> 867 + <SUITE FILE_PATH="coverage/yxly$run.coverage" NAME="run Coverage Results" MODIFIED="1689843780840" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
753 <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_02_system_management_py.coverage" NAME="Unittests in test_02_system_management.py Coverage Results" MODIFIED="1672304630144" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" /> 868 <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_02_system_management_py.coverage" NAME="Unittests in test_02_system_management.py Coverage Results" MODIFIED="1672304630144" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" />
754 <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_01_login_py.coverage" NAME="Unittests in test_01_login.py Coverage Results" MODIFIED="1671641941612" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" /> 869 <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_01_login_py.coverage" NAME="Unittests in test_01_login.py Coverage Results" MODIFIED="1671641941612" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" />
755 - <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_04_Internship_preparation_py.coverage" NAME="Unittests in test_04_Internship_preparation.py Coverage Results" MODIFIED="1674873836789" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" /> 870 + <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_04_Internship_preparation_py.coverage" NAME="Unittests in test_04_Internship_preparation.py Coverage Results" MODIFIED="1678692199921" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" />
756 <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_03_teaching_affairs_py.coverage" NAME="Unittests in test_03_teaching_affairs.py Coverage Results" MODIFIED="1672198781295" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" /> 871 <SUITE FILE_PATH="coverage/yxly$Unittests_in_test_03_teaching_affairs_py.coverage" NAME="Unittests in test_03_teaching_affairs.py Coverage Results" MODIFIED="1672198781295" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" />
757 <SUITE FILE_PATH="coverage/yxly$pytest_in_test_02_system_management_py.coverage" NAME="pytest in test_02_system_management.py Coverage Results" MODIFIED="1671617451891" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" /> 872 <SUITE FILE_PATH="coverage/yxly$pytest_in_test_02_system_management_py.coverage" NAME="pytest in test_02_system_management.py Coverage Results" MODIFIED="1671617451891" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/testcase" />
758 </component> 873 </component>
@@ -43,6 +43,7 @@ phone = 17301249973 @@ -43,6 +43,7 @@ phone = 17301249973
43 code = 8888 43 code = 8888
44 type = student 44 type = student
45 way = code 45 way = code
  46 +schoolId = 1519958566130257922
46 ;============================================================================================ 47 ;============================================================================================
47 ;hr用户数据 48 ;hr用户数据
48 ;============================================================================================ 49 ;============================================================================================
@@ -55,6 +56,9 @@ password = a123456 @@ -55,6 +56,9 @@ password = a123456
55 [hr] 56 [hr]
56 ;岗位id 57 ;岗位id
57 hr_jobid = 1610468861604655106 58 hr_jobid = 1610468861604655106
  59 +[school]
  60 +;学校基地岗位id
  61 +school_base_jobid = 1635095176676659202
58 ;============================================================================================ 62 ;============================================================================================
59 ;报告的相关配置 63 ;报告的相关配置
60 ;============================================================================================ 64 ;============================================================================================
@@ -78,6 +82,7 @@ templates = 1 @@ -78,6 +82,7 @@ templates = 1
78 collect = DEBUG 82 collect = DEBUG
79 ;输出到控制台等级 83 ;输出到控制台等级
80 console = CRITICAL 84 console = CRITICAL
  85 +;console = ERROR
81 ;输出到文件根据时间轮转等级 86 ;输出到文件根据时间轮转等级
82 file = DEBUG 87 file = DEBUG
83 ;文件轮转时长单位 88 ;文件轮转时长单位
此 diff 太大无法显示。
此 diff 太大无法显示。
@@ -20,10 +20,9 @@ from testcase.test_04_Internship_preparation import Test01addInternshipPlan, Tes @@ -20,10 +20,9 @@ from testcase.test_04_Internship_preparation import Test01addInternshipPlan, Tes
20 # 学生查看实习、学生报名、 20 # 学生查看实习、学生报名、
21 from testcase.test_05_student_practice import Test01SelectAllPractice, Test02StudentApply 21 from testcase.test_05_student_practice import Test01SelectAllPractice, Test02StudentApply
22 # 查看报名审核、报名审核-学校端-进行审核、报名审核-hr端-待审核列表查看(实习申请列表)、 报名审核-hr端-进行审核 22 # 查看报名审核、报名审核-学校端-进行审核、报名审核-hr端-待审核列表查看(实习申请列表)、 报名审核-hr端-进行审核
23 -from testcase.test_06_internship_manage import Test01SelectApplyAuditList, Test02SchoolAudit, Test03HrSelectAuditList, \  
24 - Test04HrAudit 23 +from testcase.test_06_internship_manage import Test01SelectApplyAuditList, Test02SchoolAudit
25 24
26 -""" 25 +"""
27 执行所有用例 26 执行所有用例
28 """ 27 """
29 # 创建测试套件 28 # 创建测试套件
@@ -33,18 +32,23 @@ suite_all = unittest.TestSuite() @@ -33,18 +32,23 @@ suite_all = unittest.TestSuite()
33 load = unittest.TestLoader() 32 load = unittest.TestLoader()
34 # ---用例放到加载器 33 # ---用例放到加载器
35 suite_all.addTest(load.discover(TestCase_Path)) 34 suite_all.addTest(load.discover(TestCase_Path))
  35 +
36 """ 36 """
37 -执行单独模块用例  
38 -""" 37 +# 执行单独模块用例
  38 +# """
39 a1 = unittest.TestLoader().loadTestsFromTestCase(TestLogin) 39 a1 = unittest.TestLoader().loadTestsFromTestCase(TestLogin)
40 a2 = unittest.TestLoader().loadTestsFromTestCase(Test01Department) 40 a2 = unittest.TestLoader().loadTestsFromTestCase(Test01Department)
41 a3 = unittest.TestLoader().loadTestsFromTestCase(Test02Specialty) 41 a3 = unittest.TestLoader().loadTestsFromTestCase(Test02Specialty)
42 a4 = unittest.TestLoader().loadTestsFromTestCase(Test03Year) 42 a4 = unittest.TestLoader().loadTestsFromTestCase(Test03Year)
43 a5 = unittest.TestLoader().loadTestsFromTestCase(Test02Class) 43 a5 = unittest.TestLoader().loadTestsFromTestCase(Test02Class)
44 a6 = unittest.TestLoader().loadTestsFromTestCase(Test04Student) 44 a6 = unittest.TestLoader().loadTestsFromTestCase(Test04Student)
  45 +bbbbbb = unittest.TestLoader().loadTestsFromTestCase(Test02SchoolAudit)
  46 +cccc = unittest.TestLoader().loadTestsFromTestCase(Test01addInternshipPlan)
45 suite = unittest.TestSuite([a1, a2, a3, a4, a5, a6]) 47 suite = unittest.TestSuite([a1, a2, a3, a4, a5, a6])
  48 +suite_a = unittest.TestSuite([cccc])
46 49
47 runner_test(suite_all) # 执行 50 runner_test(suite_all) # 执行
  51 +# runner_test(suite_a) # 执行
48 52
49 # input_case = input("请输入需要执行的用例:") 53 # input_case = input("请输入需要执行的用例:")
50 # try: 54 # try:
@@ -242,6 +242,8 @@ class Test03Course(unittest.TestCase): @@ -242,6 +242,8 @@ class Test03Course(unittest.TestCase):
242 new_time = time.strftime("%Y%m%d_%H:%M:%S") 242 new_time = time.strftime("%Y%m%d_%H:%M:%S")
243 # 随机班级名称 243 # 随机班级名称
244 self.course_name = "py自动化课程" + new_time 244 self.course_name = "py自动化课程" + new_time
  245 + # 随机课程代码
  246 + self.course_code = new_time
245 247
246 @data(*add_course_case) 248 @data(*add_course_case)
247 def test_add_course_info(self, case): 249 def test_add_course_info(self, case):
@@ -256,7 +258,8 @@ class Test03Course(unittest.TestCase): @@ -256,7 +258,8 @@ class Test03Course(unittest.TestCase):
256 case["data"] = case["data"].replace("#professionalId#", str(self.professionalId)) 258 case["data"] = case["data"].replace("#professionalId#", str(self.professionalId))
257 if "#termIds#" in case["data"]: 259 if "#termIds#" in case["data"]:
258 case["data"] = case["data"].replace("#termIds#", str(self.termsId)) 260 case["data"] = case["data"].replace("#termIds#", str(self.termsId))
259 - 261 + if "#code#" in case["data"]:
  262 + case["data"] = case["data"].replace("#code#", str(self.course_code))
260 data = json.loads(case["data"]) 263 data = json.loads(case["data"])
261 expected = json.loads(case["expected"]) 264 expected = json.loads(case["expected"])
262 # 调用接口 265 # 调用接口
@@ -108,8 +108,8 @@ class Test01addInternshipPlan(unittest.TestCase): @@ -108,8 +108,8 @@ class Test01addInternshipPlan(unittest.TestCase):
108 case["data"] = case["data"].replace("#courseId#", str(self.courseId)) # 课程 108 case["data"] = case["data"].replace("#courseId#", str(self.courseId)) # 课程
109 if "#departmentId#" in case["data"]: 109 if "#departmentId#" in case["data"]:
110 case["data"] = case["data"].replace("#departmentId#", str(self.department_id)) # 院系id 110 case["data"] = case["data"].replace("#departmentId#", str(self.department_id)) # 院系id
111 - if "#professionalId#" in case["data"]:  
112 - case["data"] = case["data"].replace("#professionalId#", str(self.professionalId)) # 专业id 111 + if "#professionalIds#" in case["data"]:
  112 + case["data"] = case["data"].replace("#professionalIds#", str(self.professionalId)) # 专业id
113 if "#classInfoId#" in case["data"]: 113 if "#classInfoId#" in case["data"]:
114 case["data"] = case["data"].replace("#classInfoId#", str(self.classId)) # 班级id 114 case["data"] = case["data"].replace("#classInfoId#", str(self.classId)) # 班级id
115 if "#teacherIds#" in case["data"]: 115 if "#teacherIds#" in case["data"]:
@@ -314,7 +314,7 @@ class Test04publishInternshipProject(unittest.TestCase): @@ -314,7 +314,7 @@ class Test04publishInternshipProject(unittest.TestCase):
314 cls.token = LoginToken.login_token() 314 cls.token = LoginToken.login_token()
315 315
316 def setUp(self): 316 def setUp(self):
317 - # ---获取计划id 317 + # ---获取项目id
318 select_project_excel = Excel(os.path.join(Internship_path, "test_05_internship_project.xlsx"), 318 select_project_excel = Excel(os.path.join(Internship_path, "test_05_internship_project.xlsx"),
319 "select_internship_project") 319 "select_internship_project")
320 read_project_excel = select_project_excel.read_excel_location("C2") 320 read_project_excel = select_project_excel.read_excel_location("C2")
@@ -324,7 +324,7 @@ class Test04publishInternshipProject(unittest.TestCase): @@ -324,7 +324,7 @@ class Test04publishInternshipProject(unittest.TestCase):
324 self.projectId = jsonpath(project_json, "$..id")[0] # 获取待发布项目id 324 self.projectId = jsonpath(project_json, "$..id")[0] # 获取待发布项目id
325 325
326 # ==================================================================== 326 # ====================================================================
327 - # 发布计划 327 + # 发布项目
328 # ==================================================================== 328 # ====================================================================
329 @data(*publish_project_case) 329 @data(*publish_project_case)
330 def test_publish_plan(self, case): 330 def test_publish_plan(self, case):
@@ -362,6 +362,3 @@ class Test04publishInternshipProject(unittest.TestCase): @@ -362,6 +362,3 @@ class Test04publishInternshipProject(unittest.TestCase):
362 self.publish_project.write_excel(row=case["id"] + 1, column=9, value=case["data"]) 362 self.publish_project.write_excel(row=case["id"] + 1, column=9, value=case["data"])
363 HandleLog.log.info("用例{},执行通过".format(case["title"])) 363 HandleLog.log.info("用例{},执行通过".format(case["title"]))
364 364
365 -  
366 -if __name__ == '__main__':  
367 - Test03addInternshipProject  
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 # ====================================== 2 # ======================================
3 # @Software: PyCharm 3 # @Software: PyCharm
4 -# @Author : Shitou ✊ 4 +# @Author : Shitou ✊
5 # @Time : 2023/1/9 16:32 5 # @Time : 2023/1/9 16:32
6 # @FileName: test_05_student_practice.py 6 # @FileName: test_05_student_practice.py
7 # ====================================== 7 # ======================================
@@ -97,7 +97,8 @@ class Test02StudentApply(unittest.TestCase): @@ -97,7 +97,8 @@ class Test02StudentApply(unittest.TestCase):
97 def test01student_apply(self, case): 97 def test01student_apply(self, case):
98 # 准备数据 98 # 准备数据
99 if "#jobId#" in case["data"]: 99 if "#jobId#" in case["data"]:
100 - case["data"] = case["data"].replace("#jobId#", str(conf.get("hr", "hr_jobid"))) 100 + # case["data"] = case["data"].replace("#jobId#", str(conf.get("hr", "hr_jobid")))----2023/03/13修改需求,修改为获取基地岗位
  101 + case["data"] = case["data"].replace("#jobId#", str(conf.get("school", "school_base_jobid")))
101 data = json.loads(case["data"]) 102 data = json.loads(case["data"])
102 expected = json.loads(case["expected"]) 103 expected = json.loads(case["expected"])
103 if "{id}" in case["url"]: 104 if "{id}" in case["url"]:
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
10 """ 10 """
11 import json 11 import json
12 import os 12 import os
  13 +import time
13 import unittest 14 import unittest
14 15
15 import requests 16 import requests
@@ -27,7 +28,7 @@ from tools.handle_token import LoginToken, HrLoginToken, StudentLoginToken @@ -27,7 +28,7 @@ from tools.handle_token import LoginToken, HrLoginToken, StudentLoginToken
27 # ==================实习管理菜单相关用例================== 28 # ==================实习管理菜单相关用例==================
28 29
29 # ==================================================================== 30 # ====================================================================
30 -# 报名审核-待审核列表查看 31 +# 报名审核-待审核列表查看--学校
31 # ==================================================================== 32 # ====================================================================
32 @ddt 33 @ddt
33 class Test01SelectApplyAuditList(unittest.TestCase): 34 class Test01SelectApplyAuditList(unittest.TestCase):
@@ -97,7 +98,6 @@ class Test02SchoolAudit(unittest.TestCase): @@ -97,7 +98,6 @@ class Test02SchoolAudit(unittest.TestCase):
97 def test01audit(self, case): 98 def test01audit(self, case):
98 if "#formIds#" in case["data"]: 99 if "#formIds#" in case["data"]:
99 case["data"] = case["data"].replace("#formIds#", str(self.applyId)) # 待审核id 100 case["data"] = case["data"].replace("#formIds#", str(self.applyId)) # 待审核id
100 -  
101 # 准备数据 101 # 准备数据
102 data = json.loads(case["data"]) 102 data = json.loads(case["data"])
103 expected = json.loads(case["expected"]) 103 expected = json.loads(case["expected"])
@@ -127,6 +127,9 @@ class Test02SchoolAudit(unittest.TestCase): @@ -127,6 +127,9 @@ class Test02SchoolAudit(unittest.TestCase):
127 HandleLog.log.info("用例{},执行通过".format(case["title"])) 127 HandleLog.log.info("用例{},执行通过".format(case["title"]))
128 128
129 129
  130 +"""
  131 +需求改动,无需hr进行审核2023/03/13
  132 +
130 # ==================================================================== 133 # ====================================================================
131 # 报名审核-hr端-待审核列表查看(实习申请列表) 134 # 报名审核-hr端-待审核列表查看(实习申请列表)
132 # ==================================================================== 135 # ====================================================================
@@ -226,6 +229,7 @@ class Test04HrAudit(unittest.TestCase): @@ -226,6 +229,7 @@ class Test04HrAudit(unittest.TestCase):
226 # 将创建使用的数据写入到excel表格中 229 # 将创建使用的数据写入到excel表格中
227 self.hr_audit.write_excel(row=case["id"] + 1, column=9, value=case["data"]) 230 self.hr_audit.write_excel(row=case["id"] + 1, column=9, value=case["data"])
228 HandleLog.log.info("用例{},执行通过".format(case["title"])) 231 HandleLog.log.info("用例{},执行通过".format(case["title"]))
  232 +"""
229 233
230 234
231 # ==================================================================== 235 # ====================================================================
@@ -234,7 +238,7 @@ class Test04HrAudit(unittest.TestCase): @@ -234,7 +238,7 @@ class Test04HrAudit(unittest.TestCase):
234 @ddt 238 @ddt
235 class Test05StudentIntenship(unittest.TestCase): 239 class Test05StudentIntenship(unittest.TestCase):
236 student_start_internship = Excel(os.path.join(Internship_manage, "test_07_apply_audit.xlsx"), 240 student_start_internship = Excel(os.path.join(Internship_manage, "test_07_apply_audit.xlsx"),
237 - "student_start_internship") 241 + "student_start_internshipp")
238 student_start_internship_case = student_start_internship.read_excel() # 学生填写开始时间 242 student_start_internship_case = student_start_internship.read_excel() # 学生填写开始时间
239 243
240 # 登陆前置 244 # 登陆前置
@@ -286,6 +290,380 @@ class Test05StudentIntenship(unittest.TestCase): @@ -286,6 +290,380 @@ class Test05StudentIntenship(unittest.TestCase):
286 HandleLog.log.info("用例{},执行通过".format(case["title"])) 290 HandleLog.log.info("用例{},执行通过".format(case["title"]))
287 291
288 292
289 -if __name__ == '__main__':  
290 - Test04HrAudit()  
291 - Test05StudentIntenship() 293 +# ====================================================================
  294 +# 学校端---实习申请审核通过
  295 +# ====================================================================
  296 +@ddt
  297 +class Test06SchoolSelectApply(unittest.TestCase):
  298 + student_internship_applic = Excel(os.path.join(Internship_manage, "test_07_apply_audit.xlsx"),
  299 + "school_audit_internship_applic")
  300 + student_internship_applic_case = student_internship_applic.read_excel()
  301 +
  302 + @classmethod
  303 + def setUpClass(cls):
  304 + # 获取token
  305 + cls.token = LoginToken.login_token()
  306 +
  307 + def setUp(self):
  308 + # ---获取实习申请id---待审核
  309 + select_internship_applic = Excel(os.path.join(Internship_manage, "test_07_apply_audit.xlsx"),
  310 + "school_select_internship_applic")
  311 + read_internship_applic_excel = select_internship_applic.read_excel_location("C2")
  312 + read_internship_applic_excel_d = select_internship_applic.read_excel_location("E2") # 读取params
  313 + internship_applic_list = SelectData(str(read_internship_applic_excel),
  314 + json.loads(read_internship_applic_excel_d))
  315 + internship_applic_json = internship_applic_list.select_list()
  316 + self.internship_applic = jsonpath(internship_applic_json, "$..id")[0] # 获取实习申请待审核id
  317 +
  318 + @data(*student_internship_applic_case)
  319 + def test01audit(self, case):
  320 + if f"#id#" in case["url"]:
  321 + case["url"] = case["url"].replace("#id#", str(self.internship_applic)) # 待审核id
  322 +
  323 + # 准备数据
  324 + data = json.loads(case["data"])
  325 + expected = json.loads(case["expected"])
  326 + # 调用接口
  327 + url = conf.get("url", "url_ip") + case["url"]
  328 + herders = {}
  329 + herders["Authorization"] = self.token
  330 + request = requests.request(url=url, method=case["method"], json=data, headers=herders)
  331 + res = request.json()
  332 + print("用例入参:{}".format(data))
  333 + print("预期结果:", expected)
  334 + print("实际结果:", res)
  335 + # 断言
  336 + try:
  337 + self.assertEqual(expected['msg'], res['msg'])
  338 + self.assertEqual(expected['code'], res['code'])
  339 + except AssertionError as e:
  340 + # 写入Excel
  341 + self.student_internship_applic.write_excel(row=case["id"] + 1, column=7, value="不通过")
  342 + HandleLog.log.error("用例标题{},不通过".format(case['title']))
  343 + HandleLog.log.exception(e)
  344 + raise e
  345 + else:
  346 + self.student_internship_applic.write_excel(row=case["id"] + 1, column=7, value="通过")
  347 + # 将创建使用的数据写入到excel表格中
  348 + self.student_internship_applic.write_excel(row=case["id"] + 1, column=9, value=case["data"])
  349 + HandleLog.log.info("用例{},执行通过".format(case["title"]))
  350 +
  351 +
  352 +# ====================================================================
  353 +# 学生端---写周日志
  354 +# ====================================================================
  355 +@ddt
  356 +class Test07StudentWriteLog(unittest.TestCase):
  357 + student_write_log = Excel(os.path.join(Internship_manage, "test_08_log_marking.xlsx"), "write_log")
  358 + student_write_log_case = student_write_log.read_excel()
  359 +
  360 + # 登陆前置
  361 + @classmethod
  362 + def setUpClass(cls):
  363 + cls.student_token = StudentLoginToken.login_token()
  364 +
  365 + def setUp(self):
  366 + """单条用例执行前执行的函数"""
  367 + self.new_time = time.strftime("%Y%m%d_%H:%M:%S")
  368 + # 获取学生端实习中id
  369 + student_select_intership_running_excle = Excel(os.path.join(Internship_manage, "test_07_apply_audit.xlsx"),
  370 + "student_select_intership_wait")
  371 + read_student_intership_excel = student_select_intership_running_excle.read_excel_location("C3")
  372 + read_student_intership_excel_d = student_select_intership_running_excle.read_excel_location("E3") # 读取params
  373 + student_intership_list = SelectData(str(read_student_intership_excel),
  374 + json.loads(read_student_intership_excel_d))
  375 + student_intership_json = student_intership_list.student_select_list() # 正序查找
  376 + self.student_intership_id = jsonpath(student_intership_json, "$..id")[0] # 获取实习单实习中id
  377 +
  378 + @data(*student_write_log_case)
  379 + def test01student_write_log(self, case):
  380 + if "#formId#" in case["data"]:
  381 + case["data"] = case["data"].replace("#formId#", str(self.student_intership_id))
  382 + if "#time#" in case["data"]:
  383 + case["data"] = case["data"].replace("#time#", str(self.new_time))
  384 + # 准备数据
  385 + data = json.loads(case["data"])
  386 + expected = json.loads(case["expected"])
  387 + # 调用接口
  388 + url = conf.get("url", "url_ip") + case["url"]
  389 + headers = {}
  390 + headers["Authorization"] = self.student_token
  391 + request = requests.request(url=url, method=case["method"], json=data, headers=headers)
  392 + res = request.json()
  393 + print("用例入参:{}".format(data))
  394 + print("预期结果:", expected)
  395 + print("实际结果:", res)
  396 + # 断言
  397 + try:
  398 + self.assertEqual(expected['msg'], res['msg'])
  399 + self.assertEqual(expected['code'], res['code'])
  400 + except AssertionError as e:
  401 + self.student_write_log.write_excel(row=case['id'] + 1, column=7, value="不通过")
  402 + HandleLog.log.error("用例标题{},不通过".format(case['title']))
  403 + HandleLog.log.exception(e)
  404 + raise e
  405 + else:
  406 + self.student_write_log.write_excel(row=case["id"] + 1, column=7, value="通过")
  407 + # 将创建使用的数据写入到excel表格中
  408 + self.student_write_log.write_excel(row=case["id"] + 1, column=9, value=case["data"])
  409 + HandleLog.log.info("用例{},执行通过".format(case["title"]))
  410 +
  411 +
  412 +# ====================================================================
  413 +# 教师端---批阅周日志
  414 +# ====================================================================
  415 +@ddt
  416 +class Test08ApproveLog(unittest.TestCase):
  417 + teacher_approve_log = Excel(os.path.join(Internship_manage, "test_08_log_marking.xlsx"), "approve_log")
  418 + teacher_approve_log_case = teacher_approve_log.read_excel()
  419 +
  420 + # 登陆前置
  421 + @classmethod
  422 + def setUpClass(cls):
  423 + cls.teacher_token = LoginToken.login_token()
  424 +
  425 + def setUp(self):
  426 + # 获取周日志id
  427 + # ---------------获取日志id
  428 + select_daily_log = Excel(os.path.join(Internship_manage, "test_08_log_marking.xlsx"),
  429 + "select_log")
  430 + select_daily_log_excel = select_daily_log.read_excel_location("C2")
  431 + select_daily_log_excel_d = select_daily_log.read_excel_location("E2") # 读取params
  432 + daily_log_list = SelectData(str(select_daily_log_excel),
  433 + json.loads(select_daily_log_excel_d))
  434 + daily_log_json = daily_log_list.select_list() # 正序查找
  435 + self.daily_ids = jsonpath(daily_log_json, "$..id")[0] # 获取日志id
  436 + # ---------------获取周志id
  437 + select_weekly_log = Excel(os.path.join(Internship_manage, "test_08_log_marking.xlsx"),
  438 + "select_log")
  439 + select_weekly_log_excel = select_weekly_log.read_excel_location("C3")
  440 + select_weekly_log_excel_d = select_weekly_log.read_excel_location("E3") # 读取params
  441 + weekly_log_list = SelectData(str(select_weekly_log_excel),
  442 + json.loads(select_weekly_log_excel_d))
  443 + weekly_log_json = weekly_log_list.select_list() # 正序查找
  444 + self.weekly_ids = jsonpath(weekly_log_json, "$..id")[0] # 获取周志id
  445 + # ---------------获取月志id
  446 + select_monthly_log = Excel(os.path.join(Internship_manage, "test_08_log_marking.xlsx"),
  447 + "select_log")
  448 + select_monthly_log_excel = select_monthly_log.read_excel_location("C4")
  449 + select_monthly_log_excel_d = select_monthly_log.read_excel_location("E4") # 读取params
  450 + monthly_log_list = SelectData(str(select_monthly_log_excel),
  451 + json.loads(select_monthly_log_excel_d))
  452 + monthly_log_json = monthly_log_list.select_list() # 正序查找
  453 + self.monthly_ids = jsonpath(monthly_log_json, "$..id")[0] # 获取月志id
  454 +
  455 + @data(*teacher_approve_log_case)
  456 + def test01approve_log(self, case):
  457 + if "#daily_ids#" in case["data"]:
  458 + case["data"] = case["data"].replace("#daily_ids#", str(self.daily_ids)) # 日志
  459 + if "#weekly_ids#" in case["data"]:
  460 + case["data"] = case["data"].replace("#weekly_ids#", str(self.weekly_ids)) # 周志
  461 + if "#monthly_ids#" in case["data"]:
  462 + case["data"] = case["data"].replace("#monthly_ids#", str(self.monthly_ids)) # 月志
  463 +
  464 + # 准备数据
  465 + data = json.loads(case["data"])
  466 + expected = json.loads(case["expected"])
  467 + # 调用接口
  468 + url = conf.get("url", "url_ip") + case["url"]
  469 + headers = {}
  470 + headers["Authorization"] = self.teacher_token
  471 + request = requests.request(url=url, method=case["method"], json=data, headers=headers)
  472 + res = request.json()
  473 + print("用例入参:{}".format(data))
  474 + print("预期结果:", expected)
  475 + print("实际结果:", res)
  476 + # 断言
  477 + try:
  478 + self.assertEqual(expected['msg'], res['msg'])
  479 + self.assertEqual(expected['code'], res['code'])
  480 + except AssertionError as e:
  481 + self.teacher_approve_log.write_excel(row=case['id'] + 1, column=7, value="不通过")
  482 + HandleLog.log.error("用例标题{},不通过".format(case['title']))
  483 + HandleLog.log.exception(e)
  484 + raise e
  485 + else:
  486 + self.teacher_approve_log.write_excel(row=case["id"] + 1, column=7, value="通过")
  487 + # 将创建使用的数据写入到excel表格中
  488 + self.teacher_approve_log.write_excel(row=case["id"] + 1, column=9, value=case["data"])
  489 + HandleLog.log.info("用例{},执行通过".format(case["title"]))
  490 +
  491 +
  492 +# ====================================================================
  493 +# 学生端---打卡签到
  494 +# ====================================================================
  495 +@ddt
  496 +class Test09Attendance(unittest.TestCase):
  497 + student_attendance = Excel(os.path.join(Internship_manage, "test_08_log_marking.xlsx"), "student_attendance")
  498 + student_attendance_case = student_attendance.read_excel()
  499 +
  500 + # 登陆前置
  501 + @classmethod
  502 + def setUpClass(cls):
  503 + cls.student_token = StudentLoginToken.login_token()
  504 +
  505 + def setUp(self):
  506 + # 获取学生端实习中id
  507 + student_select_intership_running_excle = Excel(os.path.join(Internship_manage, "test_07_apply_audit.xlsx"),
  508 + "student_select_intership_wait")
  509 + read_student_intership_excel = student_select_intership_running_excle.read_excel_location("C3")
  510 + read_student_intership_excel_d = student_select_intership_running_excle.read_excel_location("E3") # 读取params
  511 + student_intership_list = SelectData(str(read_student_intership_excel),
  512 + json.loads(read_student_intership_excel_d))
  513 + student_intership_json = student_intership_list.student_select_list() # 正序查找
  514 + self.student_intership_id = jsonpath(student_intership_json, "$..id")[0] # 获取实习单实习中id
  515 +
  516 + @data(*student_attendance_case)
  517 + def test01student_attendance(self, case):
  518 + if "#formId#" in case["data"]:
  519 + case["data"] = case["data"].replace("#formId#", str(self.student_intership_id)) # 实习单
  520 +
  521 + # 准备数据
  522 + data = json.loads(case["data"])
  523 + expected = json.loads(case["expected"])
  524 + # 调用接口
  525 + url = conf.get("url", "url_ip") + case["url"]
  526 + headers = {}
  527 + headers["Authorization"] = self.student_token
  528 + request = requests.request(url=url, method=case["method"], json=data, headers=headers)
  529 + res = request.json()
  530 + print("用例入参:{}".format(data))
  531 + print("预期结果:", expected)
  532 + print("实际结果:", res)
  533 + # 断言
  534 + try:
  535 + self.assertEqual(expected['msg'], res['msg'])
  536 + self.assertEqual(expected['code'], res['code'])
  537 + except AssertionError as e:
  538 + self.student_attendance.write_excel(row=case['id'] + 1, column=7, value="不通过")
  539 + HandleLog.log.error("用例标题{},不通过".format(case['title']))
  540 + HandleLog.log.exception(e)
  541 + raise e
  542 + else:
  543 + self.student_attendance.write_excel(row=case["id"] + 1, column=7, value="通过")
  544 + # 将创建使用的数据写入到excel表格中
  545 + self.student_attendance.write_excel(row=case["id"] + 1, column=9, value=case["data"])
  546 + HandleLog.log.info("用例{},执行通过".format(case["title"]))
  547 +
  548 +
  549 +# ====================================================================
  550 +# 学生端---请假申请
  551 +# ====================================================================
  552 +
  553 +@ddt
  554 +class Test10LeaveRecord(unittest.TestCase):
  555 + student_leave_record = Excel(os.path.join(Internship_manage, "test_09_leave_record.xlsx"), "student_leave_record")
  556 + student_leave_record_case = student_leave_record.read_excel()
  557 +
  558 + # 登陆的前置
  559 + @classmethod
  560 + def setUpClass(cls):
  561 + cls.student_token = StudentLoginToken.login_token() # 获取学生登陆小程序的token
  562 +
  563 + def setUp(self):
  564 + """单条用例执行前执行的函数"""
  565 + self.new_time = time.strftime("%Y%m%d_%H:%M:%S")
  566 + # 获取学生端实习中id
  567 + student_select_intership_running_excle = Excel(os.path.join(Internship_manage, "test_07_apply_audit.xlsx"),
  568 + "student_select_intership_wait")
  569 + read_student_intership_excel = student_select_intership_running_excle.read_excel_location("C3")
  570 + read_student_intership_excel_d = student_select_intership_running_excle.read_excel_location("E3") # 读取params
  571 + student_intership_list = SelectData(str(read_student_intership_excel),
  572 + json.loads(read_student_intership_excel_d))
  573 + student_intership_json = student_intership_list.student_select_list() # 正序查找
  574 + self.student_intership_id = jsonpath(student_intership_json, "$..id")[0] # 获取实习单实习中id
  575 +
  576 + @data(*student_leave_record_case)
  577 + def test01student_leave_record(self, case):
  578 + if "#formId#" in case["data"]:
  579 + case["data"] = case["data"].replace("#formId#", str(self.student_intership_id)) # 实习单
  580 + if "#time#" in case["data"]:
  581 + case["data"] = case["data"].replace("#time#", str(self.new_time)) # 请假原因
  582 + # 准备数据
  583 + data = json.loads(case["data"])
  584 + expected = json.loads(case["expected"])
  585 + # 调用接口
  586 + url = conf.get("url", "url_ip") + case["url"]
  587 + headers = {}
  588 + headers["Authorization"] = self.student_token
  589 + request = requests.request(url=url, method=case["method"], json=data, headers=headers)
  590 + res = request.json()
  591 + print("用例入参:{}".format(data))
  592 + print("预期结果:", expected)
  593 + print("实际结果:", res)
  594 + # 断言
  595 + try:
  596 + self.assertEqual(expected['msg'], res['msg'])
  597 + self.assertEqual(expected['code'], res['code'])
  598 + except AssertionError as e:
  599 + self.student_leave_record.write_excel(row=case['id'] + 1, column=7, value="不通过")
  600 + HandleLog.log.error("用例标题{},不通过".format(case['title']))
  601 + HandleLog.log.exception(e)
  602 + raise e
  603 + else:
  604 + self.student_leave_record.write_excel(row=case["id"] + 1, column=7, value="通过")
  605 + # 将创建使用的数据写入到excel表格中
  606 + self.student_leave_record.write_excel(row=case["id"] + 1, column=9, value=case["data"])
  607 + HandleLog.log.info("用例{},执行通过".format(case["title"]))
  608 +
  609 +
  610 +# ====================================================================
  611 +# 教师端---请假审批--通过
  612 +# ====================================================================
  613 +
  614 +@ddt
  615 +class Test11TeacherAprove(unittest.TestCase):
  616 + teacher_aprove = Excel(os.path.join(Internship_manage, "test_09_leave_record.xlsx"), "tacher_aprove")
  617 + teacher_aprove_case = teacher_aprove.read_excel()
  618 +
  619 + # 登陆的前置
  620 + @classmethod
  621 + def setUpClass(cls):
  622 + cls.teacher_token = LoginToken.login_token() # 获取web教师端的token
  623 +
  624 + def setUp(self):
  625 + """单条用例执行前执行的函数"""
  626 + self.new_time = time.strftime("%Y%m%d_%H:%M:%S")
  627 + # 获取请假批阅列表的id
  628 + leave_record_excel = Excel(os.path.join(Internship_manage, "test_09_leave_record.xlsx"),
  629 + "select_tacher_leave_record")
  630 + read_leave_record = leave_record_excel.read_excel_location("C2")
  631 + read_leave_record_d = leave_record_excel.read_excel_location("E2")
  632 + teacher_leave_record_list = SelectData(str(read_leave_record),
  633 + json.loads(read_leave_record_d))
  634 + teacher_leave_record_json = teacher_leave_record_list.select_list() # 正序查找
  635 + self.leave_record_id = jsonpath(teacher_leave_record_json, "$..id")[0] # 获取请假审批id
  636 +
  637 + @data(*teacher_aprove_case)
  638 + def test01teacher_aprove(self, case):
  639 +
  640 + if "#time#" in case["data"]:
  641 + case["data"] = case["data"].replace("#time#", str(self.new_time)) # 审批通过的回复
  642 + if "{id}" in case["url"]:
  643 + case["url"] = case["url"].replace("{id}", str(self.leave_record_id))
  644 + # 准备数据
  645 + data = json.loads(case["data"])
  646 + expected = json.loads(case["expected"])
  647 + # 调用接口
  648 + url = conf.get("url", "url_ip") + case["url"]
  649 + headers = {}
  650 + headers["Authorization"] = self.teacher_token
  651 + request = requests.request(url=url, method=case["method"], json=data, headers=headers)
  652 + res = request.json()
  653 + print("用例入参:{}".format(data))
  654 + print("预期结果:", expected)
  655 + print("实际结果:", res)
  656 + # 断言
  657 + try:
  658 + self.assertEqual(expected['msg'], res['msg'])
  659 + self.assertEqual(expected['code'], res['code'])
  660 + except AssertionError as e:
  661 + self.teacher_aprove.write_excel(row=case['id'] + 1, column=7, value="不通过")
  662 + HandleLog.log.error("用例标题{},不通过".format(case['title']))
  663 + HandleLog.log.exception(e)
  664 + raise e
  665 + else:
  666 + self.teacher_aprove.write_excel(row=case["id"] + 1, column=7, value="通过")
  667 + # 将创建使用的数据写入到excel表格中
  668 + self.teacher_aprove.write_excel(row=case["id"] + 1, column=9, value=case["data"])
  669 + HandleLog.log.info("用例{},执行通过".format(case["title"]))
@@ -79,7 +79,7 @@ class RandomIdentification(object): @@ -79,7 +79,7 @@ class RandomIdentification(object):
79 def ran(self): 79 def ran(self):
80 # 随机生成年月日 80 # 随机生成年月日
81 aaa = radar.random_date("1980", "2022") 81 aaa = radar.random_date("1980", "2022")
82 - yea = aaa.year # 生成年 82 + yea = aaa.year # 生成年
83 # yea = random.randint(1933, int(time.strftime("%Y"))) # 生成年 83 # yea = random.randint(1933, int(time.strftime("%Y"))) # 生成年
84 # 生成月 84 # 生成月
85 mon = random.randint(1, 12) 85 mon = random.randint(1, 12)
@@ -24,7 +24,7 @@ def runner_test(suite): @@ -24,7 +24,7 @@ def runner_test(suite):
24 ) 24 )
25 # runner.run() 25 # runner.run()
26 # 执行失败重新运行机制 26 # 执行失败重新运行机制
27 - runner.rerun_run(count=3, interval=0.2) 27 + runner.rerun_run(count=2, interval=0.2)
28 """ 28 """
29 发送钉钉 29 发送钉钉
30 """ 30 """
@@ -36,9 +36,9 @@ def runner_test(suite): @@ -36,9 +36,9 @@ def runner_test(suite):
36 # isatall=False, # 是否@所有人,默认为False,设为True则会@所有人 36 # isatall=False, # 是否@所有人,默认为False,设为True则会@所有人
37 # except_info=True # 是否发送未通过用例的详细信息,默认为False 37 # except_info=True # 是否发送未通过用例的详细信息,默认为False
38 # ) 38 # )
39 - """  
40 - 发送邮件  
41 - """ 39 + # """
  40 + # 发送邮件
  41 + # """
42 # runner.send_email(host="smtp.qq.com", 42 # runner.send_email(host="smtp.qq.com",
43 # port=465, 43 # port=465,
44 # user="shishut@foxmail.com", 44 # user="shishut@foxmail.com",
@@ -45,7 +45,8 @@ class StudentLoginToken: @@ -45,7 +45,8 @@ class StudentLoginToken:
45 "way": conf.get("student_user_data", "way"), 45 "way": conf.get("student_user_data", "way"),
46 "phone": conf.get("student_user_data", "phone"), 46 "phone": conf.get("student_user_data", "phone"),
47 "code": conf.get("student_user_data", "code"), 47 "code": conf.get("student_user_data", "code"),
48 - "type": conf.get("student_user_data", "type") 48 + "type": conf.get("student_user_data", "type"),
  49 + "schoolId": conf.get("student_user_data", "schoolId")
49 } 50 }
50 response = requests.request(url=login_url, method="post", json=params, headers=headers) 51 response = requests.request(url=login_url, method="post", json=params, headers=headers)
51 res = response.json() 52 res = response.json()
@@ -98,5 +99,6 @@ class HrLoginToken: @@ -98,5 +99,6 @@ class HrLoginToken:
98 99
99 100
100 if __name__ == '__main__': 101 if __name__ == '__main__':
101 - HrLoginToken.login_token() 102 + a = StudentLoginToken.login_token()
  103 + print(a)
102 # HrLoginToken.login_token() 104 # HrLoginToken.login_token()
注册登录 后发表评论