提交 48f6adfd076f6a28dcb8f72e230a82aea56c90a3

作者 Shishutong
1 个父辈 9b12b66a

1.项目维护

1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <project version="4">
3 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 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 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 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 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 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 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 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 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 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 31 </list>
22 32 <option name="SHOW_DIALOG" value="false" />
23 33 <option name="HIGHLIGHT_CONFLICTS" value="true" />
... ... @@ -68,19 +78,19 @@
68 78 <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
69 79 <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
70 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 82 <property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
73 83 </component>
74 84 <component name="RecentsManager">
75 85 <key name="CopyFile.RECENT_KEYS">
  86 + <recent name="$PROJECT_DIR$/data/Internship_preparation" />
76 87 <recent name="$PROJECT_DIR$/data/Internship_manage" />
77 88 <recent name="$PROJECT_DIR$/data/student_practice" />
78   - <recent name="$PROJECT_DIR$/data/Internship_preparation" />
79 89 <recent name="$PROJECT_DIR$/data/teaching_affairs" />
80 90 <recent name="$PROJECT_DIR$/tools" />
81 91 </key>
82 92 </component>
83   - <component name="RunManager" selected="Python tests.Unittests in test_06_internship_manage.py">
  93 + <component name="RunManager" selected="Python.run">
84 94 <configuration name="aaa" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
85 95 <module name="yxly2" />
86 96 <option name="INTERPRETER_OPTIONS" value="" />
... ... @@ -186,11 +196,11 @@
186 196 </list>
187 197 <recent_temporary>
188 198 <list>
189   - <item itemvalue="Python tests.Unittests in test_06_internship_manage.py" />
190 199 <item itemvalue="Python.run" />
191   - <item itemvalue="Python.aaa" />
192 200 <item itemvalue="Python.handle_token" />
  201 + <item itemvalue="Python tests.Unittests in test_06_internship_manage.py" />
193 202 <item itemvalue="Python tests.Unittests in test_04_Internship_preparation.py" />
  203 + <item itemvalue="Python.aaa" />
194 204 </list>
195 205 </recent_temporary>
196 206 </component>
... ... @@ -239,7 +249,44 @@
239 249 <workItem from="1675923047370" duration="1840000" />
240 250 <workItem from="1675993944948" duration="19838000" />
241 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 290 </task>
244 291 <task id="LOCAL-00001" summary="1.0.0&#10;首次提交">
245 292 <created>1671544396986</created>
... ... @@ -395,7 +442,14 @@
395 442 <option name="project" value="LOCAL" />
396 443 <updated>1675679274029</updated>
397 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 453 <servers />
400 454 </component>
401 455 <component name="TypeScriptGeneratedFilesManager">
... ... @@ -446,7 +500,8 @@
446 500 <MESSAGE value="版本:1.0.11&#10;1.新增学校审核用例逻辑判断" />
447 501 <MESSAGE value="版本:1.0.12&#10;1.优化hr登陆问题" />
448 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 505 </component>
451 506 <component name="XDebuggerManager">
452 507 <breakpoint-manager>
... ... @@ -503,17 +558,17 @@
503 558 </line-breakpoint>
504 559 <line-breakpoint suspend="THREAD" type="python-line">
505 560 <url>file://$PROJECT_DIR$/testcase/test_03_teaching_affairs.py</url>
506   - <line>291</line>
  561 + <line>294</line>
507 562 <option name="timeStamp" value="35" />
508 563 </line-breakpoint>
509 564 <line-breakpoint suspend="THREAD" type="python-line">
510 565 <url>file://$PROJECT_DIR$/testcase/test_03_teaching_affairs.py</url>
511   - <line>319</line>
  566 + <line>322</line>
512 567 <option name="timeStamp" value="37" />
513 568 </line-breakpoint>
514 569 <line-breakpoint suspend="THREAD" type="python-line">
515 570 <url>file://$PROJECT_DIR$/testcase/test_03_teaching_affairs.py</url>
516   - <line>363</line>
  571 + <line>366</line>
517 572 <option name="timeStamp" value="38" />
518 573 </line-breakpoint>
519 574 <line-breakpoint suspend="THREAD" type="python-line">
... ... @@ -562,23 +617,13 @@
562 617 <option name="timeStamp" value="78" />
563 618 </line-breakpoint>
564 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 620 <url>file://$PROJECT_DIR$/testcase/test_05_student_practice.py</url>
576   - <line>109</line>
  621 + <line>110</line>
577 622 <option name="timeStamp" value="98" />
578 623 </line-breakpoint>
579 624 <line-breakpoint suspend="THREAD" type="python-line">
580 625 <url>file://$PROJECT_DIR$/testcase/test_05_student_practice.py</url>
581   - <line>101</line>
  626 + <line>102</line>
582 627 <option name="timeStamp" value="99" />
583 628 </line-breakpoint>
584 629 <line-breakpoint suspend="THREAD" type="python-line">
... ... @@ -588,27 +633,27 @@
588 633 </line-breakpoint>
589 634 <line-breakpoint suspend="THREAD" type="python-line">
590 635 <url>file://$PROJECT_DIR$/run.py</url>
591   - <line>56</line>
  636 + <line>60</line>
592 637 <option name="timeStamp" value="101" />
593 638 </line-breakpoint>
594 639 <line-breakpoint suspend="THREAD" type="python-line">
595 640 <url>file://$PROJECT_DIR$/run.py</url>
596   - <line>52</line>
  641 + <line>56</line>
597 642 <option name="timeStamp" value="102" />
598 643 </line-breakpoint>
599 644 <line-breakpoint suspend="THREAD" type="python-line">
600 645 <url>file://$PROJECT_DIR$/run.py</url>
601   - <line>50</line>
  646 + <line>54</line>
602 647 <option name="timeStamp" value="103" />
603 648 </line-breakpoint>
604 649 <line-breakpoint suspend="THREAD" type="python-line">
605 650 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
606   - <line>51</line>
  651 + <line>52</line>
607 652 <option name="timeStamp" value="106" />
608 653 </line-breakpoint>
609 654 <line-breakpoint suspend="THREAD" type="python-line">
610 655 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
611   - <line>83</line>
  656 + <line>84</line>
612 657 <option name="timeStamp" value="111" />
613 658 </line-breakpoint>
614 659 <line-breakpoint suspend="THREAD" type="python-line">
... ... @@ -618,7 +663,7 @@
618 663 </line-breakpoint>
619 664 <line-breakpoint suspend="THREAD" type="python-line">
620 665 <url>file://$PROJECT_DIR$/tools/handle_token.py</url>
621   - <line>49</line>
  666 + <line>50</line>
622 667 <option name="timeStamp" value="116" />
623 668 </line-breakpoint>
624 669 <line-breakpoint suspend="THREAD" type="python-line">
... ... @@ -628,27 +673,27 @@
628 673 </line-breakpoint>
629 674 <line-breakpoint suspend="THREAD" type="python-line">
630 675 <url>file://$PROJECT_DIR$/tools/handle_token.py</url>
631   - <line>85</line>
  676 + <line>86</line>
632 677 <option name="timeStamp" value="122" />
633 678 </line-breakpoint>
634 679 <line-breakpoint suspend="THREAD" type="python-line">
635 680 <url>file://$PROJECT_DIR$/tools/handle_token.py</url>
636   - <line>92</line>
  681 + <line>93</line>
637 682 <option name="timeStamp" value="123" />
638 683 </line-breakpoint>
639 684 <line-breakpoint suspend="THREAD" type="python-line">
640 685 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
641   - <line>205</line>
  686 + <line>208</line>
642 687 <option name="timeStamp" value="124" />
643 688 </line-breakpoint>
644 689 <line-breakpoint suspend="THREAD" type="python-line">
645 690 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
646   - <line>208</line>
  691 + <line>211</line>
647 692 <option name="timeStamp" value="125" />
648 693 </line-breakpoint>
649 694 <line-breakpoint suspend="THREAD" type="python-line">
650 695 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
651   - <line>50</line>
  696 + <line>51</line>
652 697 <option name="timeStamp" value="126" />
653 698 </line-breakpoint>
654 699 <line-breakpoint suspend="THREAD" type="python-line">
... ... @@ -658,12 +703,12 @@
658 703 </line-breakpoint>
659 704 <line-breakpoint suspend="THREAD" type="python-line">
660 705 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
661   - <line>153</line>
  706 + <line>156</line>
662 707 <option name="timeStamp" value="129" />
663 708 </line-breakpoint>
664 709 <line-breakpoint suspend="THREAD" type="python-line">
665 710 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
666   - <line>210</line>
  711 + <line>213</line>
667 712 <option name="timeStamp" value="130" />
668 713 </line-breakpoint>
669 714 <line-breakpoint suspend="THREAD" type="python-line">
... ... @@ -673,22 +718,12 @@
673 718 </line-breakpoint>
674 719 <line-breakpoint suspend="THREAD" type="python-line">
675 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 721 <line>35</line>
687 722 <option name="timeStamp" value="140" />
688 723 </line-breakpoint>
689 724 <line-breakpoint suspend="THREAD" type="python-line">
690 725 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
691   - <line>249</line>
  726 + <line>253</line>
692 727 <option name="timeStamp" value="142" />
693 728 </line-breakpoint>
694 729 <line-breakpoint suspend="THREAD" type="python-line">
... ... @@ -698,38 +733,113 @@
698 733 </line-breakpoint>
699 734 <line-breakpoint suspend="THREAD" type="python-line">
700 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 738 </line-breakpoint>
704 739 <line-breakpoint suspend="THREAD" type="python-line">
705 740 <url>file://$PROJECT_DIR$/testcase/test_06_internship_manage.py</url>
706 741 <line>275</line>
707   - <option name="timeStamp" value="149" />
  742 + <option name="timeStamp" value="150" />
708 743 </line-breakpoint>
709 744 <line-breakpoint suspend="THREAD" type="python-line">
710 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 753 </line-breakpoint>
714 754 <line-breakpoint suspend="THREAD" type="python-line">
715 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 791 <line>93</line>
717   - <option name="timeStamp" value="151" />
  792 + <option name="timeStamp" value="177" />
718 793 </line-breakpoint>
719 794 <line-breakpoint suspend="THREAD" type="python-line">
720 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 798 </line-breakpoint>
724 799 <line-breakpoint suspend="THREAD" type="python-line">
725 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 803 </line-breakpoint>
729 804 <line-breakpoint suspend="THREAD" type="python-line">
730 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 843 </line-breakpoint>
734 844 </breakpoints>
735 845 <default-breakpoints>
... ... @@ -740,19 +850,24 @@
740 850 </breakpoint>
741 851 </default-breakpoints>
742 852 </breakpoint-manager>
  853 + <watches-manager>
  854 + <configuration name="tests">
  855 + <watch expression="select_daily_log_excel" />
  856 + </configuration>
  857 + </watches-manager>
743 858 </component>
744 859 <component name="com.intellij.coverage.CoverageDataManagerImpl">
745 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 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 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 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 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 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 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 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 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 873 </component>
... ...
... ... @@ -43,6 +43,7 @@ phone = 17301249973
43 43 code = 8888
44 44 type = student
45 45 way = code
  46 +schoolId = 1519958566130257922
46 47 ;============================================================================================
47 48 ;hr用户数据
48 49 ;============================================================================================
... ... @@ -55,6 +56,9 @@ password = a123456
55 56 [hr]
56 57 ;岗位id
57 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 82 collect = DEBUG
79 83 ;输出到控制台等级
80 84 console = CRITICAL
  85 +;console = ERROR
81 86 ;输出到文件根据时间轮转等级
82 87 file = DEBUG
83 88 ;文件轮转时长单位
... ...
此 diff 太大无法显示。
此 diff 太大无法显示。
... ... @@ -20,10 +20,9 @@ from testcase.test_04_Internship_preparation import Test01addInternshipPlan, Tes
20 20 # 学生查看实习、学生报名、
21 21 from testcase.test_05_student_practice import Test01SelectAllPractice, Test02StudentApply
22 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 32 load = unittest.TestLoader()
34 33 # ---用例放到加载器
35 34 suite_all.addTest(load.discover(TestCase_Path))
  35 +
36 36 """
37   -执行单独模块用例
38   -"""
  37 +# 执行单独模块用例
  38 +# """
39 39 a1 = unittest.TestLoader().loadTestsFromTestCase(TestLogin)
40 40 a2 = unittest.TestLoader().loadTestsFromTestCase(Test01Department)
41 41 a3 = unittest.TestLoader().loadTestsFromTestCase(Test02Specialty)
42 42 a4 = unittest.TestLoader().loadTestsFromTestCase(Test03Year)
43 43 a5 = unittest.TestLoader().loadTestsFromTestCase(Test02Class)
44 44 a6 = unittest.TestLoader().loadTestsFromTestCase(Test04Student)
  45 +bbbbbb = unittest.TestLoader().loadTestsFromTestCase(Test02SchoolAudit)
  46 +cccc = unittest.TestLoader().loadTestsFromTestCase(Test01addInternshipPlan)
45 47 suite = unittest.TestSuite([a1, a2, a3, a4, a5, a6])
  48 +suite_a = unittest.TestSuite([cccc])
46 49
47 50 runner_test(suite_all) # 执行
  51 +# runner_test(suite_a) # 执行
48 52
49 53 # input_case = input("请输入需要执行的用例:")
50 54 # try:
... ...
... ... @@ -242,6 +242,8 @@ class Test03Course(unittest.TestCase):
242 242 new_time = time.strftime("%Y%m%d_%H:%M:%S")
243 243 # 随机班级名称
244 244 self.course_name = "py自动化课程" + new_time
  245 + # 随机课程代码
  246 + self.course_code = new_time
245 247
246 248 @data(*add_course_case)
247 249 def test_add_course_info(self, case):
... ... @@ -256,7 +258,8 @@ class Test03Course(unittest.TestCase):
256 258 case["data"] = case["data"].replace("#professionalId#", str(self.professionalId))
257 259 if "#termIds#" in case["data"]:
258 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 263 data = json.loads(case["data"])
261 264 expected = json.loads(case["expected"])
262 265 # 调用接口
... ...
... ... @@ -108,8 +108,8 @@ class Test01addInternshipPlan(unittest.TestCase):
108 108 case["data"] = case["data"].replace("#courseId#", str(self.courseId)) # 课程
109 109 if "#departmentId#" in case["data"]:
110 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 113 if "#classInfoId#" in case["data"]:
114 114 case["data"] = case["data"].replace("#classInfoId#", str(self.classId)) # 班级id
115 115 if "#teacherIds#" in case["data"]:
... ... @@ -314,7 +314,7 @@ class Test04publishInternshipProject(unittest.TestCase):
314 314 cls.token = LoginToken.login_token()
315 315
316 316 def setUp(self):
317   - # ---获取计划id
  317 + # ---获取项目id
318 318 select_project_excel = Excel(os.path.join(Internship_path, "test_05_internship_project.xlsx"),
319 319 "select_internship_project")
320 320 read_project_excel = select_project_excel.read_excel_location("C2")
... ... @@ -324,7 +324,7 @@ class Test04publishInternshipProject(unittest.TestCase):
324 324 self.projectId = jsonpath(project_json, "$..id")[0] # 获取待发布项目id
325 325
326 326 # ====================================================================
327   - # 发布计划
  327 + # 发布项目
328 328 # ====================================================================
329 329 @data(*publish_project_case)
330 330 def test_publish_plan(self, case):
... ... @@ -362,6 +362,3 @@ class Test04publishInternshipProject(unittest.TestCase):
362 362 self.publish_project.write_excel(row=case["id"] + 1, column=9, value=case["data"])
363 363 HandleLog.log.info("用例{},执行通过".format(case["title"]))
364 364
365   -
366   -if __name__ == '__main__':
367   - Test03addInternshipProject
\ No newline at end of file
... ...
1 1 # -*- coding: utf-8 -*-
2 2 # ======================================
3 3 # @Software: PyCharm
4   -# @Author : Shitou ✊
  4 +# @Author : Shitou ✊
5 5 # @Time : 2023/1/9 16:32
6 6 # @FileName: test_05_student_practice.py
7 7 # ======================================
... ... @@ -97,7 +97,8 @@ class Test02StudentApply(unittest.TestCase):
97 97 def test01student_apply(self, case):
98 98 # 准备数据
99 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 102 data = json.loads(case["data"])
102 103 expected = json.loads(case["expected"])
103 104 if "{id}" in case["url"]:
... ...
... ... @@ -10,6 +10,7 @@
10 10 """
11 11 import json
12 12 import os
  13 +import time
13 14 import unittest
14 15
15 16 import requests
... ... @@ -27,7 +28,7 @@ from tools.handle_token import LoginToken, HrLoginToken, StudentLoginToken
27 28 # ==================实习管理菜单相关用例==================
28 29
29 30 # ====================================================================
30   -# 报名审核-待审核列表查看
  31 +# 报名审核-待审核列表查看--学校
31 32 # ====================================================================
32 33 @ddt
33 34 class Test01SelectApplyAuditList(unittest.TestCase):
... ... @@ -97,7 +98,6 @@ class Test02SchoolAudit(unittest.TestCase):
97 98 def test01audit(self, case):
98 99 if "#formIds#" in case["data"]:
99 100 case["data"] = case["data"].replace("#formIds#", str(self.applyId)) # 待审核id
100   -
101 101 # 准备数据
102 102 data = json.loads(case["data"])
103 103 expected = json.loads(case["expected"])
... ... @@ -127,6 +127,9 @@ class Test02SchoolAudit(unittest.TestCase):
127 127 HandleLog.log.info("用例{},执行通过".format(case["title"]))
128 128
129 129
  130 +"""
  131 +需求改动,无需hr进行审核2023/03/13
  132 +
130 133 # ====================================================================
131 134 # 报名审核-hr端-待审核列表查看(实习申请列表)
132 135 # ====================================================================
... ... @@ -226,6 +229,7 @@ class Test04HrAudit(unittest.TestCase):
226 229 # 将创建使用的数据写入到excel表格中
227 230 self.hr_audit.write_excel(row=case["id"] + 1, column=9, value=case["data"])
228 231 HandleLog.log.info("用例{},执行通过".format(case["title"]))
  232 +"""
229 233
230 234
231 235 # ====================================================================
... ... @@ -234,7 +238,7 @@ class Test04HrAudit(unittest.TestCase):
234 238 @ddt
235 239 class Test05StudentIntenship(unittest.TestCase):
236 240 student_start_internship = Excel(os.path.join(Internship_manage, "test_07_apply_audit.xlsx"),
237   - "student_start_internship")
  241 + "student_start_internshipp")
238 242 student_start_internship_case = student_start_internship.read_excel() # 学生填写开始时间
239 243
240 244 # 登陆前置
... ... @@ -286,6 +290,380 @@ class Test05StudentIntenship(unittest.TestCase):
286 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 79 def ran(self):
80 80 # 随机生成年月日
81 81 aaa = radar.random_date("1980", "2022")
82   - yea = aaa.year # 生成年
  82 + yea = aaa.year # 生成年
83 83 # yea = random.randint(1933, int(time.strftime("%Y"))) # 生成年
84 84 # 生成月
85 85 mon = random.randint(1, 12)
... ...
... ... @@ -24,7 +24,7 @@ def runner_test(suite):
24 24 )
25 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 36 # isatall=False, # 是否@所有人,默认为False,设为True则会@所有人
37 37 # except_info=True # 是否发送未通过用例的详细信息,默认为False
38 38 # )
39   - """
40   - 发送邮件
41   - """
  39 + # """
  40 + # 发送邮件
  41 + # """
42 42 # runner.send_email(host="smtp.qq.com",
43 43 # port=465,
44 44 # user="shishut@foxmail.com",
... ...
... ... @@ -45,7 +45,8 @@ class StudentLoginToken:
45 45 "way": conf.get("student_user_data", "way"),
46 46 "phone": conf.get("student_user_data", "phone"),
47 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 51 response = requests.request(url=login_url, method="post", json=params, headers=headers)
51 52 res = response.json()
... ... @@ -98,5 +99,6 @@ class HrLoginToken:
98 99
99 100
100 101 if __name__ == '__main__':
101   - HrLoginToken.login_token()
  102 + a = StudentLoginToken.login_token()
  103 + print(a)
102 104 # HrLoginToken.login_token()
... ...
注册登录 后发表评论