Commit 1eb4258c8e590436fce646e937fa7997954ef7cc

Authored by biqiao
1 parent 5c055c6c22
Exists in master

fix DB connection bug

.idea/workspace.xml
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="33187cb8-da74-4b13-8a55-31c4cae60a20" name="Default" comment=""> 4 <list default="true" id="33187cb8-da74-4b13-8a55-31c4cae60a20" name="Default" comment="">
5 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> 5 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
6 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/data_fixture/create_testdata.py" afterPath="$PROJECT_DIR$/data_fixture/create_testdata.py" />
6 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/data_fixture/mysql_db.py" afterPath="$PROJECT_DIR$/data_fixture/mysql_db.py" /> 7 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/data_fixture/mysql_db.py" afterPath="$PROJECT_DIR$/data_fixture/mysql_db.py" />
7 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/report/test_report.html" afterPath="$PROJECT_DIR$/report/test_report.html" /> 8 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/report/test_report.html" afterPath="$PROJECT_DIR$/report/test_report.html" />
9 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/run_test.py" afterPath="$PROJECT_DIR$/run_test.py" />
10 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test_cases/app_record_statistic.py" afterPath="$PROJECT_DIR$/test_cases/app_record_statistic.py" />
11 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test_cases/parent_space.py" afterPath="$PROJECT_DIR$/test_cases/parent_space.py" />
12 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test_cases/personal_info.py" afterPath="$PROJECT_DIR$/test_cases/personal_info.py" />
13 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test_cases/press.py" afterPath="$PROJECT_DIR$/test_cases/press.py" />
14 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test_cases/register.py" afterPath="$PROJECT_DIR$/test_cases/register.py" />
15 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test_cases/sub_account.py" afterPath="$PROJECT_DIR$/test_cases/sub_account.py" />
16 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test_cases/subject_sync.py" afterPath="$PROJECT_DIR$/test_cases/subject_sync.py" />
8 </list> 17 </list>
9 <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> 18 <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
10 <option name="TRACKING_ENABLED" value="true" /> 19 <option name="TRACKING_ENABLED" value="true" />
11 <option name="SHOW_DIALOG" value="false" /> 20 <option name="SHOW_DIALOG" value="false" />
12 <option name="HIGHLIGHT_CONFLICTS" value="true" /> 21 <option name="HIGHLIGHT_CONFLICTS" value="true" />
13 <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> 22 <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
14 <option name="LAST_RESOLUTION" value="IGNORE" /> 23 <option name="LAST_RESOLUTION" value="IGNORE" />
15 </component> 24 </component>
16 <component name="CoverageDataManager"> 25 <component name="CoverageDataManager">
17 <SUITE FILE_PATH="coverage/apiTest$debugggggg.coverage" NAME="debugggggg Coverage Results" MODIFIED="1514886595342" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/test_cases" /> 26 <SUITE FILE_PATH="coverage/apiTest$debugggggg.coverage" NAME="debugggggg Coverage Results" MODIFIED="1514886595342" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/test_cases" />
18 <SUITE FILE_PATH="coverage/apiTest$run_test.coverage" NAME="run_test Coverage Results" MODIFIED="1515151494257" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" /> 27 <SUITE FILE_PATH="coverage/apiTest$run_test.coverage" NAME="run_test Coverage Results" MODIFIED="1515999141100" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
19 </component> 28 </component>
20 <component name="DatabaseView"> 29 <component name="DatabaseView">
21 <option name="SHOW_INTERMEDIATE" value="true" /> 30 <option name="SHOW_INTERMEDIATE" value="true" />
22 <option name="GROUP_SCHEMA" value="true" /> 31 <option name="GROUP_SCHEMA" value="true" />
23 <option name="GROUP_CONTENTS" value="false" /> 32 <option name="GROUP_CONTENTS" value="false" />
24 <option name="SORT_POSITIONED" value="false" /> 33 <option name="SORT_POSITIONED" value="false" />
25 <option name="SHOW_TABLE_DETAILS" value="true" /> 34 <option name="SHOW_TABLE_DETAILS" value="true" />
26 <option name="SHOW_EMPTY_GROUPS" value="false" /> 35 <option name="SHOW_EMPTY_GROUPS" value="false" />
27 <option name="AUTO_SCROLL_FROM_SOURCE" value="false" /> 36 <option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
28 <expand /> 37 <expand />
29 <select /> 38 <select />
30 </component> 39 </component>
31 <component name="FileEditorManager"> 40 <component name="FileEditorManager">
32 <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> 41 <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
33 <file leaf-file-name="mysql_db.py" pinned="false" current-in-tab="true"> 42 <file leaf-file-name="mysql_db.py" pinned="false" current-in-tab="false">
34 <entry file="file://$PROJECT_DIR$/data_fixture/mysql_db.py"> 43 <entry file="file://$PROJECT_DIR$/data_fixture/mysql_db.py">
35 <provider selected="true" editor-type-id="text-editor"> 44 <provider selected="true" editor-type-id="text-editor">
36 <state relative-caret-position="358"> 45 <state relative-caret-position="388">
37 <caret line="38" column="48" lean-forward="true" selection-start-line="38" selection-start-column="48" selection-end-line="38" selection-end-column="48" /> 46 <caret line="44" column="77" lean-forward="true" selection-start-line="44" selection-start-column="52" selection-end-line="44" selection-end-column="77" />
38 <folding> 47 <folding>
39 <element signature="e#47#66#0" expanded="true" /> 48 <element signature="e#47#66#0" expanded="true" />
40 <marker date="1515742817000" expanded="true" signature="1735:1755" ph="select * fro... " /> 49 <marker date="1516000191000" expanded="true" signature="1736:1756" ph="select * fro... " />
41 <marker date="1515742817000" expanded="true" signature="1735:1757" ph="select * fro... missing_value" /> 50 <marker date="1516000191000" expanded="true" signature="1736:1758" ph="select * fro... missing_value" />
42 <marker date="1515742817000" expanded="true" signature="1735:1781" ph="select count... missing_value" /> 51 <marker date="1516000191000" expanded="true" signature="1736:1782" ph="select count... missing_value" />
43 <marker date="1515742817000" expanded="true" signature="1735:1782" ph="select count... missing_value" /> 52 <marker date="1516000191000" expanded="true" signature="1736:1783" ph="select count... missing_value" />
44 </folding> 53 </folding>
45 </state> 54 </state>
46 </provider> 55 </provider>
47 </entry> 56 </entry>
48 </file> 57 </file>
49 <file leaf-file-name="config_data.py" pinned="false" current-in-tab="false"> 58 <file leaf-file-name="config_data.py" pinned="false" current-in-tab="false">
50 <entry file="file://$PROJECT_DIR$/data_fixture/config_data.py"> 59 <entry file="file://$PROJECT_DIR$/data_fixture/config_data.py">
51 <provider selected="true" editor-type-id="text-editor"> 60 <provider selected="true" editor-type-id="text-editor">
52 <state relative-caret-position="68"> 61 <state relative-caret-position="225">
53 <caret line="4" column="22" lean-forward="false" selection-start-line="4" selection-start-column="9" selection-end-line="4" selection-end-column="22" /> 62 <caret line="40" column="30" lean-forward="true" selection-start-line="40" selection-start-column="30" selection-end-line="40" selection-end-column="30" />
54 <folding /> 63 <folding />
55 </state> 64 </state>
56 </provider> 65 </provider>
57 </entry> 66 </entry>
58 </file> 67 </file>
59 <file leaf-file-name="register.py" pinned="false" current-in-tab="false"> 68 <file leaf-file-name="run_test.py" pinned="false" current-in-tab="true">
60 <entry file="file://$PROJECT_DIR$/test_cases/register.py"> 69 <entry file="file://$PROJECT_DIR$/run_test.py">
61 <provider selected="true" editor-type-id="text-editor">
62 <state relative-caret-position="459">
63 <caret line="27" column="55" lean-forward="true" selection-start-line="27" selection-start-column="55" selection-end-line="27" selection-end-column="55" />
64 <folding>
65 <element signature="e#47#62#0" expanded="true" />
66 </folding>
67 </state>
68 </provider>
69 </entry>
70 </file>
71 <file leaf-file-name="app_record_statistic.py" pinned="false" current-in-tab="false">
72 <entry file="file://$PROJECT_DIR$/test_cases/app_record_statistic.py">
73 <provider selected="true" editor-type-id="text-editor"> 70 <provider selected="true" editor-type-id="text-editor">
74 <state relative-caret-position="306"> 71 <state relative-caret-position="493">
75 <caret line="18" column="53" lean-forward="true" selection-start-line="18" selection-start-column="53" selection-end-line="18" selection-end-column="53" /> 72 <caret line="29" column="25" lean-forward="true" selection-start-line="29" selection-start-column="25" selection-end-line="29" selection-end-column="25" />
76 <folding> 73 <folding>
77 <element signature="e#47#62#0" expanded="true" /> 74 <element signature="e#47#62#0" expanded="true" />
78 </folding> 75 </folding>
79 </state> 76 </state>
80 </provider> 77 </provider>
81 </entry> 78 </entry>
82 </file> 79 </file>
83 <file leaf-file-name="run_test.py" pinned="false" current-in-tab="false"> 80 <file leaf-file-name="create_testdata.py" pinned="false" current-in-tab="false">
84 <entry file="file://$PROJECT_DIR$/run_test.py"> 81 <entry file="file://$PROJECT_DIR$/data_fixture/create_testdata.py">
85 <provider selected="true" editor-type-id="text-editor"> 82 <provider selected="true" editor-type-id="text-editor">
86 <state relative-caret-position="408"> 83 <state relative-caret-position="382">
87 <caret line="24" column="37" lean-forward="false" selection-start-line="24" selection-start-column="37" selection-end-line="24" selection-end-column="37" /> 84 <caret line="32" column="21" lean-forward="true" selection-start-line="32" selection-start-column="21" selection-end-line="32" selection-end-column="21" />
88 <folding> 85 <folding>
89 <element signature="e#47#62#0" expanded="true" /> 86 <element signature="e#47#83#0" expanded="true" />
87 <marker date="1516001168000" expanded="true" signature="1887:1954" ph="select * fro... ozing_customermachine" />
88 <marker date="1516001168000" expanded="true" signature="1887:1955" ph="select * fro... ozing_customermachine" />
89 <marker date="1516001168000" expanded="true" signature="1887:1957" ph="select * fro... ozing_customermachine" />
90 <marker date="1516001168000" expanded="true" signature="1887:1958" ph="select * fro... ozing_customermachine" />
91 <marker date="1516001168000" expanded="true" signature="1887:1984" ph="select * fro... ozing_customermachine" />
92 <marker date="1516001168000" expanded="true" signature="2015:2074" ph="SELECT * FRO... ozing_machine" />
93 <marker date="1516001168000" expanded="true" signature="2015:2075" ph="SELECT * FRO... ozing_machine" />
94 <marker date="1516001168000" expanded="true" signature="2015:2078" ph="SELECT * FRO... ozing_machine" />
95 <marker date="1516001168000" expanded="true" signature="2015:2079" ph="SELECT * FRO... ozing_machine" />
96 <marker date="1516001168000" expanded="true" signature="2015:2105" ph="SELECT * FRO... ozing_machine" />
97 <marker date="1516001168000" expanded="true" signature="2218:2680" ph="insert into acornuser.ozing_customermachine... " />
98 <marker date="1516001168000" expanded="true" signature="3394:3463" ph="SELECT * FRO... ozing_samplemachine" />
99 <marker date="1516001168000" expanded="true" signature="3515:3579" ph="SELECT * FRO... ozing_machine" />
100 <marker date="1516001168000" expanded="true" signature="5201:5272" ph="select * fro... ozing_customermachine" />
101 <marker date="1516001168000" expanded="true" signature="5617:5681" ph="SELECT * FRO... ozing_machine" />
102 <marker date="1516001168000" expanded="true" signature="5742:5822" ph="SELECT * FRO... ozing_machine" />
103 <marker date="1516001168000" expanded="true" signature="6688:6759" ph="select * fro... ozing_customermachine" />
104 <marker date="1516001168000" expanded="true" signature="7044:7107" ph="select * fro... ozing_machine" />
105 <marker date="1516001168000" expanded="true" signature="8181:8246" ph="update acorn... " />
106 <marker date="1516001168000" expanded="true" signature="8181:8270" ph="update acorn... " />
107 <marker date="1516001168000" expanded="true" signature="8394:8475" ph="select * fro... child_user" />
108 <marker date="1516001168000" expanded="true" signature="8541:8622" ph="select * fro... child_user" />
109 <marker date="1516001168000" expanded="true" signature="8541:8669" ph="select * fro... child_user" />
110 <marker date="1516001168000" expanded="true" signature="8541:8671" ph="select * fro... child_user" />
111 <marker date="1516001168000" expanded="true" signature="9559:9644" ph="select * fro... acorn_user_status" />
112 <marker date="1516001168000" expanded="true" signature="9786:9886" ph="select * fro... acorn_user_status" />
113 <marker date="1516001168000" expanded="true" signature="10624:10724" ph="select * fro... acorn_user_status" />
114 <marker date="1516001168000" expanded="true" signature="11768:11826" ph="select * fro... acorn_user_extra" />
115 <marker date="1516001168000" expanded="true" signature="11863:11949" ph="select * fro... acorn_user_extra" />
116 <marker date="1516001168000" expanded="true" signature="12380:12449" ph="select * fro... subAccount_user_extra" />
117 <marker date="1516001168000" expanded="true" signature="12380:12450" ph="select * fro... subAccount_user_extra" />
118 <marker date="1516001168000" expanded="true" signature="12380:12454" ph="select * fro... subAccount_user_extra" />
119 <marker date="1516001168000" expanded="true" signature="12489:12558" ph="select * fro... subAccount_user_extra" />
120 <marker date="1516001168000" expanded="true" signature="12489:12588" ph="select * fro... subAccount_user_extra" />
121 <marker date="1516001168000" expanded="true" signature="12489:12604" ph="select * fro... subAccount_user_extra" />
122 <marker date="1516001168000" expanded="true" signature="13814:13914" ph="select * fro... ozing_student" />
123 <marker date="1516001168000" expanded="true" signature="14016:14102" ph="update acorn... " />
124 <marker date="1516001168000" expanded="true" signature="14016:14104" ph="update acorn... " />
125 <marker date="1516001168000" expanded="true" signature="14192:14300" ph="select * fro... ozing_student" />
126 <marker date="1516001168000" expanded="true" signature="16432:16472" ph="select max(i... acorn_user" />
127 <marker date="1516001168000" expanded="true" signature="16432:16474" ph="select max(i... acorn_user" />
128 <marker date="1516001168000" expanded="true" signature="17187:17262" ph="select passw... parents_space_pass" />
129 <marker date="1516001168000" expanded="true" signature="18218:18270" ph="update analy... " />
130 <marker date="1516001168000" expanded="true" signature="18218:18287" ph="update analy... " />
131 <marker date="1516001168000" expanded="true" signature="18218:18315" ph="update analy... " />
132 <marker date="1516001168000" expanded="true" signature="18218:18316" ph="update analy... " />
90 </folding> 133 </folding>
91 </state> 134 </state>
92 </provider> 135 </provider>
93 </entry> 136 </entry>
94 </file> 137 </file>
95 <file leaf-file-name="debugggggg.py" pinned="false" current-in-tab="false">
96 <entry file="file://$PROJECT_DIR$/test_cases/debugggggg.py">
97 <provider selected="true" editor-type-id="text-editor">
98 <state relative-caret-position="34">
99 <caret line="2" column="0" lean-forward="false" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
100 <folding />
101 </state>
102 </provider>
103 </entry>
104 </file>
105 <file leaf-file-name="subject_sync.py" pinned="false" current-in-tab="false"> 138 <file leaf-file-name="subject_sync.py" pinned="false" current-in-tab="false">
106 <entry file="file://$PROJECT_DIR$/test_cases/subject_sync.py"> 139 <entry file="file://$PROJECT_DIR$/test_cases/subject_sync.py">
107 <provider selected="true" editor-type-id="text-editor"> 140 <provider selected="true" editor-type-id="text-editor">
108 <state relative-caret-position="204"> 141 <state relative-caret-position="1921">
109 <caret line="12" column="0" lean-forward="true" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" /> 142 <caret line="118" column="54" lean-forward="true" selection-start-line="118" selection-start-column="54" selection-end-line="118" selection-end-column="54" />
110 <folding> 143 <folding />
111 <element signature="e#47#62#0" expanded="true" />
112 </folding>
113 </state>
114 </provider>
115 </entry>
116 </file>
117 <file leaf-file-name="create_testdata.py" pinned="false" current-in-tab="false">
118 <entry file="file://$PROJECT_DIR$/data_fixture/create_testdata.py">
119 <provider selected="true" editor-type-id="text-editor">
120 <state relative-caret-position="666">
121 <caret line="356" column="79" lean-forward="false" selection-start-line="356" selection-start-column="67" selection-end-line="356" selection-end-column="79" />
122 <folding>
123 <element signature="e#47#83#0" expanded="true" />
124 <marker date="1515219431000" expanded="true" signature="1421:1488" ph="select * fro... ozing_customermachine" />
125 <marker date="1515219431000" expanded="true" signature="1421:1489" ph="select * fro... ozing_customermachine" />
126 <marker date="1515219431000" expanded="true" signature="1421:1491" ph="select * fro... ozing_customermachine" />
127 <marker date="1515219431000" expanded="true" signature="1421:1492" ph="select * fro... ozing_customermachine" />
128 <marker date="1515219431000" expanded="true" signature="1421:1518" ph="select * fro... ozing_customermachine" />
129 <marker date="1515219431000" expanded="true" signature="1549:1608" ph="SELECT * FRO... ozing_machine" />
130 <marker date="1515219431000" expanded="true" signature="1549:1609" ph="SELECT * FRO... ozing_machine" />
131 <marker date="1515219431000" expanded="true" signature="1549:1612" ph="SELECT * FRO... ozing_machine" />
132 <marker date="1515219431000" expanded="true" signature="1549:1613" ph="SELECT * FRO... ozing_machine" />
133 <marker date="1515219431000" expanded="true" signature="1549:1639" ph="SELECT * FRO... ozing_machine" />
134 <marker date="1515219431000" expanded="true" signature="1752:2214" ph="insert into acornuser.ozing_customermachine... " />
135 <marker date="1515219431000" expanded="true" signature="2928:2997" ph="SELECT * FRO... ozing_samplemachine" />
136 <marker date="1515219431000" expanded="true" signature="3049:3113" ph="SELECT * FRO... ozing_machine" />
137 <marker date="1515219431000" expanded="true" signature="4735:4806" ph="select * fro... ozing_customermachine" />
138 <marker date="1515219431000" expanded="true" signature="5151:5215" ph="SELECT * FRO... ozing_machine" />
139 <marker date="1515219431000" expanded="true" signature="5276:5356" ph="SELECT * FRO... ozing_machine" />
140 <marker date="1515219431000" expanded="true" signature="6222:6293" ph="select * fro... ozing_customermachine" />
141 <marker date="1515219431000" expanded="true" signature="6578:6641" ph="select * fro... ozing_machine" />
142 <marker date="1515219431000" expanded="true" signature="7715:7780" ph="update acorn... " />
143 <marker date="1515219431000" expanded="true" signature="7715:7804" ph="update acorn... " />
144 <marker date="1515219431000" expanded="true" signature="7928:8009" ph="select * fro... child_user" />
145 <marker date="1515219431000" expanded="true" signature="8075:8156" ph="select * fro... child_user" />
146 <marker date="1515219431000" expanded="true" signature="8075:8203" ph="select * fro... child_user" />
147 <marker date="1515219431000" expanded="true" signature="8075:8205" ph="select * fro... child_user" />
148 <marker date="1515219431000" expanded="true" signature="9093:9178" ph="select * fro... acorn_user_status" />
149 <marker date="1515219431000" expanded="true" signature="9320:9420" ph="select * fro... acorn_user_status" />
150 <marker date="1515219431000" expanded="true" signature="10158:10258" ph="select * fro... acorn_user_status" />
151 <marker date="1515219431000" expanded="true" signature="11302:11360" ph="select * fro... acorn_user_extra" />
152 <marker date="1515219431000" expanded="true" signature="11397:11483" ph="select * fro... acorn_user_extra" />
153 <marker date="1515219431000" expanded="true" signature="11914:11983" ph="select * fro... subAccount_user_extra" />
154 <marker date="1515219431000" expanded="true" signature="11914:11984" ph="select * fro... subAccount_user_extra" />
155 <marker date="1515219431000" expanded="true" signature="11914:11988" ph="select * fro... subAccount_user_extra" />
156 <marker date="1515219431000" expanded="true" signature="12023:12092" ph="select * fro... subAccount_user_extra" />
157 <marker date="1515219431000" expanded="true" signature="12023:12122" ph="select * fro... subAccount_user_extra" />
158 <marker date="1515219431000" expanded="true" signature="12023:12138" ph="select * fro... subAccount_user_extra" />
159 <marker date="1515219431000" expanded="true" signature="13348:13448" ph="select * fro... ozing_student" />
160 <marker date="1515219431000" expanded="true" signature="13550:13636" ph="update acorn... " />
161 <marker date="1515219431000" expanded="true" signature="13550:13638" ph="update acorn... " />
162 <marker date="1515219431000" expanded="true" signature="13726:13834" ph="select * fro... ozing_student" />
163 <marker date="1515219431000" expanded="true" signature="15966:16006" ph="select max(i... acorn_user" />
164 <marker date="1515219431000" expanded="true" signature="15966:16008" ph="select max(i... acorn_user" />
165 <marker date="1515219431000" expanded="true" signature="16721:16796" ph="select passw... parents_space_pass" />
166 <marker date="1515219431000" expanded="true" signature="17752:17804" ph="update analy... " />
167 <marker date="1515219431000" expanded="true" signature="17752:17821" ph="update analy... " />
168 <marker date="1515219431000" expanded="true" signature="17752:17849" ph="update analy... " />
169 <marker date="1515219431000" expanded="true" signature="17752:17850" ph="update analy... " />
170 </folding>
171 </state> 144 </state>
172 </provider> 145 </provider>
173 </entry> 146 </entry>
174 </file> 147 </file>
175 </leaf> 148 </leaf>
176 </component> 149 </component>
177 <component name="FileTemplateManagerImpl"> 150 <component name="FileTemplateManagerImpl">
178 <option name="RECENT_TEMPLATES"> 151 <option name="RECENT_TEMPLATES">
179 <list> 152 <list>
180 <option value="Python Script" /> 153 <option value="Python Script" />
181 </list> 154 </list>
182 </option> 155 </option>
183 </component> 156 </component>
184 <component name="FindInProjectRecents"> 157 <component name="FindInProjectRecents">
185 <findStrings> 158 <findStrings>
186 <find>_generate_report</find>
187 <find>Data</find>
188 <find>test_unbindCard_success</find>
189 <find>login</find> 159 <find>login</find>
190 <find>DEVICE_NUMBER_EDIT_PHONE</find> 160 <find>DEVICE_NUMBER_EDIT_PHONE</find>
191 <find>pre_SetUpElecCard</find> 161 <find>pre_SetUpElecCard</find>
192 <find>authCode</find> 162 <find>authCode</find>
193 <find>subaccountswitch001</find> 163 <find>subaccountswitch001</find>
194 <find>pre_AddSubAccount</find> 164 <find>pre_AddSubAccount</find>
195 <find>parent_id</find> 165 <find>parent_id</find>
196 <find>USER_ID</find> 166 <find>USER_ID</find>
197 <find>USER_PHONE_EDIT</find> 167 <find>USER_PHONE_EDIT</find>
198 <find>RegisterExtrainfoCheck</find> 168 <find>RegisterExtrainfoCheck</find>
199 <find>png</find> 169 <find>png</find>
200 <find>checkSignatureExists</find> 170 <find>checkSignatureExists</find>
201 <find>SUB_ACC_GET_ID_1</find> 171 <find>SUB_ACC_GET_ID_1</find>
202 <find>SUB_ACC_GET_ID_</find> 172 <find>SUB_ACC_GET_ID_</find>
203 <find>SUB_ACC_DEL_ID_2</find> 173 <find>SUB_ACC_DEL_ID_2</find>
204 <find>SUB_ACC_SWITCH_ID_1</find> 174 <find>SUB_ACC_SWITCH_ID_1</find>
205 <find>SUB_ACC</find> 175 <find>SUB_ACC</find>
206 <find>pre_subAccount</find> 176 <find>pre_subAccount</find>
207 <find>pre_elecCard</find> 177 <find>pre_elecCard</find>
208 <find>保卡</find> 178 <find>保卡</find>
209 <find>'time_spend'</find> 179 <find>'time_spend'</find>
210 <find>select_</find> 180 <find>select_</find>
211 <find>Data.DEVICE_NUMBER_CUS_BIND</find> 181 <find>Data.DEVICE_NUMBER_CUS_BIND</find>
212 <find>SUB_ACC_</find> 182 <find>SUB_ACC_</find>
213 <find>test_getAppRecordOneday_success</find> 183 <find>test_getAppRecordOneday_success</find>
214 <find>print</find> 184 <find>print</find>
185 <find>SetUpElecCard</find>
186 <find>test_ConsolidationExercise_success</find>
215 <find>get_parentSpace_password</find> 187 <find>get_parentSpace_password</find>
188 <find>db_test</find>
216 </findStrings> 189 </findStrings>
217 <replaceStrings> 190 <replaceStrings>
218 <replace>app_pid</replace> 191 <replace>app_pid</replace>
219 <replace>'app_pid'</replace> 192 <replace>'app_pid'</replace>
220 <replace>'time_spent'</replace> 193 <replace>'time_spent'</replace>
221 <replace>user_id</replace> 194 <replace>user_id</replace>
222 <replace>device_number</replace> 195 <replace>device_number</replace>
223 <replace>PARENT_ID</replace> 196 <replace>PARENT_ID</replace>
224 </replaceStrings> 197 </replaceStrings>
225 <dirStrings> 198 <dirStrings>
226 <dir>$PROJECT_DIR$</dir> 199 <dir>$PROJECT_DIR$</dir>
227 </dirStrings> 200 </dirStrings>
228 </component> 201 </component>
229 <component name="Git.Settings"> 202 <component name="Git.Settings">
230 <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> 203 <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
231 </component> 204 </component>
232 <component name="IdeDocumentHistory"> 205 <component name="IdeDocumentHistory">
233 <option name="CHANGED_PATHS"> 206 <option name="CHANGED_PATHS">
234 <list> 207 <list>
235 <option value="$PROJECT_DIR$/tests/elecCard.py" /> 208 <option value="$PROJECT_DIR$/tests/elecCard.py" />
236 <option value="$PROJECT_DIR$/db_fixture/mysql_db.py" /> 209 <option value="$PROJECT_DIR$/db_fixture/mysql_db.py" />
237 <option value="$PROJECT_DIR$/tests/configParse'.py" /> 210 <option value="$PROJECT_DIR$/tests/configParse'.py" />
238 <option value="$PROJECT_DIR$/tests/configParse.py" /> 211 <option value="$PROJECT_DIR$/tests/configParse.py" />
239 <option value="$PROJECT_DIR$/tests/personalCenter/elecCardFlow_test.py" /> 212 <option value="$PROJECT_DIR$/tests/personalCenter/elecCardFlow_test.py" />
240 <option value="$PROJECT_DIR$/tests/personalCenter/elecCard_setUp.py" /> 213 <option value="$PROJECT_DIR$/tests/personalCenter/elecCard_setUp.py" />
241 <option value="$PROJECT_DIR$/tests/personalCenter/elecCard/elecCard_setUp.py" /> 214 <option value="$PROJECT_DIR$/tests/personalCenter/elecCard/elecCard_setUp.py" />
242 <option value="$PROJECT_DIR$/tests/personalCenter/elecCard/elecCard_check.py" /> 215 <option value="$PROJECT_DIR$/tests/personalCenter/elecCard/elecCard_check.py" />
243 <option value="$PROJECT_DIR$/tests/test_suites/test_elecCard.py" /> 216 <option value="$PROJECT_DIR$/tests/test_suites/test_elecCard.py" />
244 <option value="$PROJECT_DIR$/tests/test_cases/__init__.py" /> 217 <option value="$PROJECT_DIR$/tests/test_cases/__init__.py" />
245 <option value="$PROJECT_DIR$/test_suites/test_elecCard.py" /> 218 <option value="$PROJECT_DIR$/test_suites/test_elecCard.py" />
246 <option value="$PROJECT_DIR$/data_fixture/UthCode.py" /> 219 <option value="$PROJECT_DIR$/data_fixture/UthCode.py" />
247 <option value="/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/HtmlTestRunner/runner.py" /> 220 <option value="/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/HtmlTestRunner/runner.py" />
248 <option value="$PROJECT_DIR$/config.ini" /> 221 <option value="$PROJECT_DIR$/config.ini" />
249 <option value="$PROJECT_DIR$/HTMLTestRunner.py" /> 222 <option value="$PROJECT_DIR$/HTMLTestRunner.py" />
250 <option value="$PROJECT_DIR$/test_cases/elecCard_check.py" /> 223 <option value="$PROJECT_DIR$/test_cases/elecCard_check.py" />
251 <option value="$PROJECT_DIR$/data_fixture/authCode.py" /> 224 <option value="$PROJECT_DIR$/data_fixture/authCode.py" />
252 <option value="$PROJECT_DIR$/test_cases/elecCard_setUp.py" /> 225 <option value="$PROJECT_DIR$/test_cases/elecCard_setUp.py" />
253 <option value="$PROJECT_DIR$/data_fixture/test_verify.py" /> 226 <option value="$PROJECT_DIR$/data_fixture/test_verify.py" />
254 <option value="$PROJECT_DIR$/test_cases/region_grade_school.py" /> 227 <option value="$PROJECT_DIR$/test_cases/region_grade_school.py" />
255 <option value="$PROJECT_DIR$/test_cases/eleccard_setUp.py" /> 228 <option value="$PROJECT_DIR$/test_cases/eleccard_setUp.py" />
256 <option value="$PROJECT_DIR$/test_cases/press.py" />
257 <option value="$PROJECT_DIR$/test_cases/sub_account.py" />
258 <option value="$PROJECT_DIR$/test_cases/personal_info.py" />
259 <option value="$PROJECT_DIR$/data_fixture/config_data.py" /> 229 <option value="$PROJECT_DIR$/data_fixture/config_data.py" />
260 <option value="$PROJECT_DIR$/test_cases/parent_space.py" />
261 <option value="$PROJECT_DIR$/test_cases/xueketongbu.py" /> 230 <option value="$PROJECT_DIR$/test_cases/xueketongbu.py" />
262 <option value="$PROJECT_DIR$/test_cases/app_record_statistic.py" />
263 <option value="$PROJECT_DIR$/data_fixture/create_testdata.py" />
264 <option value="$PROJECT_DIR$/test_cases/debugggggg.py" /> 231 <option value="$PROJECT_DIR$/test_cases/debugggggg.py" />
265 <option value="$PROJECT_DIR$/test_cases/__init__.py" /> 232 <option value="$PROJECT_DIR$/test_cases/__init__.py" />
266 <option value="$PROJECT_DIR$/data_fixture/__init__.py" /> 233 <option value="$PROJECT_DIR$/data_fixture/__init__.py" />
234 <option value="$PROJECT_DIR$/data_fixture/mysql_db.py" />
235 <option value="$PROJECT_DIR$/test_cases/register.py" />
236 <option value="$PROJECT_DIR$/test_cases/parent_space.py" />
237 <option value="$PROJECT_DIR$/test_cases/press.py" />
238 <option value="$PROJECT_DIR$/test_cases/sub_account.py" />
239 <option value="$PROJECT_DIR$/test_cases/app_record_statistic.py" />
240 <option value="$PROJECT_DIR$/test_cases/personal_info.py" />
241 <option value="$PROJECT_DIR$/data_fixture/create_testdata.py" />
267 <option value="$PROJECT_DIR$/test_cases/subject_sync.py" /> 242 <option value="$PROJECT_DIR$/test_cases/subject_sync.py" />
268 <option value="$PROJECT_DIR$/run_test.py" /> 243 <option value="$PROJECT_DIR$/run_test.py" />
269 <option value="$PROJECT_DIR$/test_cases/register.py" />
270 <option value="$PROJECT_DIR$/data_fixture/mysql_db.py" />
271 </list> 244 </list>
272 </option> 245 </option>
273 </component> 246 </component>
274 <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" /> 247 <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
275 <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" /> 248 <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
276 <component name="JsGulpfileManager"> 249 <component name="JsGulpfileManager">
277 <detection-done>true</detection-done> 250 <detection-done>true</detection-done>
278 <sorting>DEFINITION_ORDER</sorting> 251 <sorting>DEFINITION_ORDER</sorting>
279 </component> 252 </component>
280 <component name="ProjectFrameBounds" extendedState="6"> 253 <component name="ProjectFrameBounds">
281 <option name="x" value="23" /> 254 <option name="y" value="23" />
282 <option name="y" value="85" />
283 <option name="width" value="1920" /> 255 <option name="width" value="1920" />
284 <option name="height" value="977" /> 256 <option name="height" value="977" />
285 </component> 257 </component>
286 <component name="ProjectLevelVcsManager" settingsEditedManually="true" /> 258 <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
287 <component name="ProjectView"> 259 <component name="ProjectView">
288 <navigator currentView="ProjectPane" proportions="" version="1"> 260 <navigator currentView="ProjectPane" proportions="" version="1">
289 <flattenPackages /> 261 <flattenPackages />
290 <showMembers /> 262 <showMembers />
291 <showModules /> 263 <showModules />
292 <showLibraryContents /> 264 <showLibraryContents />
293 <hideEmptyPackages /> 265 <hideEmptyPackages />
294 <abbreviatePackageNames /> 266 <abbreviatePackageNames />
295 <autoscrollToSource /> 267 <autoscrollToSource />
296 <autoscrollFromSource /> 268 <autoscrollFromSource />
297 <sortByType /> 269 <sortByType />
298 <manualOrder /> 270 <manualOrder />
299 <foldersAlwaysOnTop value="true" /> 271 <foldersAlwaysOnTop value="true" />
300 </navigator> 272 </navigator>
301 <panes> 273 <panes>
302 <pane id="Scope" /> 274 <pane id="Scratches" />
303 <pane id="ProjectPane"> 275 <pane id="ProjectPane">
304 <subPane> 276 <subPane>
305 <expand> 277 <expand>
306 <path> 278 <path>
307 <item name="apiTest" type="b2602c69:ProjectViewProjectNode" /> 279 <item name="apiTest" type="b2602c69:ProjectViewProjectNode" />
308 <item name="apiTest" type="462c0819:PsiDirectoryNode" /> 280 <item name="apiTest" type="462c0819:PsiDirectoryNode" />
309 </path> 281 </path>
310 <path> 282 <path>
311 <item name="apiTest" type="b2602c69:ProjectViewProjectNode" /> 283 <item name="apiTest" type="b2602c69:ProjectViewProjectNode" />
312 <item name="apiTest" type="462c0819:PsiDirectoryNode" /> 284 <item name="apiTest" type="462c0819:PsiDirectoryNode" />
313 <item name="data_fixture" type="462c0819:PsiDirectoryNode" /> 285 <item name="data_fixture" type="462c0819:PsiDirectoryNode" />
314 </path> 286 </path>
315 <path> 287 <path>
316 <item name="apiTest" type="b2602c69:ProjectViewProjectNode" /> 288 <item name="apiTest" type="b2602c69:ProjectViewProjectNode" />
317 <item name="apiTest" type="462c0819:PsiDirectoryNode" /> 289 <item name="apiTest" type="462c0819:PsiDirectoryNode" />
318 <item name="report" type="462c0819:PsiDirectoryNode" /> 290 <item name="report" type="462c0819:PsiDirectoryNode" />
319 </path> 291 </path>
320 <path> 292 <path>
321 <item name="apiTest" type="b2602c69:ProjectViewProjectNode" /> 293 <item name="apiTest" type="b2602c69:ProjectViewProjectNode" />
322 <item name="apiTest" type="462c0819:PsiDirectoryNode" /> 294 <item name="apiTest" type="462c0819:PsiDirectoryNode" />
323 <item name="test_cases" type="462c0819:PsiDirectoryNode" /> 295 <item name="test_cases" type="462c0819:PsiDirectoryNode" />
324 </path> 296 </path>
325 <path> 297 <path>
326 <item name="apiTest" type="b2602c69:ProjectViewProjectNode" /> 298 <item name="apiTest" type="b2602c69:ProjectViewProjectNode" />
327 <item name="apiTest" type="462c0819:PsiDirectoryNode" /> 299 <item name="apiTest" type="462c0819:PsiDirectoryNode" />
328 <item name="test_suites" type="462c0819:PsiDirectoryNode" /> 300 <item name="test_suites" type="462c0819:PsiDirectoryNode" />
329 </path> 301 </path>
330 </expand> 302 </expand>
331 <select /> 303 <select />
332 </subPane> 304 </subPane>
333 </pane> 305 </pane>
334 <pane id="Scratches" /> 306 <pane id="Scope" />
335 </panes> 307 </panes>
336 </component> 308 </component>
337 <component name="PropertiesComponent"> 309 <component name="PropertiesComponent">
338 <property name="WebServerToolWindowFactoryState" value="false" /> 310 <property name="WebServerToolWindowFactoryState" value="false" />
339 <property name="settings.editor.selected.configurable" value="editor.preferences.folding" /> 311 <property name="settings.editor.selected.configurable" value="editor.preferences.folding" />
340 </component> 312 </component>
341 <component name="RecentsManager"> 313 <component name="RecentsManager">
342 <key name="MoveFile.RECENT_KEYS"> 314 <key name="MoveFile.RECENT_KEYS">
343 <recent name="$PROJECT_DIR$/test_cases" /> 315 <recent name="$PROJECT_DIR$/test_cases" />
344 <recent name="$PROJECT_DIR$" /> 316 <recent name="$PROJECT_DIR$" />
345 <recent name="$PROJECT_DIR$/tests" /> 317 <recent name="$PROJECT_DIR$/tests" />
346 <recent name="$PROJECT_DIR$/tests/test_cases" /> 318 <recent name="$PROJECT_DIR$/tests/test_cases" />
347 <recent name="$PROJECT_DIR$/tests/test_cases/personalCenter" /> 319 <recent name="$PROJECT_DIR$/tests/test_cases/personalCenter" />
348 </key> 320 </key>
349 <key name="CopyFile.RECENT_KEYS"> 321 <key name="CopyFile.RECENT_KEYS">
350 <recent name="$PROJECT_DIR$/test_cases" /> 322 <recent name="$PROJECT_DIR$/test_cases" />
351 <recent name="$PROJECT_DIR$" /> 323 <recent name="$PROJECT_DIR$" />
352 </key> 324 </key>
353 </component> 325 </component>
354 <component name="RunDashboard"> 326 <component name="RunDashboard">
355 <option name="ruleStates"> 327 <option name="ruleStates">
356 <list> 328 <list>
357 <RuleState> 329 <RuleState>
358 <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> 330 <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
359 </RuleState> 331 </RuleState>
360 <RuleState> 332 <RuleState>
361 <option name="name" value="StatusDashboardGroupingRule" /> 333 <option name="name" value="StatusDashboardGroupingRule" />
362 </RuleState> 334 </RuleState>
363 </list> 335 </list>
364 </option> 336 </option>
365 </component> 337 </component>
366 <component name="RunManager" selected="Python.run_test"> 338 <component name="RunManager" selected="Python.run_test">
367 <configuration name="debugggggg" type="PythonConfigurationType" factoryName="Python" temporary="true"> 339 <configuration name="debugggggg" type="PythonConfigurationType" factoryName="Python" temporary="true">
368 <option name="INTERPRETER_OPTIONS" value="" /> 340 <option name="INTERPRETER_OPTIONS" value="" />
369 <option name="PARENT_ENVS" value="true" /> 341 <option name="PARENT_ENVS" value="true" />
370 <envs> 342 <envs>
371 <env name="PYTHONUNBUFFERED" value="1" /> 343 <env name="PYTHONUNBUFFERED" value="1" />
372 </envs> 344 </envs>
373 <option name="SDK_HOME" value="" /> 345 <option name="SDK_HOME" value="" />
374 <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/test_cases" /> 346 <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/test_cases" />
375 <option name="IS_MODULE_SDK" value="true" /> 347 <option name="IS_MODULE_SDK" value="true" />
376 <option name="ADD_CONTENT_ROOTS" value="true" /> 348 <option name="ADD_CONTENT_ROOTS" value="true" />
377 <option name="ADD_SOURCE_ROOTS" value="true" /> 349 <option name="ADD_SOURCE_ROOTS" value="true" />
378 <module name="apiTest" /> 350 <module name="apiTest" />
379 <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> 351 <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
380 <option name="SCRIPT_NAME" value="$PROJECT_DIR$/test_cases/debugggggg.py" /> 352 <option name="SCRIPT_NAME" value="$PROJECT_DIR$/test_cases/debugggggg.py" />
381 <option name="PARAMETERS" value="" /> 353 <option name="PARAMETERS" value="" />
382 <option name="SHOW_COMMAND_LINE" value="false" /> 354 <option name="SHOW_COMMAND_LINE" value="false" />
383 <option name="EMULATE_TERMINAL" value="false" /> 355 <option name="EMULATE_TERMINAL" value="false" />
384 </configuration> 356 </configuration>
385 <configuration name="run_test" type="PythonConfigurationType" factoryName="Python" temporary="true"> 357 <configuration name="run_test" type="PythonConfigurationType" factoryName="Python" temporary="true">
386 <option name="INTERPRETER_OPTIONS" value="" /> 358 <option name="INTERPRETER_OPTIONS" value="" />
387 <option name="PARENT_ENVS" value="true" /> 359 <option name="PARENT_ENVS" value="true" />
388 <envs> 360 <envs>
389 <env name="PYTHONUNBUFFERED" value="1" /> 361 <env name="PYTHONUNBUFFERED" value="1" />
390 </envs> 362 </envs>
391 <option name="SDK_HOME" value="" /> 363 <option name="SDK_HOME" value="" />
392 <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> 364 <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
393 <option name="IS_MODULE_SDK" value="true" /> 365 <option name="IS_MODULE_SDK" value="true" />
394 <option name="ADD_CONTENT_ROOTS" value="true" /> 366 <option name="ADD_CONTENT_ROOTS" value="true" />
395 <option name="ADD_SOURCE_ROOTS" value="true" /> 367 <option name="ADD_SOURCE_ROOTS" value="true" />
396 <module name="apiTest" /> 368 <module name="apiTest" />
397 <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> 369 <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
398 <option name="SCRIPT_NAME" value="$PROJECT_DIR$/run_test.py" /> 370 <option name="SCRIPT_NAME" value="$PROJECT_DIR$/run_test.py" />
399 <option name="PARAMETERS" value="" /> 371 <option name="PARAMETERS" value="" />
400 <option name="SHOW_COMMAND_LINE" value="false" /> 372 <option name="SHOW_COMMAND_LINE" value="false" />
401 <option name="EMULATE_TERMINAL" value="false" /> 373 <option name="EMULATE_TERMINAL" value="false" />
402 </configuration> 374 </configuration>
403 <list size="2"> 375 <list size="2">
404 <item index="0" class="java.lang.String" itemvalue="Python.run_test" /> 376 <item index="0" class="java.lang.String" itemvalue="Python.run_test" />
405 <item index="1" class="java.lang.String" itemvalue="Python.debugggggg" /> 377 <item index="1" class="java.lang.String" itemvalue="Python.debugggggg" />
406 </list> 378 </list>
407 <recent_temporary> 379 <recent_temporary>
408 <list size="2"> 380 <list size="2">
409 <item index="0" class="java.lang.String" itemvalue="Python.run_test" /> 381 <item index="0" class="java.lang.String" itemvalue="Python.run_test" />
410 <item index="1" class="java.lang.String" itemvalue="Python.debugggggg" /> 382 <item index="1" class="java.lang.String" itemvalue="Python.debugggggg" />
411 </list> 383 </list>
412 </recent_temporary> 384 </recent_temporary>
413 </component> 385 </component>
414 <component name="ShelveChangesManager" show_recycled="false"> 386 <component name="ShelveChangesManager" show_recycled="false">
415 <option name="remove_strategy" value="false" /> 387 <option name="remove_strategy" value="false" />
416 </component> 388 </component>
417 <component name="TaskManager"> 389 <component name="TaskManager">
418 <task active="true" id="Default" summary="Default task"> 390 <task active="true" id="Default" summary="Default task">
419 <changelist id="33187cb8-da74-4b13-8a55-31c4cae60a20" name="Default" comment="" /> 391 <changelist id="33187cb8-da74-4b13-8a55-31c4cae60a20" name="Default" comment="" />
420 <created>1512799492607</created> 392 <created>1512799492607</created>
421 <option name="number" value="Default" /> 393 <option name="number" value="Default" />
422 <option name="presentableId" value="Default" /> 394 <option name="presentableId" value="Default" />
423 <updated>1512799492607</updated> 395 <updated>1512799492607</updated>
424 </task> 396 </task>
425 <servers /> 397 <servers />
426 </component> 398 </component>
427 <component name="TodoView"> 399 <component name="TodoView">
428 <todo-panel id="selected-file"> 400 <todo-panel id="selected-file">
429 <is-autoscroll-to-source value="true" /> 401 <is-autoscroll-to-source value="true" />
430 </todo-panel> 402 </todo-panel>
431 <todo-panel id="all"> 403 <todo-panel id="all">
432 <are-packages-shown value="true" /> 404 <are-packages-shown value="true" />
433 <is-autoscroll-to-source value="true" /> 405 <is-autoscroll-to-source value="true" />
434 </todo-panel> 406 </todo-panel>
435 </component> 407 </component>
436 <component name="ToolWindowManager"> 408 <component name="ToolWindowManager">
437 <frame x="-9" y="23" width="1920" height="977" extended-state="6" /> 409 <frame x="0" y="23" width="1920" height="977" extended-state="6" />
438 <editor active="true" /> 410 <editor active="true" />
439 <layout> 411 <layout>
440 <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32993197" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> 412 <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32993197" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
441 <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" /> 413 <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
442 <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> 414 <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
443 <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.24829932" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> 415 <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.15419501" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
444 <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2857143" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> 416 <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.2857143" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
445 <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32993197" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> 417 <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32993197" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
446 <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17891374" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> 418 <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.18051118" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
447 <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32960597" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> 419 <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32960597" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
448 <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> 420 <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
449 <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> 421 <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
450 <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> 422 <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
451 <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4580499" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> 423 <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.24829932" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
452 <window_info id="Data View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.2284345" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> 424 <window_info id="Data View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.2284345" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
453 <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> 425 <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
454 <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> 426 <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
455 <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> 427 <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
456 <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> 428 <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
457 <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> 429 <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
458 <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> 430 <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
459 </layout> 431 </layout>
460 <layout-to-restore> 432 <layout-to-restore>
461 <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32993197" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> 433 <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32993197" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
462 <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> 434 <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
463 <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> 435 <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
464 <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> 436 <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
465 <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" /> 437 <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
466 <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> 438 <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
467 <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> 439 <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
468 <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32993197" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> 440 <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32993197" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
469 <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.22108844" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> 441 <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.22108844" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
470 <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32993197" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" /> 442 <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32993197" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
471 <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17571884" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> 443 <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17571884" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
472 <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> 444 <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
473 <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> 445 <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
474 <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> 446 <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
475 <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> 447 <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
476 <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> 448 <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
477 <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> 449 <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
478 <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.34807256" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> 450 <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.34807256" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
479 <window_info id="Data View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> 451 <window_info id="Data View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
480 </layout-to-restore> 452 </layout-to-restore>
481 </component> 453 </component>
482 <component name="TypeScriptGeneratedFilesManager"> 454 <component name="TypeScriptGeneratedFilesManager">
483 <option name="version" value="1" /> 455 <option name="version" value="1" />
484 </component> 456 </component>
485 <component name="VcsContentAnnotationSettings"> 457 <component name="VcsContentAnnotationSettings">
486 <option name="myLimit" value="2678400000" /> 458 <option name="myLimit" value="2678400000" />
487 </component> 459 </component>
488 <component name="XDebuggerManager"> 460 <component name="XDebuggerManager">
489 <breakpoint-manager> 461 <breakpoint-manager>
490 <breakpoints> 462 <breakpoints>
491 <line-breakpoint enabled="true" suspend="THREAD" type="python-line"> 463 <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
492 <url>file://$PROJECT_DIR$/test_cases/sub_account.py</url> 464 <url>file://$PROJECT_DIR$/test_cases/sub_account.py</url>
493 <line>56</line> 465 <line>55</line>
494 <option name="timeStamp" value="82" /> 466 <option name="timeStamp" value="82" />
495 </line-breakpoint> 467 </line-breakpoint>
496 <line-breakpoint enabled="true" suspend="THREAD" type="python-line"> 468 <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
497 <url>file://$PROJECT_DIR$/test_cases/register.py</url> 469 <url>file://$PROJECT_DIR$/test_cases/register.py</url>
498 <line>18</line> 470 <line>18</line>
499 <option name="timeStamp" value="102" /> 471 <option name="timeStamp" value="102" />
500 </line-breakpoint> 472 </line-breakpoint>
501 <line-breakpoint enabled="true" suspend="THREAD" type="python-line"> 473 <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
502 <url>file://$PROJECT_DIR$/test_cases/personal_info.py</url>
503 <line>253</line>
504 <option name="timeStamp" value="113" />
505 </line-breakpoint>
506 <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
507 <url>file://$PROJECT_DIR$/test_cases/debugggggg.py</url> 474 <url>file://$PROJECT_DIR$/test_cases/debugggggg.py</url>
508 <line>18</line> 475 <line>18</line>
509 <option name="timeStamp" value="140" /> 476 <option name="timeStamp" value="140" />
510 </line-breakpoint> 477 </line-breakpoint>
511 <line-breakpoint enabled="true" suspend="THREAD" type="python-line"> 478 <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
512 <url>file://$PROJECT_DIR$/test_cases/app_record_statistic.py</url> 479 <url>file://$PROJECT_DIR$/test_cases/app_record_statistic.py</url>
513 <line>181</line> 480 <line>180</line>
514 <option name="timeStamp" value="188" /> 481 <option name="timeStamp" value="188" />
515 </line-breakpoint> 482 </line-breakpoint>
483 <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
484 <url>file://$PROJECT_DIR$/test_cases/parent_space.py</url>
485 <line>46</line>
486 <option name="timeStamp" value="189" />
487 </line-breakpoint>
488 <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
489 <url>file://$PROJECT_DIR$/test_cases/register.py</url>
490 <line>3</line>
491 <option name="timeStamp" value="192" />
492 </line-breakpoint>
516 </breakpoints> 493 </breakpoints>
517 <breakpoints-dialog> 494 <breakpoints-dialog>
518 <breakpoints-dialog /> 495 <breakpoints-dialog />
519 </breakpoints-dialog> 496 </breakpoints-dialog>
520 <option name="time" value="189" /> 497 <default-breakpoints>
498 <breakpoint type="python-exception">
499 <properties notifyOnTerminate="true" exception="BaseException">
500 <option name="notifyOnTerminate" value="true" />
501 </properties>
502 </breakpoint>
503 </default-breakpoints>
504 <option name="time" value="193" />
521 </breakpoint-manager> 505 </breakpoint-manager>
522 <watches-manager /> 506 <watches-manager />
523 </component> 507 </component>
524 <component name="editorHistoryManager"> 508 <component name="editorHistoryManager">
525 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/suite.py">
526 <provider selected="true" editor-type-id="text-editor">
527 <state relative-caret-position="1360">
528 <caret line="83" column="0" lean-forward="false" selection-start-line="83" selection-start-column="0" selection-end-line="83" selection-end-column="0" />
529 <folding />
530 </state>
531 </provider>
532 </entry>
533 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py">
534 <provider selected="true" editor-type-id="text-editor">
535 <state relative-caret-position="5627">
536 <caret line="331" column="0" lean-forward="false" selection-start-line="331" selection-start-column="0" selection-end-line="331" selection-end-column="0" />
537 </state>
538 </provider>
539 </entry>
540 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/HtmlTestRunner/runner.py" /> 509 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/HtmlTestRunner/runner.py" />
541 <entry file="file://$PROJECT_DIR$/config.ini" /> 510 <entry file="file://$PROJECT_DIR$/config.ini" />
542 <entry file="file://$PROJECT_DIR$/data_fixture/mysql_db.py"> 511 <entry file="file://$PROJECT_DIR$/data_fixture/mysql_db.py">
543 <provider selected="true" editor-type-id="text-editor"> 512 <provider selected="true" editor-type-id="text-editor">
544 <state relative-caret-position="0"> 513 <state relative-caret-position="0">
545 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="18" selection-end-column="0" /> 514 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="18" selection-end-column="0" />
546 <folding> 515 <folding>
547 <element signature="e#47#66#0" expanded="true" /> 516 <element signature="e#47#66#0" expanded="true" />
548 <marker date="1515742817000" expanded="true" signature="1735:1755" ph="select * fro... " /> 517 <marker date="1516000191000" expanded="true" signature="1736:1756" ph="select * fro... " />
549 <marker date="1515742817000" expanded="true" signature="1735:1757" ph="select * fro... missing_value" /> 518 <marker date="1516000191000" expanded="true" signature="1736:1758" ph="select * fro... missing_value" />
550 <marker date="1515742817000" expanded="true" signature="1735:1781" ph="select count... missing_value" /> 519 <marker date="1516000191000" expanded="true" signature="1736:1782" ph="select count... missing_value" />
551 <marker date="1515742817000" expanded="true" signature="1735:1782" ph="select count... missing_value" /> 520 <marker date="1516000191000" expanded="true" signature="1736:1783" ph="select count... missing_value" />
552 </folding> 521 </folding>
553 </state> 522 </state>
554 </provider> 523 </provider>
555 </entry> 524 </entry>
556 <entry file="file://$PROJECT_DIR$/configParse.py"> 525 <entry file="file://$PROJECT_DIR$/configParse.py">
557 <provider selected="true" editor-type-id="text-editor"> 526 <provider selected="true" editor-type-id="text-editor">
558 <state relative-caret-position="238"> 527 <state relative-caret-position="238">
559 <caret line="16" column="45" lean-forward="false" selection-start-line="16" selection-start-column="45" selection-end-line="16" selection-end-column="45" /> 528 <caret line="16" column="45" lean-forward="false" selection-start-line="16" selection-start-column="45" selection-end-line="16" selection-end-column="45" />
560 </state> 529 </state>
561 </provider> 530 </provider>
562 </entry> 531 </entry>
563 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_setUp.py"> 532 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_setUp.py">
564 <provider selected="true" editor-type-id="text-editor"> 533 <provider selected="true" editor-type-id="text-editor">
565 <state relative-caret-position="748"> 534 <state relative-caret-position="748">
566 <caret line="47" column="0" lean-forward="false" selection-start-line="47" selection-start-column="0" selection-end-line="47" selection-end-column="0" /> 535 <caret line="47" column="0" lean-forward="false" selection-start-line="47" selection-start-column="0" selection-end-line="47" selection-end-column="0" />
567 <folding /> 536 <folding />
568 </state> 537 </state>
569 </provider> 538 </provider>
570 </entry> 539 </entry>
571 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_check.py"> 540 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_check.py">
572 <provider selected="true" editor-type-id="text-editor"> 541 <provider selected="true" editor-type-id="text-editor">
573 <state relative-caret-position="816"> 542 <state relative-caret-position="816">
574 <caret line="51" column="23" lean-forward="false" selection-start-line="51" selection-start-column="23" selection-end-line="51" selection-end-column="23" /> 543 <caret line="51" column="23" lean-forward="false" selection-start-line="51" selection-start-column="23" selection-end-line="51" selection-end-column="23" />
575 <folding />
576 </state> 544 </state>
577 </provider> 545 </provider>
578 </entry> 546 </entry>
579 <entry file="file://$PROJECT_DIR$/config.ini" /> 547 <entry file="file://$PROJECT_DIR$/config.ini" />
580 <entry file="file://$PROJECT_DIR$/data_fixture/mysql_db.py"> 548 <entry file="file://$PROJECT_DIR$/data_fixture/mysql_db.py">
581 <provider selected="true" editor-type-id="text-editor"> 549 <provider selected="true" editor-type-id="text-editor">
582 <state relative-caret-position="0"> 550 <state relative-caret-position="0">
583 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="18" selection-end-column="0" /> 551 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="18" selection-end-column="0" />
584 <folding> 552 <folding>
585 <element signature="e#47#66#0" expanded="true" /> 553 <element signature="e#47#66#0" expanded="true" />
586 <marker date="1515742817000" expanded="true" signature="1735:1755" ph="select * fro... " /> 554 <marker date="1516000191000" expanded="true" signature="1736:1756" ph="select * fro... " />
587 <marker date="1515742817000" expanded="true" signature="1735:1757" ph="select * fro... missing_value" /> 555 <marker date="1516000191000" expanded="true" signature="1736:1758" ph="select * fro... missing_value" />
588 <marker date="1515742817000" expanded="true" signature="1735:1781" ph="select count... missing_value" /> 556 <marker date="1516000191000" expanded="true" signature="1736:1782" ph="select count... missing_value" />
589 <marker date="1515742817000" expanded="true" signature="1735:1782" ph="select count... missing_value" /> 557 <marker date="1516000191000" expanded="true" signature="1736:1783" ph="select count... missing_value" />
590 </folding> 558 </folding>
591 </state> 559 </state>
592 </provider> 560 </provider>
593 </entry> 561 </entry>
594 <entry file="file://$PROJECT_DIR$/configParse.py"> 562 <entry file="file://$PROJECT_DIR$/configParse.py">
595 <provider selected="true" editor-type-id="text-editor"> 563 <provider selected="true" editor-type-id="text-editor">
596 <state relative-caret-position="272"> 564 <state relative-caret-position="272">
597 <caret line="16" column="45" lean-forward="true" selection-start-line="16" selection-start-column="45" selection-end-line="16" selection-end-column="45" /> 565 <caret line="16" column="45" lean-forward="true" selection-start-line="16" selection-start-column="45" selection-end-line="16" selection-end-column="45" />
598 </state> 566 </state>
599 </provider> 567 </provider>
600 </entry> 568 </entry>
601 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_setUp.py"> 569 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_setUp.py">
602 <provider selected="true" editor-type-id="text-editor"> 570 <provider selected="true" editor-type-id="text-editor">
603 <state relative-caret-position="799"> 571 <state relative-caret-position="799">
604 <caret line="47" column="0" lean-forward="true" selection-start-line="47" selection-start-column="0" selection-end-line="47" selection-end-column="0" /> 572 <caret line="47" column="0" lean-forward="true" selection-start-line="47" selection-start-column="0" selection-end-line="47" selection-end-column="0" />
605 <folding /> 573 <folding />
606 </state> 574 </state>
607 </provider> 575 </provider>
608 </entry> 576 </entry>
609 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_check.py"> 577 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_check.py">
610 <provider selected="true" editor-type-id="text-editor"> 578 <provider selected="true" editor-type-id="text-editor">
611 <state relative-caret-position="867"> 579 <state relative-caret-position="867">
612 <caret line="51" column="23" lean-forward="true" selection-start-line="51" selection-start-column="23" selection-end-line="51" selection-end-column="23" /> 580 <caret line="51" column="23" lean-forward="true" selection-start-line="51" selection-start-column="23" selection-end-line="51" selection-end-column="23" />
613 <folding />
614 </state> 581 </state>
615 </provider> 582 </provider>
616 </entry> 583 </entry>
617 <entry file="file://$PROJECT_DIR$/configParse.py"> 584 <entry file="file://$PROJECT_DIR$/configParse.py">
618 <provider selected="true" editor-type-id="text-editor"> 585 <provider selected="true" editor-type-id="text-editor">
619 <state relative-caret-position="0"> 586 <state relative-caret-position="0">
620 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> 587 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
621 </state> 588 </state>
622 </provider> 589 </provider>
623 </entry> 590 </entry>
624 <entry file="file://$PROJECT_DIR$/tests/test_cases/__init__.py" /> 591 <entry file="file://$PROJECT_DIR$/tests/test_cases/__init__.py" />
625 <entry file="file://$PROJECT_DIR$/configParse.py"> 592 <entry file="file://$PROJECT_DIR$/configParse.py">
626 <provider selected="true" editor-type-id="text-editor"> 593 <provider selected="true" editor-type-id="text-editor">
627 <state relative-caret-position="272"> 594 <state relative-caret-position="272">
628 <caret line="16" column="45" lean-forward="false" selection-start-line="16" selection-start-column="45" selection-end-line="16" selection-end-column="45" /> 595 <caret line="16" column="45" lean-forward="false" selection-start-line="16" selection-start-column="45" selection-end-line="16" selection-end-column="45" />
629 </state> 596 </state>
630 </provider> 597 </provider>
631 </entry> 598 </entry>
632 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py"> 599 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py">
633 <provider selected="true" editor-type-id="text-editor"> 600 <provider selected="true" editor-type-id="text-editor">
634 <state relative-caret-position="5627"> 601 <state relative-caret-position="5627">
635 <caret line="331" column="0" lean-forward="false" selection-start-line="331" selection-start-column="0" selection-end-line="331" selection-end-column="0" /> 602 <caret line="331" column="0" lean-forward="false" selection-start-line="331" selection-start-column="0" selection-end-line="331" selection-end-column="0" />
636 </state> 603 </state>
637 </provider> 604 </provider>
638 </entry> 605 </entry>
639 <entry file="file://$PROJECT_DIR$/reports/report/Test_region_grade_school.Getrades_2017-12-13_11-29-12.html" /> 606 <entry file="file://$PROJECT_DIR$/reports/report/Test_region_grade_school.Getrades_2017-12-13_11-29-12.html" />
640 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/HtmlTestRunner/runner.py" /> 607 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/HtmlTestRunner/runner.py" />
641 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py"> 608 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py">
642 <provider selected="true" editor-type-id="text-editor"> 609 <provider selected="true" editor-type-id="text-editor">
643 <state relative-caret-position="372"> 610 <state relative-caret-position="372">
644 <caret line="25" column="0" lean-forward="false" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" /> 611 <caret line="25" column="0" lean-forward="false" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" />
645 </state> 612 </state>
646 </provider> 613 </provider>
647 </entry> 614 </entry>
648 <entry file="file://$PROJECT_DIR$/config.ini" /> 615 <entry file="file://$PROJECT_DIR$/config.ini" />
649 <entry file="file://$PROJECT_DIR$/HTMLTestRunner.py"> 616 <entry file="file://$PROJECT_DIR$/HTMLTestRunner.py">
650 <provider selected="true" editor-type-id="text-editor"> 617 <provider selected="true" editor-type-id="text-editor">
651 <state relative-caret-position="313"> 618 <state relative-caret-position="313">
652 <caret line="188" column="6" lean-forward="true" selection-start-line="185" selection-start-column="4" selection-end-line="296" selection-end-column="3" /> 619 <caret line="188" column="6" lean-forward="true" selection-start-line="185" selection-start-column="4" selection-end-line="296" selection-end-column="3" />
653 <folding> 620 <folding>
654 <element signature="e#8852#10678#0" expanded="false" /> 621 <element signature="e#8852#10678#0" expanded="false" />
655 </folding> 622 </folding>
656 </state> 623 </state>
657 </provider> 624 </provider>
658 </entry> 625 </entry>
659 <entry file="file://$PROJECT_DIR$/HTMLTestRunner_bak.py"> 626 <entry file="file://$PROJECT_DIR$/HTMLTestRunner_bak.py">
660 <provider selected="true" editor-type-id="text-editor"> 627 <provider selected="true" editor-type-id="text-editor">
661 <state relative-caret-position="0"> 628 <state relative-caret-position="0">
662 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> 629 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
663 </state> 630 </state>
664 </provider> 631 </provider>
665 </entry> 632 </entry>
666 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/suite.py">
667 <provider selected="true" editor-type-id="text-editor">
668 <state relative-caret-position="149">
669 <caret line="83" column="0" lean-forward="false" selection-start-line="83" selection-start-column="0" selection-end-line="83" selection-end-column="0" />
670 <folding />
671 </state>
672 </provider>
673 </entry>
674 <entry file="file://$PROJECT_DIR$/test_suites/test_elecCard.py"> 633 <entry file="file://$PROJECT_DIR$/test_suites/test_elecCard.py">
675 <provider selected="true" editor-type-id="text-editor"> 634 <provider selected="true" editor-type-id="text-editor">
676 <state relative-caret-position="0"> 635 <state relative-caret-position="0">
677 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="1" selection-end-column="23" /> 636 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="1" selection-end-column="23" />
678 </state> 637 </state>
679 </provider> 638 </provider>
680 </entry> 639 </entry>
681 <entry file="file://$PROJECT_DIR$/data_fixture/authCode.py" /> 640 <entry file="file://$PROJECT_DIR$/data_fixture/authCode.py" />
682 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_check.py"> 641 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_check.py">
683 <provider selected="true" editor-type-id="text-editor"> 642 <provider selected="true" editor-type-id="text-editor">
684 <state relative-caret-position="136"> 643 <state relative-caret-position="136">
685 <caret line="8" column="44" lean-forward="true" selection-start-line="8" selection-start-column="44" selection-end-line="8" selection-end-column="44" /> 644 <caret line="8" column="44" lean-forward="true" selection-start-line="8" selection-start-column="44" selection-end-line="8" selection-end-column="44" />
686 <folding />
687 </state> 645 </state>
688 </provider> 646 </provider>
689 </entry> 647 </entry>
690 <entry file="file://$PROJECT_DIR$/data_fixture/test_verify.py"> 648 <entry file="file://$PROJECT_DIR$/data_fixture/test_verify.py">
691 <provider selected="true" editor-type-id="text-editor"> 649 <provider selected="true" editor-type-id="text-editor">
692 <state relative-caret-position="187"> 650 <state relative-caret-position="187">
693 <caret line="11" column="0" lean-forward="true" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" /> 651 <caret line="11" column="0" lean-forward="true" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
694 </state> 652 </state>
695 </provider> 653 </provider>
696 </entry> 654 </entry>
697 <entry file="file://$PROJECT_DIR$/test_cases/region_grade_school.py"> 655 <entry file="file://$PROJECT_DIR$/test_cases/region_grade_school.py">
698 <provider selected="true" editor-type-id="text-editor"> 656 <provider selected="true" editor-type-id="text-editor">
699 <state relative-caret-position="340"> 657 <state relative-caret-position="340">
700 <caret line="20" column="81" lean-forward="true" selection-start-line="8" selection-start-column="0" selection-end-line="20" selection-end-column="81" /> 658 <caret line="20" column="81" lean-forward="true" selection-start-line="8" selection-start-column="0" selection-end-line="20" selection-end-column="81" />
701 <folding>
702 <element signature="e#47#62#0" expanded="false" />
703 </folding>
704 </state> 659 </state>
705 </provider> 660 </provider>
706 </entry> 661 </entry>
707 <entry file="file://$PROJECT_DIR$/test_cases/252ED989-0B16-4AB7-81C1-974ABCF6CA11.png" /> 662 <entry file="file://$PROJECT_DIR$/test_cases/252ED989-0B16-4AB7-81C1-974ABCF6CA11.png" />
708 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py"> 663 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py">
709 <provider selected="true" editor-type-id="text-editor"> 664 <provider selected="true" editor-type-id="text-editor">
710 <state relative-caret-position="240"> 665 <state relative-caret-position="240">
711 <caret line="166" column="0" lean-forward="false" selection-start-line="166" selection-start-column="0" selection-end-line="166" selection-end-column="0" /> 666 <caret line="166" column="0" lean-forward="false" selection-start-line="166" selection-start-column="0" selection-end-line="166" selection-end-column="0" />
712 <folding /> 667 <folding />
713 </state> 668 </state>
714 </provider> 669 </provider>
715 </entry> 670 </entry>
716 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_setUp.py"> 671 <entry file="file://$PROJECT_DIR$/report/test_report.html">
717 <provider selected="true" editor-type-id="text-editor"> 672 <provider selected="true" editor-type-id="text-editor">
718 <state relative-caret-position="209"> 673 <state relative-caret-position="0">
719 <caret line="102" column="26" lean-forward="true" selection-start-line="102" selection-start-column="26" selection-end-line="102" selection-end-column="26" /> 674 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
720 <folding />
721 </state> 675 </state>
722 </provider> 676 </provider>
723 </entry> 677 </entry>
724 <entry file="file://$APPLICATION_HOME_DIR$/helpers/pydev/pydevd.py"> 678 <entry file="file://$PROJECT_DIR$/test_cases/debugggggg.py">
725 <provider selected="true" editor-type-id="text-editor"> 679 <provider selected="true" editor-type-id="text-editor">
726 <state relative-caret-position="169"> 680 <state relative-caret-position="34">
727 <caret line="1595" column="0" lean-forward="false" selection-start-line="1595" selection-start-column="0" selection-end-line="1595" selection-end-column="0" /> 681 <caret line="2" column="0" lean-forward="false" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
728 <folding /> 682 <folding />
729 </state> 683 </state>
730 </provider> 684 </provider>
731 </entry> 685 </entry>
732 <entry file="file://$PROJECT_DIR$/test_cases/press.py"> 686 <entry file="file://$PROJECT_DIR$/test_cases/__init__.py" />
687 <entry file="file://$PROJECT_DIR$/data_fixture/__init__.py" />
688 <entry file="file://$PROJECT_DIR$/test_cases/eleccard_setUp.py">
733 <provider selected="true" editor-type-id="text-editor"> 689 <provider selected="true" editor-type-id="text-editor">
734 <state relative-caret-position="0"> 690 <state relative-caret-position="187">
735 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="11" selection-end-column="0" /> 691 <caret line="15" column="23" lean-forward="true" selection-start-line="15" selection-start-column="23" selection-end-line="15" selection-end-column="23" />
736 <folding /> 692 <folding />
737 </state> 693 </state>
738 </provider> 694 </provider>
739 </entry> 695 </entry>
740 <entry file="file://$PROJECT_DIR$/HTMLTestRunner.py"> 696 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py">
741 <provider selected="true" editor-type-id="text-editor"> 697 <provider selected="true" editor-type-id="text-editor">
742 <state relative-caret-position="165"> 698 <state relative-caret-position="150">
743 <caret line="643" column="0" lean-forward="false" selection-start-line="643" selection-start-column="0" selection-end-line="643" selection-end-column="0" /> 699 <caret line="830" column="0" lean-forward="false" selection-start-line="830" selection-start-column="0" selection-end-line="830" selection-end-column="0" />
744 <folding> 700 <folding />
745 <element signature="e#8852#10678#0" expanded="false" />
746 </folding>
747 </state> 701 </state>
748 </provider> 702 </provider>
749 </entry> 703 </entry>
750 <entry file="file://$PROJECT_DIR$/test_cases/personal_info.py"> 704 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/suite.py">
751 <provider selected="true" editor-type-id="text-editor"> 705 <provider selected="true" editor-type-id="text-editor">
752 <state relative-caret-position="415"> 706 <state relative-caret-position="142">
753 <caret line="251" column="26" lean-forward="false" selection-start-line="251" selection-start-column="26" selection-end-line="251" selection-end-column="26" /> 707 <caret line="83" column="0" lean-forward="false" selection-start-line="83" selection-start-column="0" selection-end-line="83" selection-end-column="0" />
754 <folding> 708 <folding />
755 <element signature="e#47#62#0" expanded="true" />
756 </folding>
757 </state> 709 </state>
758 </provider> 710 </provider>
759 </entry> 711 </entry>
760 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py"> 712 <entry file="file://$APPLICATION_HOME_DIR$/helpers/pydev/_pydev_imps/_pydev_execfile.py">
761 <provider selected="true" editor-type-id="text-editor"> 713 <provider selected="true" editor-type-id="text-editor">
762 <state relative-caret-position="176"> 714 <state relative-caret-position="289">
763 <caret line="1334" column="0" lean-forward="false" selection-start-line="1334" selection-start-column="0" selection-end-line="1334" selection-end-column="0" /> 715 <caret line="17" column="0" lean-forward="false" selection-start-line="17" selection-start-column="0" selection-end-line="17" selection-end-column="0" />
764 <folding /> 716 <folding />
765 </state> 717 </state>
766 </provider> 718 </provider>
767 </entry> 719 </entry>
768 <entry file="file://$PROJECT_DIR$/test_cases/parent_space.py"> 720 <entry file="file://$APPLICATION_HOME_DIR$/helpers/pydev/pydevd.py">
769 <provider selected="true" editor-type-id="text-editor"> 721 <provider selected="true" editor-type-id="text-editor">
770 <state relative-caret-position="713"> 722 <state relative-caret-position="224">
771 <caret line="105" column="0" lean-forward="false" selection-start-line="105" selection-start-column="0" selection-end-line="105" selection-end-column="0" /> 723 <caret line="1595" column="0" lean-forward="false" selection-start-line="1595" selection-start-column="0" selection-end-line="1595" selection-end-column="0" />
772 <folding> 724 <folding />
773 <element signature="e#47#62#0" expanded="true" />
774 <marker date="1514955274000" expanded="true" signature="2800:2884" ph="SELECT custo... ozing_customermachine" />
775 </folding>
776 </state> 725 </state>
777 </provider> 726 </provider>
778 </entry> 727 </entry>
779 <entry file="file://$PROJECT_DIR$/test_cases/sub_account.py"> 728 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/case.py">
780 <provider selected="true" editor-type-id="text-editor"> 729 <provider selected="true" editor-type-id="text-editor">
781 <state relative-caret-position="423"> 730 <state relative-caret-position="-44">
782 <caret line="51" column="41" lean-forward="true" selection-start-line="51" selection-start-column="41" selection-end-line="51" selection-end-column="41" /> 731 <caret line="611" column="51" lean-forward="true" selection-start-line="611" selection-start-column="51" selection-end-line="611" selection-end-column="51" />
783 <folding> 732 <folding />
784 <element signature="e#47#62#0" expanded="true" />
785 </folding>
786 </state> 733 </state>
787 </provider> 734 </provider>
788 </entry> 735 </entry>
789 <entry file="file://$PROJECT_DIR$/report/test_report.html"> 736 <entry file="file://$PROJECT_DIR$/test_cases/register.py">
790 <provider selected="true" editor-type-id="text-editor"> 737 <provider selected="true" editor-type-id="text-editor">
791 <state relative-caret-position="0"> 738 <state relative-caret-position="160">
792 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> 739 <caret line="210" column="34" lean-forward="true" selection-start-line="210" selection-start-column="34" selection-end-line="210" selection-end-column="34" />
793 <folding /> 740 <folding>
741 <element signature="e#47#62#0" expanded="true" />
742 </folding>
794 </state> 743 </state>
795 </provider> 744 </provider>
796 </entry> 745 </entry>
797 <entry file="file:///Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/case.py"> 746 <entry file="file://$PROJECT_DIR$/test_cases/press.py">
798 <provider selected="true" editor-type-id="text-editor"> 747 <provider selected="true" editor-type-id="text-editor">
799 <state relative-caret-position="359"> 748 <state relative-caret-position="312">
800 <caret line="600" column="0" lean-forward="false" selection-start-line="600" selection-start-column="0" selection-end-line="600" selection-end-column="0" /> 749 <caret line="80" column="38" lean-forward="true" selection-start-line="80" selection-start-column="38" selection-end-line="80" selection-end-column="38" />
801 <folding /> 750 <folding />
802 </state> 751 </state>
803 </provider> 752 </provider>
804 </entry> 753 </entry>
805 <entry file="file://$PROJECT_DIR$/test_cases/debugggggg.py"> 754 <entry file="file://$PROJECT_DIR$/test_cases/sub_account.py">
806 <provider selected="true" editor-type-id="text-editor"> 755 <provider selected="true" editor-type-id="text-editor">
807 <state relative-caret-position="34"> 756 <state relative-caret-position="415">
808 <caret line="2" column="0" lean-forward="false" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" /> 757 <caret line="110" column="49" lean-forward="false" selection-start-line="110" selection-start-column="49" selection-end-line="110" selection-end-column="49" />
809 <folding /> 758 <folding>
759 <element signature="e#47#62#0" expanded="true" />
760 </folding>
810 </state> 761 </state>
811 </provider> 762 </provider>
812 </entry> 763 </entry>
813 <entry file="file://$PROJECT_DIR$/test_cases/__init__.py"> 764 <entry file="file://$PROJECT_DIR$/report/test_report copy.html">
814 <provider selected="true" editor-type-id="text-editor"> 765 <provider selected="true" editor-type-id="text-editor">
815 <state relative-caret-position="0"> 766 <state relative-caret-position="160">
816 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> 767 <caret line="998" column="8" lean-forward="true" selection-start-line="998" selection-start-column="8" selection-end-line="998" selection-end-column="8" />
817 <folding /> 768 <folding />
818 </state> 769 </state>
819 </provider> 770 </provider>
820 </entry> 771 </entry>
821 <entry file="file://$PROJECT_DIR$/data_fixture/__init__.py"> 772 <entry file="file://$PROJECT_DIR$/data_fixture/mysql_db.py">
822 <provider selected="true" editor-type-id="text-editor"> 773 <provider selected="true" editor-type-id="text-editor">
823 <state relative-caret-position="0"> 774 <state relative-caret-position="388">
824 <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> 775 <caret line="44" column="77" lean-forward="true" selection-start-line="44" selection-start-column="52" selection-end-line="44" selection-end-column="77" />
825 <folding /> 776 <folding>
777 <element signature="e#47#66#0" expanded="true" />
778 <marker date="1516000191000" expanded="true" signature="1736:1756" ph="select * fro... " />
779 <marker date="1516000191000" expanded="true" signature="1736:1758" ph="select * fro... missing_value" />
780 <marker date="1516000191000" expanded="true" signature="1736:1782" ph="select count... missing_value" />
781 <marker date="1516000191000" expanded="true" signature="1736:1783" ph="select count... missing_value" />
782 </folding>
826 </state> 783 </state>
827 </provider> 784 </provider>
828 </entry> 785 </entry>
829 <entry file="file://$PROJECT_DIR$/test_cases/app_record_statistic.py"> 786 <entry file="file://$PROJECT_DIR$/HTMLTestRunner.py">
830 <provider selected="true" editor-type-id="text-editor"> 787 <provider selected="true" editor-type-id="text-editor">
831 <state relative-caret-position="306"> 788 <state relative-caret-position="150">
832 <caret line="18" column="53" lean-forward="true" selection-start-line="18" selection-start-column="53" selection-end-line="18" selection-end-column="53" /> 789 <caret line="643" column="0" lean-forward="false" selection-start-line="643" selection-start-column="0" selection-end-line="643" selection-end-column="0" />
833 <folding> 790 <folding>
834 <element signature="e#47#62#0" expanded="true" /> 791 <element signature="e#8852#10678#0" expanded="false" />
835 </folding> 792 </folding>
836 </state> 793 </state>
837 </provider> 794 </provider>
838 </entry> 795 </entry>
839 <entry file="file://$PROJECT_DIR$/test_cases/subject_sync.py"> 796 <entry file="file://$PROJECT_DIR$/test_cases/parent_space.py">
840 <provider selected="true" editor-type-id="text-editor"> 797 <provider selected="true" editor-type-id="text-editor">
841 <state relative-caret-position="204"> 798 <state relative-caret-position="443">
842 <caret line="12" column="0" lean-forward="true" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" /> 799 <caret line="101" column="100" lean-forward="true" selection-start-line="101" selection-start-column="100" selection-end-line="101" selection-end-column="100" />
843 <folding> 800 <folding>
844 <element signature="e#47#62#0" expanded="true" /> 801 <element signature="e#47#62#0" expanded="true" />
802 <marker date="1516000648000" expanded="true" signature="2794:2878" ph="SELECT custo... ozing_customermachine" />
845 </folding> 803 </folding>
846 </state> 804 </state>
847 </provider> 805 </provider>
848 </entry> 806 </entry>
849 <entry file="file://$PROJECT_DIR$/data_fixture/create_testdata.py"> 807 <entry file="file://$PROJECT_DIR$/data_fixture/create_testdata.py">
850 <provider selected="true" editor-type-id="text-editor"> 808 <provider selected="true" editor-type-id="text-editor">
851 <state relative-caret-position="666"> 809 <state relative-caret-position="382">
852 <caret line="356" column="79" lean-forward="false" selection-start-line="356" selection-start-column="67" selection-end-line="356" selection-end-column="79" /> 810 <caret line="32" column="21" lean-forward="true" selection-start-line="32" selection-start-column="21" selection-end-line="32" selection-end-column="21" />
data_fixture/__pycache__/create_testdata.cpython-36.pyc
No preview for this file type
data_fixture/__pycache__/mysql_db.cpython-36.pyc
No preview for this file type
data_fixture/create_testdata.py
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 from data_fixture.mysql_db import DB 4 from data_fixture.mysql_db import DB
5 from data_fixture import config_data as Data 5 from data_fixture import config_data as Data
6 from datetime import datetime, date, timedelta 6 from datetime import datetime, date, timedelta
7 import time 7 import time
8 from data_fixture.config_data import HOST_BOSS 8 from data_fixture.config_data import HOST_BOSS
9 import requests 9 import requests
10 import calendar 10 import calendar
11 import uuid 11 import uuid
12 12
13 13
14 db = DB() 14 db = DB()
15 15
16 ## ********************************************************************************************************************* 16 ## *********************************************************************************************************************
17 ## 数据库通用操作
18 ## *********************************************************************************************************************
19 def db_select_bysql(sql):
20 return db.select(sql)
21
22 def db_select(tabel_name, where_data_equal, where_data_unequal = None):
23 return db.select_(tabel_name, where_data_equal, where_data_unequal)
24
25 ## *********************************************************************************************************************
17 ## 验证码 26 ## 验证码
18 ## ********************************************************************************************************************* 27 ## *********************************************************************************************************************
19 def fet_authCode(mobile): 28 def fet_authCode(mobile):
20 url = HOST_BOSS + "/ozing/timer/user/fetchAuthCode" 29 url = HOST_BOSS + "/ozing/timer/user/fetchAuthCode"
21 headers = {'Accept': '*/*'} 30 headers = {'Accept': '*/*'}
22 postData = {'mobile': mobile, 'type': 'general'} 31 postData = {'mobile': mobile, 'type': 'general'}
23 r = requests.post(url, headers=headers, data=postData) 32 r = requests.post(url, headers=headers, data=postData)
24 result = r.json() 33 result = r.json()
25 if result['status'] == 100: 34 if result['status'] == 100:
26 return result['jsessionid'] 35 return result['jsessionid']
27 else : 36 else :
28 raise FetchException('fetch auth code Error!') 37 raise FetchException('fetch auth code Error!')
29 38
30 39
31 class FetchException(Exception): 40 class FetchException(Exception):
32 pass 41 pass
33 42
34 ## ********************************************************************************************************************* 43 ## *********************************************************************************************************************
35 ## 保卡 44 ## 保卡
36 ## ********************************************************************************************************************* 45 ## *********************************************************************************************************************
37 # 保卡数据 -- 新建保卡 46 # 保卡数据 -- 新建保卡
38 def pre_elecCard(device_cus_bind='0', device_sam='0', device_cus_unbind='0'): 47 def pre_elecCard(device_cus_bind='0', device_sam='0', device_cus_unbind='0'):
39 48
40 if device_cus_bind != '0': 49 if device_cus_bind != '0':
41 # 客机,已绑定保卡 50 # 客机,已绑定保卡
42 select_customermachine = "select * from acornuser.ozing_customermachine where deviceNumber = '{}' ".format(device_cus_bind) 51 select_customermachine = "select * from acornuser.ozing_customermachine where deviceNumber = '{}' ".format(device_cus_bind)
43 select_machine_cus = "SELECT * FROM acornuser.ozing_machine where deviceNumber = '{}' ".format(device_cus_bind) 52 select_machine_cus = "SELECT * FROM acornuser.ozing_machine where deviceNumber = '{}' ".format(device_cus_bind)
44 insert_customermachine_tabel = 'acornuser.ozing_customermachine' 53 insert_customermachine_tabel = 'acornuser.ozing_customermachine'
45 insert_customermachine_data = { 54 insert_customermachine_data = {
46 'deviceNumber': device_cus_bind, 55 'deviceNumber': device_cus_bind,
47 'userId': Data.USER_ID, 56 'userId': Data.USER_ID,
48 'customerName':'测试customer', 57 'customerName':'测试customer',
49 'customerAddress':'内蒙古巴彦淖尔市', 58 'customerAddress':'内蒙古巴彦淖尔市',
50 'customerPhone':'13822222222', 59 'customerPhone':'13822222222',
51 'buyTime': datetime.now().strftime("%Y-%m-%d %H:%M:%S"), 60 'buyTime': datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
52 'buyAddress':'内蒙古巴彦淖尔市', 61 'buyAddress':'内蒙古巴彦淖尔市',
53 'alterSaleCall':'51518888', 62 'alterSaleCall':'51518888',
54 'cmstate': '1', 63 'cmstate': '1',
55 'createTime': datetime.now().strftime("%Y-%m-%d %H:%M:%S") 64 'createTime': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
56 } 65 }
57 insert_machine_cus_table = 'acornuser.ozing_machine' 66 insert_machine_cus_table = 'acornuser.ozing_machine'
58 insert_machine_cus_data = {'productModel': Data.MODEL, 67 insert_machine_cus_data = {'productModel': Data.MODEL,
59 'deviceNumber': device_cus_bind, 68 'deviceNumber': device_cus_bind,
60 'macAddress': Data.MAC_CUS_BIND, 69 'macAddress': Data.MAC_CUS_BIND,
61 'state': '1' 70 'state': '1'
62 } 71 }
63 if db.select(select_customermachine): 72 if db.select(select_customermachine):
64 pass 73 pass
65 else: 74 else:
66 db.insert(insert_customermachine_tabel, insert_customermachine_data) 75 db.insert(insert_customermachine_tabel, insert_customermachine_data)
67 76
68 if db.select(select_machine_cus): 77 if db.select(select_machine_cus):
69 pass 78 pass
70 else: 79 else:
71 db.insert(insert_machine_cus_table, insert_machine_cus_data) 80 db.insert(insert_machine_cus_table, insert_machine_cus_data)
72 81
73 # 样机 82 # 样机
74 if device_sam !='0': 83 if device_sam !='0':
75 select_samplemachine = "SELECT * FROM acornuser.ozing_samplemachine where deviceNumber = '{}' ".format(device_sam) 84 select_samplemachine = "SELECT * FROM acornuser.ozing_samplemachine where deviceNumber = '{}' ".format(device_sam)
76 select_machine_sam = "SELECT * FROM acornuser.ozing_machine where deviceNumber = '{}' ".format(device_sam) 85 select_machine_sam = "SELECT * FROM acornuser.ozing_machine where deviceNumber = '{}' ".format(device_sam)
77 insert_samplemachine_tabel = 'acornuser.ozing_samplemachine' 86 insert_samplemachine_tabel = 'acornuser.ozing_samplemachine'
78 insert_samplemachine_data= {'deviceNumber': device_sam, 87 insert_samplemachine_data= {'deviceNumber': device_sam,
79 'userId': Data.USER_ID, 88 'userId': Data.USER_ID,
80 'terminalAddress': "内蒙古巴彦淖尔市", 89 'terminalAddress': "内蒙古巴彦淖尔市",
81 'distributor': "新华书店", 90 'distributor': "新华书店",
82 'saleClerk':"张三", 91 'saleClerk':"张三",
83 'mobilePhone': "18622222222", 92 'mobilePhone': "18622222222",
84 'photo':'[{"photoUrl":"static/upload/online_api/samplePhoto/2017-12-13/b6480129-e720-4109-a455-6130fd640f16.jpg"},{"photoUrl":"static/upload/online_api/samplePhoto/2017-12-13/b8317fa4-cfa5-4ea4-91d4-3ca020e06bca.jpg"},{"photoUrl":"static/upload/online_api/samplePhoto/2017-12-13/110dc30b-34f1-4e0b-88e0-a030b8ab4af7.jpg"}]', 93 'photo':'[{"photoUrl":"static/upload/online_api/samplePhoto/2017-12-13/b6480129-e720-4109-a455-6130fd640f16.jpg"},{"photoUrl":"static/upload/online_api/samplePhoto/2017-12-13/b8317fa4-cfa5-4ea4-91d4-3ca020e06bca.jpg"},{"photoUrl":"static/upload/online_api/samplePhoto/2017-12-13/110dc30b-34f1-4e0b-88e0-a030b8ab4af7.jpg"}]',
85 'smstate': '1', 94 'smstate': '1',
86 'createTime': datetime.now().strftime('%Y-%m-%d %H:%M:%S') } 95 'createTime': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }
87 insert_machine_sam_tabel = 'acornuser.ozing_machine' 96 insert_machine_sam_tabel = 'acornuser.ozing_machine'
88 insert_machine_sam_data = {'productModel': Data.MODEL, 97 insert_machine_sam_data = {'productModel': Data.MODEL,
89 'deviceNumber': device_sam, 98 'deviceNumber': device_sam,
90 'macAddress': Data.MAC_SAM, 99 'macAddress': Data.MAC_SAM,
91 'state': '0'} 100 'state': '0'}
92 101
93 if db.select(select_samplemachine): 102 if db.select(select_samplemachine):
94 pass 103 pass
95 else: 104 else:
96 db.insert(insert_samplemachine_tabel, insert_samplemachine_data) 105 db.insert(insert_samplemachine_tabel, insert_samplemachine_data)
97 106
98 if db.select(select_machine_sam): 107 if db.select(select_machine_sam):
99 pass 108 pass
100 else: 109 else:
101 db.insert(insert_machine_sam_tabel, insert_machine_sam_data) 110 db.insert(insert_machine_sam_tabel, insert_machine_sam_data)
102 111
103 # 未绑定 -- 客机 112 # 未绑定 -- 客机
104 if device_cus_unbind != '0': 113 if device_cus_unbind != '0':
105 select_customermachine_unbind = "select * from acornuser.ozing_customermachine where deviceNumber = '{}' " \ 114 select_customermachine_unbind = "select * from acornuser.ozing_customermachine where deviceNumber = '{}' " \
106 .format(device_cus_unbind) 115 .format(device_cus_unbind)
107 update_customermachine_unbind_tabel = 'acornuser.ozing_customermachine' 116 update_customermachine_unbind_tabel = 'acornuser.ozing_customermachine'
108 update_customermachine_unbind_set = {'deviceNumber':str(time.time())} 117 update_customermachine_unbind_set = {'deviceNumber':str(time.time())}
109 update_customermachine_unbind_where = {'deviceNumber': device_cus_unbind} 118 update_customermachine_unbind_where = {'deviceNumber': device_cus_unbind}
110 119
111 select_machine_cus_1 = "SELECT * FROM acornuser.ozing_machine where deviceNumber = '{}' ".format(device_cus_unbind) 120 select_machine_cus_1 = "SELECT * FROM acornuser.ozing_machine where deviceNumber = '{}' ".format(device_cus_unbind)
112 select_machine_cus_2 = "SELECT * FROM acornuser.ozing_machine where deviceNumber = '{}' and state = '1' ".format(device_cus_unbind) 121 select_machine_cus_2 = "SELECT * FROM acornuser.ozing_machine where deviceNumber = '{}' and state = '1' ".format(device_cus_unbind)
113 122
114 update_machine_cus_unbind_table = 'acornuser.ozing_machine' 123 update_machine_cus_unbind_table = 'acornuser.ozing_machine'
115 update_machine_cus_unbind_set = {'state': '1'} 124 update_machine_cus_unbind_set = {'state': '1'}
116 update_machine_cus_unbind_where = {'deviceNumber': device_cus_unbind} 125 update_machine_cus_unbind_where = {'deviceNumber': device_cus_unbind}
117 126
118 # 保卡表中有数据 127 # 保卡表中有数据
119 if db.select(select_customermachine_unbind): 128 if db.select(select_customermachine_unbind):
120 db.update(update_customermachine_unbind_tabel, update_customermachine_unbind_set, update_customermachine_unbind_where) 129 db.update(update_customermachine_unbind_tabel, update_customermachine_unbind_set, update_customermachine_unbind_where)
121 # 机器表中有数据,并且状态是1 130 # 机器表中有数据,并且状态是1
122 if db.select(select_machine_cus_1): 131 if db.select(select_machine_cus_1):
123 if db.select(select_machine_cus_2): 132 if db.select(select_machine_cus_2):
124 pass 133 pass
125 else: 134 else:
126 # update state =1 135 # update state =1
127 db.update(update_machine_cus_unbind_table, update_machine_cus_unbind_set, update_machine_cus_unbind_where) 136 db.update(update_machine_cus_unbind_table, update_machine_cus_unbind_set, update_machine_cus_unbind_where)
128 # 机器表中没数据 137 # 机器表中没数据
129 else: 138 else:
130 pass 139 pass
131 140
132 # #添加客机保卡 141 # #添加客机保卡
133 def pre_SetUpElecCard(): 142 def pre_SetUpElecCard():
134 select_customermachine_new = "select * from acornuser.ozing_customermachine where deviceNumber = '{}' ".format(Data.DEVICE_NUMBER_NEW) 143 select_customermachine_new = "select * from acornuser.ozing_customermachine where deviceNumber = '{}' ".format(Data.DEVICE_NUMBER_NEW)
135 update_customermachine_new_tabel = 'acornuser.ozing_customermachine' 144 update_customermachine_new_tabel = 'acornuser.ozing_customermachine'
136 update_customermachine_new_set = {'deviceNumber':str(time.time())} 145 update_customermachine_new_set = {'deviceNumber':str(time.time())}
137 update_customermachine_new_where = {'deviceNumber': Data.DEVICE_NUMBER_NEW} 146 update_customermachine_new_where = {'deviceNumber': Data.DEVICE_NUMBER_NEW}
138 147
139 select_machine_new = "select * from acornuser.ozing_machine where deviceNumber = '{}' ".format(Data.DEVICE_NUMBER_NEW) 148 select_machine_new = "select * from acornuser.ozing_machine where deviceNumber = '{}' ".format(Data.DEVICE_NUMBER_NEW)
140 update_machine_new_tabel = 'acornuser.ozing_machine' 149 update_machine_new_tabel = 'acornuser.ozing_machine'
141 update_machine_new_set = {'deviceNumber': str(time.time())} 150 update_machine_new_set = {'deviceNumber': str(time.time())}
142 update_machine_new_where = {'deviceNumber': Data.DEVICE_NUMBER_NEW} 151 update_machine_new_where = {'deviceNumber': Data.DEVICE_NUMBER_NEW}
143 152
144 if db.select(select_customermachine_new): 153 if db.select(select_customermachine_new):
145 db.update(update_customermachine_new_tabel, update_customermachine_new_set, update_customermachine_new_where) 154 db.update(update_customermachine_new_tabel, update_customermachine_new_set, update_customermachine_new_where)
146 if db.select(select_machine_new): 155 if db.select(select_machine_new):
147 db.update(update_machine_new_tabel, update_machine_new_set, update_machine_new_where) 156 db.update(update_machine_new_tabel, update_machine_new_set, update_machine_new_where)
148 157
149 158
150 ## ********************************************************************************************************************* 159 ## *********************************************************************************************************************
151 ## 子账户 160 ## 子账户
152 ## ********************************************************************************************************************* 161 ## *********************************************************************************************************************
153 162
154 def pre_subAccount(parent_id, sub_account_id, status, deviceNumber=Data.DEVICE_NUMBER_CUS_BIND): #status: child status 163 def pre_subAccount(parent_id, sub_account_id, status, deviceNumber=Data.DEVICE_NUMBER_CUS_BIND): #status: child status
155 164
156 # 子账户数据 165 # 子账户数据
157 TABEL_CHILD_USER = 'acornuser.child_user' 166 TABEL_CHILD_USER = 'acornuser.child_user'
158 if status == 1 : # make sure only 1 sub account's status marked as '1' 167 if status == 1 : # make sure only 1 sub account's status marked as '1'
159 update_all_0_sub = "update acornuser.child_user set status = 0 where parent_id = '{}' and deviceNumber = '{}'" \ 168 update_all_0_sub = "update acornuser.child_user set status = 0 where parent_id = '{}' and deviceNumber = '{}'" \
160 .format(parent_id, deviceNumber) 169 .format(parent_id, deviceNumber)
161 db.update_(update_all_0_sub) 170 db.update_(update_all_0_sub)
162 171
163 select_sub_acc = "select * from acornuser.child_user where parent_id = '{}' and subAccountId = '{}' ".format(parent_id, sub_account_id) 172 select_sub_acc = "select * from acornuser.child_user where parent_id = '{}' and subAccountId = '{}' ".format(parent_id, sub_account_id)
164 select_sub_acc_status = "select * from acornuser.child_user where parent_id = '{}' and subAccountId = '{}' " \ 173 select_sub_acc_status = "select * from acornuser.child_user where parent_id = '{}' and subAccountId = '{}' " \
165 "and status = {} ".format(parent_id, sub_account_id, status) 174 "and status = {} ".format(parent_id, sub_account_id, status)
166 update_set = {'status': status} 175 update_set = {'status': status}
167 update_where = {'subAccountId': sub_account_id } 176 update_where = {'subAccountId': sub_account_id }
168 insert_data = {'parent_id':parent_id, 177 insert_data = {'parent_id':parent_id,
169 'image': Data.SUB_ACC_IMAGE, 178 'image': Data.SUB_ACC_IMAGE,
170 'name' : '测试sub', 179 'name' : '测试sub',
171 'grade_id':'6', 180 'grade_id':'6',
172 'school_id': Data.SUB_ACC_SCHOOL_ID_2, 181 'school_id': Data.SUB_ACC_SCHOOL_ID_2,
173 'region_id': Data.SUB_ACC_REGION_ID_2, 182 'region_id': Data.SUB_ACC_REGION_ID_2,
174 'status':status, 183 'status':status,
175 'region_name': Data.SUB_ACC_REGION_NAME_2, 184 'region_name': Data.SUB_ACC_REGION_NAME_2,
176 'deviceNumber':Data.DEVICE_NUMBER_CUS_BIND, 185 'deviceNumber':Data.DEVICE_NUMBER_CUS_BIND,
177 'subAccountId':sub_account_id 186 'subAccountId':sub_account_id
178 } 187 }
179 188
180 if db.select(select_sub_acc_status): 189 if db.select(select_sub_acc_status):
181 pass 190 pass
182 elif db.select(select_sub_acc): 191 elif db.select(select_sub_acc):
183 db.update(TABEL_CHILD_USER, update_set, update_where) 192 db.update(TABEL_CHILD_USER, update_set, update_where)
184 else: 193 else:
185 db.insert(TABEL_CHILD_USER, insert_data) 194 db.insert(TABEL_CHILD_USER, insert_data)
186 195
187 196
188 #主账户数据 197 #主账户数据
189 select_acc_1 = "select * from acornuser.acorn_user_status where userId = '{}' and deviceNumber = '{}' " \ 198 select_acc_1 = "select * from acornuser.acorn_user_status where userId = '{}' and deviceNumber = '{}' " \
190 .format(parent_id, deviceNumber) 199 .format(parent_id, deviceNumber)
191 if status == 1: # if child status == 1, parent status should be 0 200 if status == 1: # if child status == 1, parent status should be 0
192 select_acc_2 = "select * from acornuser.acorn_user_status where userId = '{}' and deviceNumber = '{}' and status = 0 " \ 201 select_acc_2 = "select * from acornuser.acorn_user_status where userId = '{}' and deviceNumber = '{}' and status = 0 " \
193 .format(parent_id, deviceNumber) 202 .format(parent_id, deviceNumber)
194 203
195 insert_data_parent_0 = {'userId': parent_id, 204 insert_data_parent_0 = {'userId': parent_id,
196 'status': 0, 205 'status': 0,
197 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND 206 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND
198 } 207 }
199 set_0 = {'status': 0} 208 set_0 = {'status': 0}
200 where = {'userId': parent_id, 209 where = {'userId': parent_id,
201 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND 210 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND
202 } 211 }
203 212
204 if db.select(select_acc_2): 213 if db.select(select_acc_2):
205 pass 214 pass
206 elif db.select(select_acc_1): 215 elif db.select(select_acc_1):
207 db.update("acornuser.acorn_user_status", set_0, where) 216 db.update("acornuser.acorn_user_status", set_0, where)
208 else: 217 else:
209 db.insert("acornuser.acorn_user_status", insert_data_parent_0) 218 db.insert("acornuser.acorn_user_status", insert_data_parent_0)
210 else: # if child status == 0, parent status should be 1 219 else: # if child status == 0, parent status should be 1
211 select_acc_3 = "select * from acornuser.acorn_user_status where userId = '{}' and deviceNumber = '{}' and status = 1 " \ 220 select_acc_3 = "select * from acornuser.acorn_user_status where userId = '{}' and deviceNumber = '{}' and status = 1 " \
212 .format(parent_id, deviceNumber) 221 .format(parent_id, deviceNumber)
213 set_1 = {'status': 1} 222 set_1 = {'status': 1}
214 where = {'userId': parent_id, 223 where = {'userId': parent_id,
215 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND 224 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND
216 } 225 }
217 insert_data_parent_1 = {'userId': parent_id, 226 insert_data_parent_1 = {'userId': parent_id,
218 'status': 1, 227 'status': 1,
219 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND 228 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND
220 } 229 }
221 if db.select(select_acc_3): 230 if db.select(select_acc_3):
222 pass 231 pass
223 elif db.select(select_acc_1): 232 elif db.select(select_acc_1):
224 db.update("acornuser.acorn_user_status", set_1, where) 233 db.update("acornuser.acorn_user_status", set_1, where)
225 else: 234 else:
226 db.insert("acornuser.acorn_user_status", insert_data_parent_1) 235 db.insert("acornuser.acorn_user_status", insert_data_parent_1)
227 236
228 237
229 238
230 239
231 # 删除对应的parentID的所有数据 便于验证添加成功 240 # 删除对应的parentID的所有数据 便于验证添加成功
232 def pre_AddSubAccount(parent_Id): 241 def pre_AddSubAccount(parent_Id):
233 where_data = {'parent_Id': parent_Id} 242 where_data = {'parent_Id': parent_Id}
234 set_data = {'parent_Id': calendar.timegm(time.gmtime())} 243 set_data = {'parent_Id': calendar.timegm(time.gmtime())}
235 if db.select_('acornuser.child_user', where_data): 244 if db.select_('acornuser.child_user', where_data):
236 db.update('acornuser.child_user', set_data, where_data) 245 db.update('acornuser.child_user', set_data, where_data)
237 246
238 247
239 #检查signature存在 248 #检查signature存在
240 def checkSignatureExists(userId, type): 249 def checkSignatureExists(userId, type):
241 #主账户 250 #主账户
242 if type == 1: 251 if type == 1:
243 sql_1 = 'select * from acornuser.acorn_user_extra where user_id = {} '.format(userId) 252 sql_1 = 'select * from acornuser.acorn_user_extra where user_id = {} '.format(userId)
244 sql_2 = 'select * from acornuser.acorn_user_extra where user_id = {} and signature is not NULL'.format(userId) 253 sql_2 = 'select * from acornuser.acorn_user_extra where user_id = {} and signature is not NULL'.format(userId)
245 254
246 if db.select(sql_2): 255 if db.select(sql_2):
247 pass 256 pass
248 elif db.select(sql_1): 257 elif db.select(sql_1):
249 set = {'signature': '聪明的波利'} 258 set = {'signature': '聪明的波利'}
250 where = {'user_id': userId} 259 where = {'user_id': userId}
251 db.update('acornuser.acorn_user_extra', set, where) 260 db.update('acornuser.acorn_user_extra', set, where)
252 else: 261 else:
253 insert = {'user_id': userId, 'signature': '聪明的波利'} 262 insert = {'user_id': userId, 'signature': '聪明的波利'}
254 db.insert('acornuser.acorn_user_extra', insert) 263 db.insert('acornuser.acorn_user_extra', insert)
255 264
256 # 子账户 265 # 子账户
257 if type == 2: 266 if type == 2:
258 sql_1 = "select * from acornuser.subAccount_user_extra where sub_account_id = '{}' ".format(userId) 267 sql_1 = "select * from acornuser.subAccount_user_extra where sub_account_id = '{}' ".format(userId)
259 sql_2 = "select * from acornuser.subAccount_user_extra where sub_account_id = '{}'and signature is not NULL".format(userId) 268 sql_2 = "select * from acornuser.subAccount_user_extra where sub_account_id = '{}'and signature is not NULL".format(userId)
260 269
261 if db.select(sql_2): 270 if db.select(sql_2):
262 pass 271 pass
263 elif db.select(sql_1): 272 elif db.select(sql_1):
264 set = {'signature': '聪明的波利 sub~'} 273 set = {'signature': '聪明的波利 sub~'}
265 where = {'sub_account_id': userId} 274 where = {'sub_account_id': userId}
266 db.update('acornuser.subAccount_user_extra', set, where) 275 db.update('acornuser.subAccount_user_extra', set, where)
267 else: 276 else:
268 insert = {'sub_account_id': userId, 'signature': '聪明的波利 sub~'} 277 insert = {'sub_account_id': userId, 'signature': '聪明的波利 sub~'}
269 db.insert('acornuser.subAccount_user_extra', insert) 278 db.insert('acornuser.subAccount_user_extra', insert)
270 279
271 280
272 ## ********************************************************************************************************************* 281 ## *********************************************************************************************************************
273 ## 教材版本 282 ## 教材版本
274 ## ********************************************************************************************************************* 283 ## *********************************************************************************************************************
275 284
276 # 用户版本信息 285 # 用户版本信息
277 def pre_GetUserPressInfo(userId): 286 def pre_GetUserPressInfo(userId):
278 set = {'chinese': '北京师范大学出版社'} 287 set = {'chinese': '北京师范大学出版社'}
279 where = {'user_id': userId} 288 where = {'user_id': userId}
280 db.update('acornuser.user_press', set, where) 289 db.update('acornuser.user_press', set, where)
281 290
282 291
283 ## ********************************************************************************************************************* 292 ## *********************************************************************************************************************
284 ## 登录注册 293 ## 登录注册
285 ## ********************************************************************************************************************* 294 ## *********************************************************************************************************************
286 # 检查用户注册信息是否完整 295 # 检查用户注册信息是否完整
287 def pre_register_extrainfo_check(user_id, complete): 296 def pre_register_extrainfo_check(user_id, complete):
288 #不完整 297 #不完整
289 if complete == False: 298 if complete == False:
290 sql = "select * from acornuser.ozing_student where user_id = {} and region_id is NULL and school_id is NULL".format(user_id) 299 sql = "select * from acornuser.ozing_student where user_id = {} and region_id is NULL and school_id is NULL".format(user_id)
291 if db.select(sql): 300 if db.select(sql):
292 pass 301 pass
293 else: 302 else:
294 update_sql = "update acornuser.ozing_student set region_id = NULL, school_id = NULL where user_id = {}".format(user_id) 303 update_sql = "update acornuser.ozing_student set region_id = NULL, school_id = NULL where user_id = {}".format(user_id)
295 db.update_(update_sql) 304 db.update_(update_sql)
296 305
297 # 完整 306 # 完整
298 else: 307 else:
299 sql = "select * from acornuser.ozing_student where user_id = {} and region_id is not NULL and school_id is not NULL".format( 308 sql = "select * from acornuser.ozing_student where user_id = {} and region_id is not NULL and school_id is not NULL".format(
300 user_id) 309 user_id)
301 if db.select(sql): 310 if db.select(sql):
302 pass 311 pass
303 else: 312 else:
304 set = {'region_id': '140600', 'school_id': '496299', 'region_name':'江苏苏州吴中'} 313 set = {'region_id': '140600', 'school_id': '496299', 'region_name':'江苏苏州吴中'}
305 where = {'user_id': user_id} 314 where = {'user_id': user_id}
306 db.update('acornuser.ozing_student', set, where) 315 db.update('acornuser.ozing_student', set, where)
307 316
308 ## ********************************************************************************************************************* 317 ## *********************************************************************************************************************
309 ## 最近观看视频 318 ## 最近观看视频
310 ## ********************************************************************************************************************* 319 ## *********************************************************************************************************************
311 def pre_getRecentVideo(user_id, status): # status=0 novideo, status=1 has video 320 def pre_getRecentVideo(user_id, status): # status=0 novideo, status=1 has video
312 where = {'user_id': user_id} 321 where = {'user_id': user_id}
313 if status == 0 : 322 if status == 0 :
314 set = {'user_id': str(time.time())} 323 set = {'user_id': str(time.time())}
315 if db.select_('acornuser.user_video_watch', where): 324 if db.select_('acornuser.user_video_watch', where):
316 db.update('acornuser.user_video_watch', set, where) 325 db.update('acornuser.user_video_watch', set, where)
317 326
318 if status == 1 : 327 if status == 1 :
319 if db.select_('acornuser.user_video_watch', where): 328 if db.select_('acornuser.user_video_watch', where):
320 pass 329 pass
321 else: 330 else:
322 insert_data = {'user_id': user_id, 331 insert_data = {'user_id': user_id,
323 'data_id': 486600, 332 'data_id': 486600,
324 'data_name':'人教7上_1 春_程诗尧.mpc', 333 'data_name':'人教7上_1 春_程诗尧.mpc',
325 'play_online_url':'http://fd.xuexiao100.com/mp4/黄冈视频/初中语文/7年级上 人民教育出版社_2017版/人教7上_1 春_程诗尧.mp4?k=e8f8a7429a42aff00cb96faa6f48821e', 334 'play_online_url':'http://fd.xuexiao100.com/mp4/黄冈视频/初中语文/7年级上 人民教育出版社_2017版/人教7上_1 春_程诗尧.mp4?k=e8f8a7429a42aff00cb96faa6f48821e',
326 'cover_url': 'http://hjxprodbucket.oss.aliyuncs.com/static/upload/boss_api/announcement/2017-10-18/34cfe338-2305-4aa0-96d8-c952be4dd800.jpg', 335 'cover_url': 'http://hjxprodbucket.oss.aliyuncs.com/static/upload/boss_api/announcement/2017-10-18/34cfe338-2305-4aa0-96d8-c952be4dd800.jpg',
327 'app_unique_name': 'famous-teacher', 336 'app_unique_name': 'famous-teacher',
328 'created_time': '2017-12-27 14:52:08', 337 'created_time': '2017-12-27 14:52:08',
329 'modified_time': '2017-12-27 14:52:08' 338 'modified_time': '2017-12-27 14:52:08'
330 } 339 }
331 db.insert('acornuser.user_video_watch', insert_data) 340 db.insert('acornuser.user_video_watch', insert_data)
332 341
333 ## ********************************************************************************************************************* 342 ## *********************************************************************************************************************
334 ## 手机号重复验证 343 ## 手机号重复验证
335 ## ********************************************************************************************************************* 344 ## *********************************************************************************************************************
336 def pre_phoneUsedCheck(phone, used): #used = True :used 345 def pre_phoneUsedCheck(phone, used): #used = True :used
337 where = {'username': phone} 346 where = {'username': phone}
338 if used: 347 if used:
339 if db.select_('acornuser.acorn_user', where): 348 if db.select_('acornuser.acorn_user', where):
340 pass 349 pass
341 else: 350 else:
342 max_id = db.select('select max(id) from acornuser.acorn_user')[0]['max(id)'] 351 max_id = db.select('select max(id) from acornuser.acorn_user')[0]['max(id)']
343 update_where = {'id': max_id - 150} 352 update_where = {'id': max_id - 150}
344 count = db.select_('acornuser.acorn_user', update_where) 353 count = db.select_('acornuser.acorn_user', update_where)
345 354
346 db.update('acornuser.acorn_user', where, update_where) 355 db.update('acornuser.acorn_user', where, update_where)
347 else: 356 else:
348 if db.select_('acornuser.acorn_user', where): 357 if db.select_('acornuser.acorn_user', where):
349 update_set = {'username': str(time.time())} 358 update_set = {'username': str(time.time())}
350 db.update('acornuser.acorn_user', update_set, where) 359 db.update('acornuser.acorn_user', update_set, where)
351 360
352 361
353 ## ********************************************************************************************************************* 362 ## *********************************************************************************************************************
354 ## 家长控制 密码 363 ## 家长控制 密码
355 ## ********************************************************************************************************************* 364 ## *********************************************************************************************************************
356 def get_parentSpace_password(device_number): 365 def get_parentSpace_password(device_number):
357 sql = "select password from acornuser.parents_space_pass where deviceNumber = '{}'".format(device_number) 366 sql = "select password from acornuser.parents_space_pass where deviceNumber = '{}'".format(device_number)
358 result = db.select(sql) 367 result = db.select(sql)
359 if result: 368 if result:
360 return result[0]['password'] 369 return result[0]['password']
361 else: 370 else:
362 return '123456' 371 return '123456'
363 372
364 373
365 ## ********************************************************************************************************************* 374 ## *********************************************************************************************************************
366 ## 家长控制 app使用统计 375 ## 家长控制 app使用统计
367 ## ********************************************************************************************************************* 376 ## *********************************************************************************************************************
368 # "now" format: timestamp , create app using data about this week, month, year, last year(according 'now' time) 377 # "now" format: timestamp , create app using data about this week, month, year, last year(according 'now' time)
369 def create_app_use_record(now, user_id, device_number): 378 def create_app_use_record(now, user_id, device_number):
370 today = date.fromtimestamp(now) 379 today = date.fromtimestamp(now)
371 year_start_time = int(str(time.mktime(date(today.year, 1, 1).timetuple())).split('.')[0]) 380 year_start_time = int(str(time.mktime(date(today.year, 1, 1).timetuple())).split('.')[0])
372 where_equal = {'user_id':user_id, 'device_number':device_number} 381 where_equal = {'user_id':user_id, 'device_number':device_number}
373 where_unequal = ' time_end > {} '.format(year_start_time) 382 where_unequal = ' time_end > {} '.format(year_start_time)
374 if db.select_('analytics.app_record', where_equal, where_unequal): # data existing 383 if db.select_('analytics.app_record', where_equal, where_unequal): # data existing
375 update_data = "update analytics.app_record set device_number = '{}' where user_id = '{}' and device_number = '{}' " \ 384 update_data = "update analytics.app_record set device_number = '{}' where user_id = '{}' and device_number = '{}' " \
376 .format(str(time.time()), user_id, device_number) 385 .format(str(time.time()), user_id, device_number)
377 db.update_(update_data) 386 db.update_(update_data)
378 study_apps = [{'app_name':'百度英语资料大全', 'app_pid':'com.sailang.EnglishBook','category_id':'25', 'source_id':'1', \ 387 study_apps = [{'app_name':'百度英语资料大全', 'app_pid':'com.sailang.EnglishBook','category_id':'25', 'source_id':'1', \
379 'time_spent': 100, 'user_id': user_id, 'device_number': device_number}, 388 'time_spent': 100, 'user_id': user_id, 'device_number': device_number},
380 {'app_name': '开心大学士', 'app_pid': 'com.ksense.study','category_id':'26', 'source_id':'1', \ 389 {'app_name': '开心大学士', 'app_pid': 'com.ksense.study','category_id':'26', 'source_id':'1', \
381 'time_spent': 200, 'user_id': user_id, 'device_number': device_number}, 390 'time_spent': 200, 'user_id': user_id, 'device_number': device_number},
382 {'app_name': '驾考宝典', 'app_pid': 'com.handsgo.jiakao.android' ,'category_id':'27', 'source_id':'1', \ 391 {'app_name': '驾考宝典', 'app_pid': 'com.handsgo.jiakao.android' ,'category_id':'27', 'source_id':'1', \
383 'time_spent': 300, 'user_id': user_id, 'device_number': device_number}, 392 'time_spent': 300, 'user_id': user_id, 'device_number': device_number},
384 {'app_name': '我爱汉字', 'app_pid': 'com.cronlygames.hanzi' ,'category_id':'28', 'source_id':'1',\ 393 {'app_name': '我爱汉字', 'app_pid': 'com.cronlygames.hanzi' ,'category_id':'28', 'source_id':'1',\
385 'time_spent': 400, 'user_id': user_id, 'device_number': device_number}, 394 'time_spent': 400, 'user_id': user_id, 'device_number': device_number},
386 {'app_name': '拖拖乐3', 'app_pid': 'cn.com.wiisoft.tuotuo' ,'category_id':'57', 'source_id':'1', \ 395 {'app_name': '拖拖乐3', 'app_pid': 'cn.com.wiisoft.tuotuo' ,'category_id':'57', 'source_id':'1', \
387 'time_spent': 100, 'user_id': user_id, 'device_number': device_number}, 396 'time_spent': 100, 'user_id': user_id, 'device_number': device_number},
388 {'app_name': '幼儿数字算数学习', 'app_pid': 'com.syhrobert1991.infantlearning' ,'category_id':'25', \ 397 {'app_name': '幼儿数字算数学习', 'app_pid': 'com.syhrobert1991.infantlearning' ,'category_id':'25', \
389 'source_id':'1', 'time_spent': 200, 'user_id': user_id, 'device_number': device_number}, 398 'source_id':'1', 'time_spent': 200, 'user_id': user_id, 'device_number': device_number},
390 {'app_name': '轻松背单词之初中英语', 'app_pid': 'petpestzx.wordroid.model' ,'category_id':'26', \ 399 {'app_name': '轻松背单词之初中英语', 'app_pid': 'petpestzx.wordroid.model' ,'category_id':'26', \
391 'source_id':'2', 'time_spent': 300, 'user_id': user_id, 'device_number': device_number}, 400 'source_id':'2', 'time_spent': 300, 'user_id': user_id, 'device_number': device_number},
392 {'app_name': '有谱-爱学习(数理化)', 'app_pid': 'com.emingren.youpu' ,'category_id':'27', 'source_id':'2', \ 401 {'app_name': '有谱-爱学习(数理化)', 'app_pid': 'com.emingren.youpu' ,'category_id':'27', 'source_id':'2', \
393 'time_spent': 400, 'user_id': user_id, 'device_number': device_number}, 402 'time_spent': 400, 'user_id': user_id, 'device_number': device_number},
394 {'app_name': '疯狂音标', 'app_pid': 'com.neo.crazyphonetic' ,'category_id':'28', 'source_id':'2', \ 403 {'app_name': '疯狂音标', 'app_pid': 'com.neo.crazyphonetic' ,'category_id':'28', 'source_id':'2', \
395 'time_spent': 100, 'user_id': user_id, 'device_number': device_number}, 404 'time_spent': 100, 'user_id': user_id, 'device_number': device_number},
396 {'app_name': '互动作业V3.18.6', 'app_pid': 'com.v.study' ,'category_id':'57', 'source_id':'2', \ 405 {'app_name': '互动作业V3.18.6', 'app_pid': 'com.v.study' ,'category_id':'57', 'source_id':'2', \
397 'time_spent': 250, 'user_id': user_id, 'device_number': device_number}, 406 'time_spent': 250, 'user_id': user_id, 'device_number': device_number},
398 {'app_name': '发音背单词', 'app_pid': 'org.liberty.android.fantastischmemo' ,'category_id':'57', \ 407 {'app_name': '发音背单词', 'app_pid': 'org.liberty.android.fantastischmemo' ,'category_id':'57', \
399 'source_id':'2', 'time_spent': 350, 'user_id': user_id, 'device_number': device_number}, 408 'source_id':'2', 'time_spent': 350, 'user_id': user_id, 'device_number': device_number},
400 {'app_name': '语文100', 'app_pid': 'com.kk.kkyuwen' ,'category_id':'57', 'source_id':'2', \ 409 {'app_name': '语文100', 'app_pid': 'com.kk.kkyuwen' ,'category_id':'57', 'source_id':'2', \
401 'time_spent': 450, 'user_id': user_id, 'device_number': device_number} 410 'time_spent': 450, 'user_id': user_id, 'device_number': device_number}
402 ] 411 ]
403 412
404 game_apps = [{'app_name': '小伴龙新', 'app_pid': 'com.xiaobanlong.main' ,'category_id':'37', 'source_id':'1',\ 413 game_apps = [{'app_name': '小伴龙新', 'app_pid': 'com.xiaobanlong.main' ,'category_id':'37', 'source_id':'1',\
405 'time_spent': 100, 'user_id': user_id, 'device_number': device_number}, 414 'time_spent': 100, 'user_id': user_id, 'device_number': device_number},
406 {'app_name': '三国群英传', 'app_pid': 'com.tencent.tmgp.sgqyz' ,'category_id':'38', 'source_id':'1', \ 415 {'app_name': '三国群英传', 'app_pid': 'com.tencent.tmgp.sgqyz' ,'category_id':'38', 'source_id':'1', \
407 'time_spent': 200, 'user_id': user_id, 'device_number': device_number}, 416 'time_spent': 200, 'user_id': user_id, 'device_number': device_number},
408 {'app_name': '童言童语', 'app_pid': 'com.lingshi.kids' ,'category_id':'39', 'source_id':'2', \ 417 {'app_name': '童言童语', 'app_pid': 'com.lingshi.kids' ,'category_id':'39', 'source_id':'2', \
409 'time_spent': 300, 'user_id': user_id, 'device_number': device_number}, 418 'time_spent': 300, 'user_id': user_id, 'device_number': device_number},
410 {'app_name': '从前啊', 'app_pid': 'com.mojie.longlongago' ,'category_id':'37', 'source_id':'2', \ 419 {'app_name': '从前啊', 'app_pid': 'com.mojie.longlongago' ,'category_id':'37', 'source_id':'2', \
411 'time_spent': 400, 'user_id': user_id, 'device_number': device_number}, 420 'time_spent': 400, 'user_id': user_id, 'device_number': device_number},
412 {'app_name': '永恒纪元', 'app_pid': 'com.m37.dtszj.uc' ,'category_id':'38', 'source_id':'2', \ 421 {'app_name': '永恒纪元', 'app_pid': 'com.m37.dtszj.uc' ,'category_id':'38', 'source_id':'2', \
413 'time_spent': 100, 'user_id': user_id, 'device_number': device_number}, 422 'time_spent': 100, 'user_id': user_id, 'device_number': device_number},
414 {'app_name': '我的世界新', 'app_pid': 'com.netease.mc.aligames' ,'category_id':'39', 'source_id':'2', \ 423 {'app_name': '我的世界新', 'app_pid': 'com.netease.mc.aligames' ,'category_id':'39', 'source_id':'2', \
415 'time_spent': 200, 'user_id': user_id, 'device_number': device_number}, 424 'time_spent': 200, 'user_id': user_id, 'device_number': device_number},
416 {'app_name': '球球大作战', 'app_pid': 'com.ztgame.bob', 'category_id': '37', 'source_id': '2', \ 425 {'app_name': '球球大作战', 'app_pid': 'com.ztgame.bob', 'category_id': '37', 'source_id': '2', \
417 'time_spent': 300, 'user_id': user_id, 'device_number': device_number}, 426 'time_spent': 300, 'user_id': user_id, 'device_number': device_number},
418 {'app_name': '葫芦侠我的世界', 'app_pid': 'com.huluxia.mctool', 'category_id': '38', 'source_id': '2',\ 427 {'app_name': '葫芦侠我的世界', 'app_pid': 'com.huluxia.mctool', 'category_id': '38', 'source_id': '2',\
419 'time_spent': 400, 'user_id': user_id, 'device_number': device_number}, 428 'time_spent': 400, 'user_id': user_id, 'device_number': device_number},
420 {'app_name': 'QQ游戏V6.8.7', 'app_pid': 'com.tencent.qqgame', 'category_id': '39', 'source_id': '2',\ 429 {'app_name': 'QQ游戏V6.8.7', 'app_pid': 'com.tencent.qqgame', 'category_id': '39', 'source_id': '2',\
421 'time_spent': 100, 'user_id': user_id, 'device_number': device_number}, 430 'time_spent': 100, 'user_id': user_id, 'device_number': device_number},
422 {'app_name': '99围棋最新', 'app_pid': 'com.r99weiqi.dvd', 'category_id': '37', 'source_id': '2', \ 431 {'app_name': '99围棋最新', 'app_pid': 'com.r99weiqi.dvd', 'category_id': '37', 'source_id': '2', \
423 'time_spent': 50, 'user_id': user_id, 'device_number': device_number}, 432 'time_spent': 50, 'user_id': user_id, 'device_number': device_number},
424 {'app_name': '凯蒂环球之旅', 'app_pid': 'com.tencent.HelloKitty', 'category_id': '37', 'source_id': '2',\ 433 {'app_name': '凯蒂环球之旅', 'app_pid': 'com.tencent.HelloKitty', 'category_id': '37', 'source_id': '2',\
425 'time_spent': 150, 'user_id': user_id, 'device_number': device_number}, 434 'time_spent': 150, 'user_id': user_id, 'device_number': device_number},
426 {'app_name': '贪吃蛇大作战', 'app_pid': 'com.wepie.snake.qihoo', 'category_id': '100', 'source_id': '2',\ 435 {'app_name': '贪吃蛇大作战', 'app_pid': 'com.wepie.snake.qihoo', 'category_id': '100', 'source_id': '2',\
427 'time_spent': 250, 'user_id': user_id, 'device_number': device_number} 436 'time_spent': 250, 'user_id': user_id, 'device_number': device_number}
428 ] 437 ]
429 438
430 # get date of the last 7 days(include today) 439 # get date of the last 7 days(include today)
431 days = [] # the day should insert app records 440 days = [] # the day should insert app records
432 if today.month == 1: # the first month of this year 441 if today.month == 1: # the first month of this year
433 if today.day <= 7: # when today < 7th day of this month , 7 records chould cover this week ,this month, this year 442 if today.day <= 7: # when today < 7th day of this month , 7 records chould cover this week ,this month, this year
434 for i in range(0, 7): 443 for i in range(0, 7):
435 day_delta = timedelta(days=i) 444 day_delta = timedelta(days=i)
436 days.append(str(time.mktime((today - day_delta).timetuple())).split('.')[0]) 445 days.append(str(time.mktime((today - day_delta).timetuple())).split('.')[0])
437 else: # when today > 7th day of this month , should create 8 records to cover this week ,this month, this year 446 else: # when today > 7th day of this month , should create 8 records to cover this week ,this month, this year
438 for i in range(0, 8): 447 for i in range(0, 8):
439 day_delta = timedelta(days=i) 448 day_delta = timedelta(days=i)
440 days.append(str(time.mktime((today - day_delta).timetuple())).split('.')[0]) 449 days.append(str(time.mktime((today - day_delta).timetuple())).split('.')[0])
441 else: # create january data to cover this year 450 else: # create january data to cover this year
442 for i in range(0, 8): 451 for i in range(0, 8):
443 day_delta = timedelta(days=i) 452 day_delta = timedelta(days=i)
444 days.append(str(time.mktime((today - day_delta).timetuple())).split('.')[0]) 453 days.append(str(time.mktime((today - day_delta).timetuple())).split('.')[0])
445 days.append(str(time.mktime(date(today.year, 1, 1).timetuple())).split('.')[0]) 454 days.append(str(time.mktime(date(today.year, 1, 1).timetuple())).split('.')[0])
446 455
447 456
448 app_rec_to_insert = [] 457 app_rec_to_insert = []
449 for day in days: 458 for day in days:
450 for i in range(0, 12): 459 for i in range(0, 12):
451 time_end_1 = {'time_end': int(day) + 28800 + i * 1000, 'id':str(uuid.uuid4()).replace('-', '')} 460 time_end_1 = {'time_end': int(day) + 28800 + i * 1000, 'id':str(uuid.uuid4()).replace('-', '')}
452 time_end_2 = {'time_end': int(day) + 29800 + i * 500, 'id':str(uuid.uuid4()).replace('-', '')} 461 time_end_2 = {'time_end': int(day) + 29800 + i * 500, 'id':str(uuid.uuid4()).replace('-', '')}
453 study_app = study_apps[i].copy() 462 study_app = study_apps[i].copy()
454 study_app.update(time_end_1) 463 study_app.update(time_end_1)
455 game_app = game_apps[i].copy() 464 game_app = game_apps[i].copy()
456 game_app.update(time_end_2) 465 game_app.update(time_end_2)
457 app_rec_to_insert.append(study_app) 466 app_rec_to_insert.append(study_app)
458 app_rec_to_insert.append(game_app) 467 app_rec_to_insert.append(game_app)
459 468
460 for rec in app_rec_to_insert: 469 for rec in app_rec_to_insert:
461 db.insert('analytics.app_record', rec) 470 db.insert('analytics.app_record', rec)
462 471
463 472
464 473
465 474
466 475
467 476
468 477
469 478
470 479
471 480
472 481
473 482
474 483
475 484
476 485
477 486
478 487
479 488
480 489
481 490
482 491
483 492
484 493
485 494
data_fixture/mysql_db.py
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 import configparser 4 import configparser
5 import pymysql.cursors 5 import pymysql.cursors
6 import os 6 import os
7 7
8 from . import config_data as Data 8 from . import config_data as Data
9 # 9 #
10 # base_dir = str(os.path.dirname(os.path.dirname(__file__))) 10 # base_dir = str(os.path.dirname(os.path.dirname(__file__)))
11 # config_dir = base_dir.replace('\\', '/') 11 # config_dir = base_dir.replace('\\', '/')
12 # config_path = config_dir + '/config.ini' 12 # config_path = config_dir + '/config.ini'
13 # 13 #
14 # cp = configparser.ConfigParser() 14 # cp = configparser.ConfigParser()
15 # cp.read(config_path) 15 # cp.read(config_path)
16 # DB_host = cp.get('mysqlconf', 'host') 16 # DB_host = cp.get('mysqlconf', 'host')
17 # DB_port = cp.get('mysqlconf', 'port') 17 # DB_port = cp.get('mysqlconf', 'port')
18 # DB_username = cp.get('mysqlconf', 'user') 18 # DB_username = cp.get('mysqlconf', 'user')
19 # DB_password = cp.get('mysqlconf', 'password') 19 # DB_password = cp.get('mysqlconf', 'password')
20 # DB_dbName = cp.get('mysqlconf', 'db_name') 20 # DB_dbName = cp.get('mysqlconf', 'db_name')
21 21
22 22
23 class DB: 23 class DB:
24 24
25 def __init__ (self): 25 def __init__ (self):
26 try: 26 try:
27 self.connection = pymysql.connect(host=Data.DB_HOST, 27 self.connection = pymysql.connect(host=Data.DB_HOST,
28 port=Data.DB_PORT, 28 port=Data.DB_PORT,
29 user=Data.DB_USERNAME, 29 user=Data.DB_USERNAME,
30 password=Data.DB_PASSWORD, 30 password=Data.DB_PASSWORD,
31 charset='utf8mb4', 31 charset='utf8mb4',
32 connect_timeout=3600, 32 connect_timeout=10000,
33 cursorclass=pymysql.cursors.DictCursor 33 cursorclass=pymysql.cursors.DictCursor
34 ) 34 )
35 except pymysql.err.OperationalError as e: 35 except pymysql.err.OperationalError as e:
36 print ("MySql error %d: %s" % (e.args[0], e.args[1])) 36 print ("MySql error %d: %s" % (e.args[0], e.args[1]))
37 37
38 def select(self, sql): 38 def select(self, sql):
39 with self.connection.cursor() as cursor: 39 with self.connection.cursor() as cursor:
40 if cursor.execute(sql): 40 if cursor.execute(sql):
41 return cursor.fetchall() 41 return cursor.fetchall()
42 else: 42 else:
43 return None 43 return None
44 44
45 def select_(self, tabel_name, where_data_equal, where_data_unequal = None ): 45 def select_(self, tabel_name, where_data_equal, where_data_unequal = None ):
46 sql_where = ' and '.join("{} = '{}' ".format(key, value) for (key, value) in where_data_equal.items()) 46 sql_where = ' and '.join("{} = '{}' ".format(key, value) for (key, value) in where_data_equal.items())
47 if where_data_unequal: 47 if where_data_unequal:
48 sql_where = sql_where + ' and ' + where_data_unequal 48 sql_where = sql_where + ' and ' + where_data_unequal
49 sql = 'select count(1) from ' + tabel_name + ' where ' + sql_where 49 sql = 'select count(1) from ' + tabel_name + ' where ' + sql_where
50 with self.connection.cursor() as cursor: 50 with self.connection.cursor() as cursor:
51 cursor.execute(sql) 51 cursor.execute(sql)
52 result = cursor.fetchone() 52 result = cursor.fetchone()
53 return result['count(1)'] 53 return result['count(1)']
54 54
55 55
56 def insert(self, table_name, table_data): 56 def insert(self, table_name, table_data):
57 for key in table_data: 57 for key in table_data:
58 table_data[key] = " '" + str(table_data[key]) + "'" 58 table_data[key] = " '" + str(table_data[key]) + "'"
59 key = ','.join(table_data.keys()) 59 key = ','.join(table_data.keys())
60 value = ','.join(table_data.values()) 60 value = ','.join(table_data.values())
61 real_sql = 'INSERT INTO ' + table_name + " (" + key + " ) VALUES ( "\ 61 real_sql = 'INSERT INTO ' + table_name + " (" + key + " ) VALUES ( "\
62 + value + " )" 62 + value + " )"
63 with self.connection.cursor() as cursor: 63 with self.connection.cursor() as cursor:
64 cursor.execute(real_sql) 64 cursor.execute(real_sql)
65 self.connection.commit() 65 self.connection.commit()
66 66
67
67 def update(self, table_name, set_data, where_data): 68 def update(self, table_name, set_data, where_data):
68 sql_set = ','.join("{}='{}'".format(key, value) for (key, value) in set_data.items()) 69 sql_set = ','.join("{}='{}'".format(key, value) for (key, value) in set_data.items())
69 sql_where = ' and '.join("{}='{}'".format(key, value) for (key, value) in where_data.items()) 70 sql_where = ' and '.join("{}='{}'".format(key, value) for (key, value) in where_data.items())
70 print(sql_set, sql_where) 71 print(sql_set, sql_where)
71 real_sql = "UPDATE " + table_name + " SET " + sql_set + " WHERE " + sql_where 72 real_sql = "UPDATE " + table_name + " SET " + sql_set + " WHERE " + sql_where
72 73
73 with self.connection.cursor() as cursor: 74 with self.connection.cursor() as cursor:
74 cursor.execute(real_sql) 75 cursor.execute(real_sql)
75 self.connection.commit() 76 self.connection.commit()
76 77
77 78
78 def update_(self, sql): 79 def update_(self, sql):
79 with self.connection.cursor() as cursor: 80 with self.connection.cursor() as cursor:
80 cursor.execute(sql) 81 cursor.execute(sql)
81 self.connection.commit() 82 self.connection.commit()
82 83
83 84
84 def close(self): 85 def close(self):
85 self.connection.close() 86 self.connection.close()
86 87
87 88
88 89
89 90
report/test_report copy.html
File was created 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml">
4 <head>
5 <title>Unit Test Report</title>
6 <meta name="generator" content="HTMLTestRunner 0.8.2"/>
7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
8
9 <style type="text/css" media="screen">
10 body { font-family: verdana, arial, helvetica, sans-serif; font-size: 80%; }
11 table { font-size: 100%; }
12 pre { }
13
14 /* -- heading ---------------------------------------------------------------------- */
15 h1 {
16 font-size: 16pt;
17 color: gray;
18 }
19 .heading {
20 margin-top: 0ex;
21 margin-bottom: 1ex;
22 }
23
24 .heading .attribute {
25 margin-top: 1ex;
26 margin-bottom: 0;
27 }
28
29 .heading .description {
30 margin-top: 4ex;
31 margin-bottom: 6ex;
32 }
33
34 /* -- css div popup ------------------------------------------------------------------------ */
35 a.popup_link {
36 }
37
38 a.popup_link:hover {
39 color: red;
40 }
41
42 .popup_window {
43 display: none;
44 position: relative;
45 left: 0px;
46 top: 0px;
47 /*border: solid #627173 1px; */
48 padding: 10px;
49 background-color: #E6E6D6;
50 font-family: "Lucida Console", "Courier New", Courier, monospace;
51 text-align: left;
52 font-size: 8pt;
53 width: 500px;
54 }
55
56 }
57 /* -- report ------------------------------------------------------------------------ */
58 #show_detail_line {
59 margin-top: 3ex;
60 margin-bottom: 1ex;
61 }
62 #result_table {
63 width: 80%;
64 border-collapse: collapse;
65 border: 1px solid #777;
66 }
67 #header_row {
68 font-weight: bold;
69 color: white;
70 background-color: #777;
71 }
72 #result_table td {
73 border: 1px solid #777;
74 padding: 2px;
75 }
76 #total_row { font-weight: bold; }
77 .passClass { background-color: #6c6; }
78 .failClass { background-color: #c60; }
79 .errorClass { background-color: #c00; }
80 .passCase { color: #6c6; }
81 .failCase { color: #c60; font-weight: bold; }
82 .errorCase { color: #c00; font-weight: bold; }
83 .hiddenRow { display: none; }
84 .testcase { margin-left: 2em; }
85
86
87 /* -- ending ---------------------------------------------------------------------- */
88 #ending {
89 }
90
91 </style>
92
93 </head>
94 <body>
95 <script language="javascript" type="text/javascript"><!--
96 output_list = Array();
97
98 /* level - 0:Summary; 1:Failed; 2:All */
99 function showCase(level) {
100 trs = document.getElementsByTagName("tr");
101 for (var i = 0; i < trs.length; i++) {
102 tr = trs[i];
103 id = tr.id;
104 if (id.substr(0,2) == 'ft') {
105 if (level < 1) {
106 tr.className = 'hiddenRow';
107 }
108 else {
109 tr.className = '';
110 }
111 }
112 if (id.substr(0,2) == 'pt') {
113 if (level > 1) {
114 tr.className = '';
115 }
116 else {
117 tr.className = 'hiddenRow';
118 }
119 }
120 }
121 }
122
123
124 function showClassDetail(cid, count) {
125 var id_list = Array(count);
126 var toHide = 1;
127 for (var i = 0; i < count; i++) {
128 tid0 = 't' + cid.substr(1) + '.' + (i+1);
129 tid = 'f' + tid0;
130 tr = document.getElementById(tid);
131 if (!tr) {
132 tid = 'p' + tid0;
133 tr = document.getElementById(tid);
134 }
135 id_list[i] = tid;
136 if (tr.className) {
137 toHide = 0;
138 }
139 }
140 for (var i = 0; i < count; i++) {
141 tid = id_list[i];
142 if (toHide) {
143 document.getElementById('div_'+tid).style.display = 'none'
144 document.getElementById(tid).className = 'hiddenRow';
145 }
146 else {
147 document.getElementById(tid).className = '';
148 }
149 }
150 }
151
152
153 function showTestDetail(div_id){
154 var details_div = document.getElementById(div_id)
155 var displayState = details_div.style.display
156 // alert(displayState)
157 if (displayState != 'block' ) {
158 displayState = 'block'
159 details_div.style.display = 'block'
160 }
161 else {
162 details_div.style.display = 'none'
163 }
164 }
165
166
167 function html_escape(s) {
168 s = s.replace(/&/g,'&amp;');
169 s = s.replace(/</g,'&lt;');
170 s = s.replace(/>/g,'&gt;');
171 return s;
172 }
173
174 /* obsoleted by detail in <div>
175 function showOutput(id, name) {
176 var w = window.open("", //url
177 name,
178 "resizable,scrollbars,status,width=800,height=450");
179 d = w.document;
180 d.write("<pre>");
181 d.write(html_escape(output_list[id]));
182 d.write("\n");
183 d.write("<a href='javascript:window.close()'>close</a>\n");
184 d.write("</pre>\n");
185 d.close();
186 }
187 */
188 --></script>
189
190 <div class='heading'>
191 <h1>Unit Test Report</h1>
192 <p class='attribute'><strong>Start Time:</strong> 2018-01-15 11:22:52</p>
193 <p class='attribute'><strong>Duration:</strong> 0:01:10.454840</p>
194 <p class='attribute'><strong>Status:</strong> Pass 64 Failure 1 Error 7</p>
195
196 <p class='description'></p>
197 </div>
198
199
200
201 <p id='show_detail_line'>Show
202 <a href='javascript:showCase(0)'>Summary</a>
203 <a href='javascript:showCase(1)'>Failed</a>
204 <a href='javascript:showCase(2)'>All</a>
205 </p>
206 <table id='result_table'>
207 <colgroup>
208 <col align='left' />
209 <col align='right' />
210 <col align='right' />
211 <col align='right' />
212 <col align='right' />
213 <col align='right' />
214 </colgroup>
215 <tr id='header_row'>
216 <td>Test Group/Test case</td>
217 <td>Count</td>
218 <td>Pass</td>
219 <td>Fail</td>
220 <td>Error</td>
221 <td>View</td>
222 </tr>
223
224 <tr class='passClass'>
225 <td>app_record_statistic.AppRecordEveryday</td>
226 <td>1</td>
227 <td>1</td>
228 <td>0</td>
229 <td>0</td>
230 <td><a href="javascript:showClassDetail('c1',1)">Detail</a></td>
231 </tr>
232
233 <tr id='pt1.1' class='hiddenRow'>
234 <td class='none'><div class='testcase'>test_getAppRecordEveryday_success</div></td>
235 <td colspan='5' align='center'>pass</td>
236 </tr>
237
238 <tr class='passClass'>
239 <td>app_record_statistic.AppRecordOneday</td>
240 <td>1</td>
241 <td>1</td>
242 <td>0</td>
243 <td>0</td>
244 <td><a href="javascript:showClassDetail('c2',1)">Detail</a></td>
245 </tr>
246
247 <tr id='pt2.1' class='hiddenRow'>
248 <td class='none'><div class='testcase'>test_getAppRecordOneday_success</div></td>
249 <td colspan='5' align='center'>pass</td>
250 </tr>
251
252 <tr class='passClass'>
253 <td>app_record_statistic.AppRecordReset</td>
254 <td>2</td>
255 <td>2</td>
256 <td>0</td>
257 <td>0</td>
258 <td><a href="javascript:showClassDetail('c3',2)">Detail</a></td>
259 </tr>
260
261 <tr id='pt3.1' class='hiddenRow'>
262 <td class='none'><div class='testcase'>test_AppRecordReset_passwordError</div></td>
263 <td colspan='5' align='center'>pass</td>
264 </tr>
265
266 <tr id='pt3.2' class='hiddenRow'>
267 <td class='none'><div class='testcase'>test_AppRecordReset_success</div></td>
268 <td colspan='5' align='center'>pass</td>
269 </tr>
270
271 <tr class='passClass'>
272 <td>app_record_statistic.AppRecordSave</td>
273 <td>1</td>
274 <td>1</td>
275 <td>0</td>
276 <td>0</td>
277 <td><a href="javascript:showClassDetail('c4',1)">Detail</a></td>
278 </tr>
279
280 <tr id='pt4.1' class='hiddenRow'>
281 <td class='none'><div class='testcase'>test_AppRecordSave_success</div></td>
282 <td colspan='5' align='center'>
283
284 <!--css div popup start-->
285 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt4.1')" >
286 pass</a>
287
288 <div id='div_pt4.1' class="popup_window">
289 <div style='text-align: right; color:red;cursor:pointer'>
290 <a onfocus='this.blur();' onclick="document.getElementById('div_pt4.1').style.display = 'none' " >
291 [x]</a>
292 </div>
293 <pre>
294
295 pt4.1:
296
297 </pre>
298 </div>
299 <!--css div popup end-->
300
301 </td>
302 </tr>
303
304 <tr class='passClass'>
305 <td>app_record_statistic.AppRecordStats</td>
306 <td>4</td>
307 <td>4</td>
308 <td>0</td>
309 <td>0</td>
310 <td><a href="javascript:showClassDetail('c5',4)">Detail</a></td>
311 </tr>
312
313 <tr id='pt5.1' class='hiddenRow'>
314 <td class='none'><div class='testcase'>test_getAppRecordStats_all_success</div></td>
315 <td colspan='5' align='center'>pass</td>
316 </tr>
317
318 <tr id='pt5.2' class='hiddenRow'>
319 <td class='none'><div class='testcase'>test_getAppRecordStats_month_success</div></td>
320 <td colspan='5' align='center'>pass</td>
321 </tr>
322
323 <tr id='pt5.3' class='hiddenRow'>
324 <td class='none'><div class='testcase'>test_getAppRecordStats_week_success</div></td>
325 <td colspan='5' align='center'>pass</td>
326 </tr>
327
328 <tr id='pt5.4' class='hiddenRow'>
329 <td class='none'><div class='testcase'>test_getAppRecordStats_year_success</div></td>
330 <td colspan='5' align='center'>pass</td>
331 </tr>
332
333 <tr class='passClass'>
334 <td>app_record_statistic.AppRecordToday</td>
335 <td>1</td>
336 <td>1</td>
337 <td>0</td>
338 <td>0</td>
339 <td><a href="javascript:showClassDetail('c6',1)">Detail</a></td>
340 </tr>
341
342 <tr id='pt6.1' class='hiddenRow'>
343 <td class='none'><div class='testcase'>test_AppRecordToday_success</div></td>
344 <td colspan='5' align='center'>pass</td>
345 </tr>
346
347 <tr class='passClass'>
348 <td>app_record_statistic.AppRecordTop</td>
349 <td>2</td>
350 <td>2</td>
351 <td>0</td>
352 <td>0</td>
353 <td><a href="javascript:showClassDetail('c7',2)">Detail</a></td>
354 </tr>
355
356 <tr id='pt7.1' class='hiddenRow'>
357 <td class='none'><div class='testcase'>test_getAppRecordTop_hjx</div></td>
358 <td colspan='5' align='center'>pass</td>
359 </tr>
360
361 <tr id='pt7.2' class='hiddenRow'>
362 <td class='none'><div class='testcase'>test_getAppRecordTop_other</div></td>
363 <td colspan='5' align='center'>pass</td>
364 </tr>
365
366 <tr class='passClass'>
367 <td>eleccard_check.CheckElecCardBind</td>
368 <td>3</td>
369 <td>3</td>
370 <td>0</td>
371 <td>0</td>
372 <td><a href="javascript:showClassDetail('c8',3)">Detail</a></td>
373 </tr>
374
375 <tr id='pt8.1' class='hiddenRow'>
376 <td class='none'><div class='testcase'>test_checkElecCard_customerMachine</div></td>
377 <td colspan='5' align='center'>
378
379 <!--css div popup start-->
380 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt8.1')" >
381 pass</a>
382
383 <div id='div_pt8.1' class="popup_window">
384 <div style='text-align: right; color:red;cursor:pointer'>
385 <a onfocus='this.blur();' onclick="document.getElementById('div_pt8.1').style.display = 'none' " >
386 [x]</a>
387 </div>
388 <pre>
389
390 pt8.1:
391
392 </pre>
393 </div>
394 <!--css div popup end-->
395
396 </td>
397 </tr>
398
399 <tr id='pt8.2' class='hiddenRow'>
400 <td class='none'><div class='testcase'>test_checkElecCard_sampleMachine</div></td>
401 <td colspan='5' align='center'>
402
403 <!--css div popup start-->
404 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt8.2')" >
405 pass</a>
406
407 <div id='div_pt8.2' class="popup_window">
408 <div style='text-align: right; color:red;cursor:pointer'>
409 <a onfocus='this.blur();' onclick="document.getElementById('div_pt8.2').style.display = 'none' " >
410 [x]</a>
411 </div>
412 <pre>
413
414 pt8.2:
415
416 </pre>
417 </div>
418 <!--css div popup end-->
419
420 </td>
421 </tr>
422
423 <tr id='pt8.3' class='hiddenRow'>
424 <td class='none'><div class='testcase'>test_checkElecCard_unbind</div></td>
425 <td colspan='5' align='center'>
426
427 <!--css div popup start-->
428 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt8.3')" >
429 pass</a>
430
431 <div id='div_pt8.3' class="popup_window">
432 <div style='text-align: right; color:red;cursor:pointer'>
433 <a onfocus='this.blur();' onclick="document.getElementById('div_pt8.3').style.display = 'none' " >
434 [x]</a>
435 </div>
436 <pre>
437
438 pt8.3:
439
440 </pre>
441 </div>
442 <!--css div popup end-->
443
444 </td>
445 </tr>
446
447 <tr class='passClass'>
448 <td>eleccard_check.GetCardInfo</td>
449 <td>1</td>
450 <td>1</td>
451 <td>0</td>
452 <td>0</td>
453 <td><a href="javascript:showClassDetail('c9',1)">Detail</a></td>
454 </tr>
455
456 <tr id='pt9.1' class='hiddenRow'>
457 <td class='none'><div class='testcase'>test_getCardInfo_success</div></td>
458 <td colspan='5' align='center'>
459
460 <!--css div popup start-->
461 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt9.1')" >
462 pass</a>
463
464 <div id='div_pt9.1' class="popup_window">
465 <div style='text-align: right; color:red;cursor:pointer'>
466 <a onfocus='this.blur();' onclick="document.getElementById('div_pt9.1').style.display = 'none' " >
467 [x]</a>
468 </div>
469 <pre>
470
471 pt9.1:
472
473 </pre>
474 </div>
475 <!--css div popup end-->
476
477 </td>
478 </tr>
479
480 <tr class='passClass'>
481 <td>eleccard_setUp.Card_Modify</td>
482 <td>2</td>
483 <td>2</td>
484 <td>0</td>
485 <td>0</td>
486 <td><a href="javascript:showClassDetail('c10',2)">Detail</a></td>
487 </tr>
488
489 <tr id='pt10.1' class='hiddenRow'>
490 <td class='none'><div class='testcase'>test_modifyCardInfo_address_success</div></td>
491 <td colspan='5' align='center'>
492
493 <!--css div popup start-->
494 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt10.1')" >
495 pass</a>
496
497 <div id='div_pt10.1' class="popup_window">
498 <div style='text-align: right; color:red;cursor:pointer'>
499 <a onfocus='this.blur();' onclick="document.getElementById('div_pt10.1').style.display = 'none' " >
500 [x]</a>
501 </div>
502 <pre>
503
504 pt10.1:
505
506 </pre>
507 </div>
508 <!--css div popup end-->
509
510 </td>
511 </tr>
512
513 <tr id='pt10.2' class='hiddenRow'>
514 <td class='none'><div class='testcase'>test_modifyCardInfo_phone_success</div></td>
515 <td colspan='5' align='center'>
516
517 <!--css div popup start-->
518 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt10.2')" >
519 pass</a>
520
521 <div id='div_pt10.2' class="popup_window">
522 <div style='text-align: right; color:red;cursor:pointer'>
523 <a onfocus='this.blur();' onclick="document.getElementById('div_pt10.2').style.display = 'none' " >
524 [x]</a>
525 </div>
526 <pre>
527
528 pt10.2:
529
530 </pre>
531 </div>
532 <!--css div popup end-->
533
534 </td>
535 </tr>
536
537 <tr class='passClass'>
538 <td>eleccard_setUp.SetToCustomer</td>
539 <td>1</td>
540 <td>1</td>
541 <td>0</td>
542 <td>0</td>
543 <td><a href="javascript:showClassDetail('c11',1)">Detail</a></td>
544 </tr>
545
546 <tr id='pt11.1' class='hiddenRow'>
547 <td class='none'><div class='testcase'>test_updateToCustomer_success</div></td>
548 <td colspan='5' align='center'>pass</td>
549 </tr>
550
551 <tr class='passClass'>
552 <td>eleccard_setUp.SetToSample</td>
553 <td>1</td>
554 <td>1</td>
555 <td>0</td>
556 <td>0</td>
557 <td><a href="javascript:showClassDetail('c12',1)">Detail</a></td>
558 </tr>
559
560 <tr id='pt12.1' class='hiddenRow'>
561 <td class='none'><div class='testcase'>test_updateToSample_success</div></td>
562 <td colspan='5' align='center'>pass</td>
563 </tr>
564
565 <tr class='failClass'>
566 <td>eleccard_setUp.SetUpElecCard</td>
567 <td>1</td>
568 <td>0</td>
569 <td>1</td>
570 <td>0</td>
571 <td><a href="javascript:showClassDetail('c13',1)">Detail</a></td>
572 </tr>
573
574 <tr id='ft13.1' class='none'>
575 <td class='failCase'><div class='testcase'>test_addElecCard_success</div></td>
576 <td colspan='5' align='center'>
577
578 <!--css div popup start-->
579 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft13.1')" >
580 fail</a>
581
582 <div id='div_ft13.1' class="popup_window">
583 <div style='text-align: right; color:red;cursor:pointer'>
584 <a onfocus='this.blur();' onclick="document.getElementById('div_ft13.1').style.display = 'none' " >
585 [x]</a>
586 </div>
587 <pre>
588
589 ft13.1: Traceback (most recent call last):
590 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/eleccard_setUp.py", line 34, in test_addElecCard_success
591 self.assertEqual(self.result['status'], 1, 'addElecCard Error')
592 AssertionError: 2003 != 1 : addElecCard Error
593 Traceback (most recent call last):
594 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/eleccard_setUp.py", line 34, in test_addElecCard_success
595 self.assertEqual(self.result['status'], 1, 'addElecCard Error')
596 AssertionError: 2003 != 1 : addElecCard Error
597
598
599 </pre>
600 </div>
601 <!--css div popup end-->
602
603 </td>
604 </tr>
605
606 <tr class='passClass'>
607 <td>eleccard_setUp.Unbind</td>
608 <td>1</td>
609 <td>1</td>
610 <td>0</td>
611 <td>0</td>
612 <td><a href="javascript:showClassDetail('c14',1)">Detail</a></td>
613 </tr>
614
615 <tr id='pt14.1' class='hiddenRow'>
616 <td class='none'><div class='testcase'>test_unbindCard_success</div></td>
617 <td colspan='5' align='center'>pass</td>
618 </tr>
619
620 <tr class='passClass'>
621 <td>parent_space.ParentSpaceChangePassword</td>
622 <td>1</td>
623 <td>1</td>
624 <td>0</td>
625 <td>0</td>
626 <td><a href="javascript:showClassDetail('c15',1)">Detail</a></td>
627 </tr>
628
629 <tr id='pt15.1' class='hiddenRow'>
630 <td class='none'><div class='testcase'>test_ParentSpaceChangePassword_success</div></td>
631 <td colspan='5' align='center'>
632
633 <!--css div popup start-->
634 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt15.1')" >
635 pass</a>
636
637 <div id='div_pt15.1' class="popup_window">
638 <div style='text-align: right; color:red;cursor:pointer'>
639 <a onfocus='this.blur();' onclick="document.getElementById('div_pt15.1').style.display = 'none' " >
640 [x]</a>
641 </div>
642 <pre>
643
644 pt15.1:
645
646 </pre>
647 </div>
648 <!--css div popup end-->
649
650 </td>
651 </tr>
652
653 <tr class='passClass'>
654 <td>parent_space.ParentSpaceLogin</td>
655 <td>2</td>
656 <td>2</td>
657 <td>0</td>
658 <td>0</td>
659 <td><a href="javascript:showClassDetail('c16',2)">Detail</a></td>
660 </tr>
661
662 <tr id='pt16.1' class='hiddenRow'>
663 <td class='none'><div class='testcase'>test_ParentSpaceLogin_WrongPassword</div></td>
664 <td colspan='5' align='center'>
665
666 <!--css div popup start-->
667 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt16.1')" >
668 pass</a>
669
670 <div id='div_pt16.1' class="popup_window">
671 <div style='text-align: right; color:red;cursor:pointer'>
672 <a onfocus='this.blur();' onclick="document.getElementById('div_pt16.1').style.display = 'none' " >
673 [x]</a>
674 </div>
675 <pre>
676
677 pt16.1:
678
679 </pre>
680 </div>
681 <!--css div popup end-->
682
683 </td>
684 </tr>
685
686 <tr id='pt16.2' class='hiddenRow'>
687 <td class='none'><div class='testcase'>test_ParentSpaceLogin_success</div></td>
688 <td colspan='5' align='center'>
689
690 <!--css div popup start-->
691 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt16.2')" >
692 pass</a>
693
694 <div id='div_pt16.2' class="popup_window">
695 <div style='text-align: right; color:red;cursor:pointer'>
696 <a onfocus='this.blur();' onclick="document.getElementById('div_pt16.2').style.display = 'none' " >
697 [x]</a>
698 </div>
699 <pre>
700
701 pt16.2:
702
703 </pre>
704 </div>
705 <!--css div popup end-->
706
707 </td>
708 </tr>
709
710 <tr class='passClass'>
711 <td>parent_space.ParentSpaceNewPassword</td>
712 <td>2</td>
713 <td>2</td>
714 <td>0</td>
715 <td>0</td>
716 <td><a href="javascript:showClassDetail('c17',2)">Detail</a></td>
717 </tr>
718
719 <tr id='pt17.1' class='hiddenRow'>
720 <td class='none'><div class='testcase'>test_ParentSpaceNewPassword_authCodeError</div></td>
721 <td colspan='5' align='center'>pass</td>
722 </tr>
723
724 <tr id='pt17.2' class='hiddenRow'>
725 <td class='none'><div class='testcase'>test_ParentSpaceNewPassword_success</div></td>
726 <td colspan='5' align='center'>pass</td>
727 </tr>
728
729 <tr class='passClass'>
730 <td>personal_info.AddorUpdateSignature</td>
731 <td>4</td>
732 <td>4</td>
733 <td>0</td>
734 <td>0</td>
735 <td><a href="javascript:showClassDetail('c18',4)">Detail</a></td>
736 </tr>
737
738 <tr id='pt18.1' class='hiddenRow'>
739 <td class='none'><div class='testcase'>test_AddChildSignature_success</div></td>
740 <td colspan='5' align='center'>
741
742 <!--css div popup start-->
743 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt18.1')" >
744 pass</a>
745
746 <div id='div_pt18.1' class="popup_window">
747 <div style='text-align: right; color:red;cursor:pointer'>
748 <a onfocus='this.blur();' onclick="document.getElementById('div_pt18.1').style.display = 'none' " >
749 [x]</a>
750 </div>
751 <pre>
752
753 pt18.1:
754
755 </pre>
756 </div>
757 <!--css div popup end-->
758
759 </td>
760 </tr>
761
762 <tr id='pt18.2' class='hiddenRow'>
763 <td class='none'><div class='testcase'>test_AddParentSignature_success</div></td>
764 <td colspan='5' align='center'>pass</td>
765 </tr>
766
767 <tr id='pt18.3' class='hiddenRow'>
768 <td class='none'><div class='testcase'>test_UpdateChildSignature_success</div></td>
769 <td colspan='5' align='center'>pass</td>
770 </tr>
771
772 <tr id='pt18.4' class='hiddenRow'>
773 <td class='none'><div class='testcase'>test_UpdateParentSignature_success</div></td>
774 <td colspan='5' align='center'>pass</td>
775 </tr>
776
777 <tr class='passClass'>
778 <td>personal_info.GetPersonalInfo</td>
779 <td>2</td>
780 <td>2</td>
781 <td>0</td>
782 <td>0</td>
783 <td><a href="javascript:showClassDetail('c19',2)">Detail</a></td>
784 </tr>
785
786 <tr id='pt19.1' class='hiddenRow'>
787 <td class='none'><div class='testcase'>test_getChildAccountInfo_success</div></td>
788 <td colspan='5' align='center'>pass</td>
789 </tr>
790
791 <tr id='pt19.2' class='hiddenRow'>
792 <td class='none'><div class='testcase'>test_getParentAccountInfo_success</div></td>
793 <td colspan='5' align='center'>pass</td>
794 </tr>
795
796 <tr class='passClass'>
797 <td>personal_info.GetSignature</td>
798 <td>2</td>
799 <td>2</td>
800 <td>0</td>
801 <td>0</td>
802 <td><a href="javascript:showClassDetail('c20',2)">Detail</a></td>
803 </tr>
804
805 <tr id='pt20.1' class='hiddenRow'>
806 <td class='none'><div class='testcase'>test_getChildSignature_success</div></td>
807 <td colspan='5' align='center'>pass</td>
808 </tr>
809
810 <tr id='pt20.2' class='hiddenRow'>
811 <td class='none'><div class='testcase'>test_getParentSignature_success</div></td>
812 <td colspan='5' align='center'>pass</td>
813 </tr>
814
815 <tr class='passClass'>
816 <td>personal_info.UpdatePersonalInfo</td>
817 <td>2</td>
818 <td>2</td>
819 <td>0</td>
820 <td>0</td>
821 <td><a href="javascript:showClassDetail('c21',2)">Detail</a></td>
822 </tr>
823
824 <tr id='pt21.1' class='hiddenRow'>
825 <td class='none'><div class='testcase'>test_UpdateChildInfo_success</div></td>
826 <td colspan='5' align='center'>
827
828 <!--css div popup start-->
829 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt21.1')" >
830 pass</a>
831
832 <div id='div_pt21.1' class="popup_window">
833 <div style='text-align: right; color:red;cursor:pointer'>
834 <a onfocus='this.blur();' onclick="document.getElementById('div_pt21.1').style.display = 'none' " >
835 [x]</a>
836 </div>
837 <pre>
838
839 pt21.1:
840
841 </pre>
842 </div>
843 <!--css div popup end-->
844
845 </td>
846 </tr>
847
848 <tr id='pt21.2' class='hiddenRow'>
849 <td class='none'><div class='testcase'>test_UpdateParentInfo_success</div></td>
850 <td colspan='5' align='center'>pass</td>
851 </tr>
852
853 <tr class='passClass'>
854 <td>personal_info.UpdatePortrait</td>
855 <td>2</td>
856 <td>2</td>
857 <td>0</td>
858 <td>0</td>
859 <td><a href="javascript:showClassDetail('c22',2)">Detail</a></td>
860 </tr>
861
862 <tr id='pt22.1' class='hiddenRow'>
863 <td class='none'><div class='testcase'>test_UpdateChildPortrait_success</div></td>
864 <td colspan='5' align='center'>
865
866 <!--css div popup start-->
867 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt22.1')" >
868 pass</a>
869
870 <div id='div_pt22.1' class="popup_window">
871 <div style='text-align: right; color:red;cursor:pointer'>
872 <a onfocus='this.blur();' onclick="document.getElementById('div_pt22.1').style.display = 'none' " >
873 [x]</a>
874 </div>
875 <pre>
876
877 pt22.1:
878
879 </pre>
880 </div>
881 <!--css div popup end-->
882
883 </td>
884 </tr>
885
886 <tr id='pt22.2' class='hiddenRow'>
887 <td class='none'><div class='testcase'>test_UpdateParentPortraitDefault_success</div></td>
888 <td colspan='5' align='center'>pass</td>
889 </tr>
890
891 <tr class='passClass'>
892 <td>personal_info.UpdatePortraitDefault</td>
893 <td>2</td>
894 <td>2</td>
895 <td>0</td>
896 <td>0</td>
897 <td><a href="javascript:showClassDetail('c23',2)">Detail</a></td>
898 </tr>
899
900 <tr id='pt23.1' class='hiddenRow'>
901 <td class='none'><div class='testcase'>test_UpdateChildPortraitDefault_success</div></td>
902 <td colspan='5' align='center'>pass</td>
903 </tr>
904
905 <tr id='pt23.2' class='hiddenRow'>
906 <td class='none'><div class='testcase'>test_UpdateParentPortraitDefault_success</div></td>
907 <td colspan='5' align='center'>pass</td>
908 </tr>
909
910 <tr class='passClass'>
911 <td>press.GetPressList</td>
912 <td>1</td>
913 <td>1</td>
914 <td>0</td>
915 <td>0</td>
916 <td><a href="javascript:showClassDetail('c24',1)">Detail</a></td>
917 </tr>
918
919 <tr id='pt24.1' class='hiddenRow'>
920 <td class='none'><div class='testcase'>test_getPressList_success</div></td>
921 <td colspan='5' align='center'>
922
923 <!--css div popup start-->
924 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt24.1')" >
925 pass</a>
926
927 <div id='div_pt24.1' class="popup_window">
928 <div style='text-align: right; color:red;cursor:pointer'>
929 <a onfocus='this.blur();' onclick="document.getElementById('div_pt24.1').style.display = 'none' " >
930 [x]</a>
931 </div>
932 <pre>
933
934 pt24.1:
935
936 </pre>
937 </div>
938 <!--css div popup end-->
939
940 </td>
941 </tr>
942
943 <tr class='passClass'>
944 <td>press.GetUserPressInfo</td>
945 <td>1</td>
946 <td>1</td>
947 <td>0</td>
948 <td>0</td>
949 <td><a href="javascript:showClassDetail('c25',1)">Detail</a></td>
950 </tr>
951
952 <tr id='pt25.1' class='hiddenRow'>
953 <td class='none'><div class='testcase'>test_getPressList_success</div></td>
954 <td colspan='5' align='center'>
955
956 <!--css div popup start-->
957 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt25.1')" >
958 pass</a>
959
960 <div id='div_pt25.1' class="popup_window">
961 <div style='text-align: right; color:red;cursor:pointer'>
962 <a onfocus='this.blur();' onclick="document.getElementById('div_pt25.1').style.display = 'none' " >
963 [x]</a>
964 </div>
965 <pre>
966
967 pt25.1:
968
969 </pre>
970 </div>
971 <!--css div popup end-->
972
973 </td>
974 </tr>
975
976 <tr class='errorClass'>
977 <td>press.UpdateUserPressInfo</td>
978 <td>1</td>
979 <td>0</td>
980 <td>0</td>
981 <td>1</td>
982 <td><a href="javascript:showClassDetail('c26',1)">Detail</a></td>
983 </tr>
984
985 <tr id='ft26.1' class='none'>
986 <td class='errorCase'><div class='testcase'>test_getPressList_success</div></td>
987 <td colspan='5' align='center'>
988
989 <!--css div popup start-->
990 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft26.1')" >
991 error</a>
992
993 <div id='div_ft26.1' class="popup_window">
994 <div style='text-align: right; color:red;cursor:pointer'>
995 <a onfocus='this.blur();' onclick="document.getElementById('div_ft26.1').style.display = 'none' " >
996 [x]</a>
997 </div>
998 <pre>
999
1000 ft26.1: Traceback (most recent call last):
1001 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/press.py", line 88, in test_getPressList_success
1002 self.assertEqual(db_test.select_('acornuser.user_press', where), 1, 'UpdateUserPressInfo data Error')
1003 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1004 cursor.execute(sql)
1005 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1006 result = self._query(query)
1007 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1008 conn.query(q)
1009 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 856, in query
1010 self._affected_rows = self._read_query_result(unbuffered=unbuffered)
1011 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1057, in _read_query_result
1012 result.read()
1013 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1340, in read
1014 first_packet = self.connection._read_packet()
1015 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 987, in _read_packet
1016 packet_header = self._read_bytes(4)
1017 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1033, in _read_bytes
1018 CR.CR_SERVER_LOST, "Lost connection to MySQL server during query")
1019 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
1020 Traceback (most recent call last):
1021 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/press.py", line 88, in test_getPressList_success
1022 self.assertEqual(db_test.select_('acornuser.user_press', where), 1, 'UpdateUserPressInfo data Error')
1023 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1024 cursor.execute(sql)
1025 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1026 result = self._query(query)
1027 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1028 conn.query(q)
1029 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 856, in query
1030 self._affected_rows = self._read_query_result(unbuffered=unbuffered)
1031 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1057, in _read_query_result
1032 result.read()
1033 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1340, in read
1034 first_packet = self.connection._read_packet()
1035 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 987, in _read_packet
1036 packet_header = self._read_bytes(4)
1037 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1033, in _read_bytes
1038 CR.CR_SERVER_LOST, "Lost connection to MySQL server during query")
1039 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
1040
1041
1042 </pre>
1043 </div>
1044 <!--css div popup end-->
1045
1046 </td>
1047 </tr>
1048
1049 <tr class='passClass'>
1050 <td>region_grade_school.GetCities</td>
1051 <td>1</td>
1052 <td>1</td>
1053 <td>0</td>
1054 <td>0</td>
1055 <td><a href="javascript:showClassDetail('c27',1)">Detail</a></td>
1056 </tr>
1057
1058 <tr id='pt27.1' class='hiddenRow'>
1059 <td class='none'><div class='testcase'>test_getCities_success</div></td>
1060 <td colspan='5' align='center'>
1061
1062 <!--css div popup start-->
1063 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt27.1')" >
1064 pass</a>
1065
1066 <div id='div_pt27.1' class="popup_window">
1067 <div style='text-align: right; color:red;cursor:pointer'>
1068 <a onfocus='this.blur();' onclick="document.getElementById('div_pt27.1').style.display = 'none' " >
1069 [x]</a>
1070 </div>
1071 <pre>
1072
1073 pt27.1:
1074
1075 </pre>
1076 </div>
1077 <!--css div popup end-->
1078
1079 </td>
1080 </tr>
1081
1082 <tr class='passClass'>
1083 <td>region_grade_school.GetCounties</td>
1084 <td>1</td>
1085 <td>1</td>
1086 <td>0</td>
1087 <td>0</td>
1088 <td><a href="javascript:showClassDetail('c28',1)">Detail</a></td>
1089 </tr>
1090
1091 <tr id='pt28.1' class='hiddenRow'>
1092 <td class='none'><div class='testcase'>test_getCounties_success</div></td>
1093 <td colspan='5' align='center'>
1094
1095 <!--css div popup start-->
1096 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt28.1')" >
1097 pass</a>
1098
1099 <div id='div_pt28.1' class="popup_window">
1100 <div style='text-align: right; color:red;cursor:pointer'>
1101 <a onfocus='this.blur();' onclick="document.getElementById('div_pt28.1').style.display = 'none' " >
1102 [x]</a>
1103 </div>
1104 <pre>
1105
1106 pt28.1:
1107
1108 </pre>
1109 </div>
1110 <!--css div popup end-->
1111
1112 </td>
1113 </tr>
1114
1115 <tr class='passClass'>
1116 <td>region_grade_school.GetGrades</td>
1117 <td>1</td>
1118 <td>1</td>
1119 <td>0</td>
1120 <td>0</td>
1121 <td><a href="javascript:showClassDetail('c29',1)">Detail</a></td>
1122 </tr>
1123
1124 <tr id='pt29.1' class='hiddenRow'>
1125 <td class='none'><div class='testcase'>test_getGrades_success</div></td>
1126 <td colspan='5' align='center'>
1127
1128 <!--css div popup start-->
1129 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt29.1')" >
1130 pass</a>
1131
1132 <div id='div_pt29.1' class="popup_window">
1133 <div style='text-align: right; color:red;cursor:pointer'>
1134 <a onfocus='this.blur();' onclick="document.getElementById('div_pt29.1').style.display = 'none' " >
1135 [x]</a>
1136 </div>
1137 <pre>
1138
1139 pt29.1:
1140
1141 </pre>
1142 </div>
1143 <!--css div popup end-->
1144
1145 </td>
1146 </tr>
1147
1148 <tr class='passClass'>
1149 <td>region_grade_school.GetProvince</td>
1150 <td>1</td>
1151 <td>1</td>
1152 <td>0</td>
1153 <td>0</td>
1154 <td><a href="javascript:showClassDetail('c30',1)">Detail</a></td>
1155 </tr>
1156
1157 <tr id='pt30.1' class='hiddenRow'>
1158 <td class='none'><div class='testcase'>test_getProvince_success</div></td>
1159 <td colspan='5' align='center'>
1160
1161 <!--css div popup start-->
1162 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt30.1')" >
1163 pass</a>
1164
1165 <div id='div_pt30.1' class="popup_window">
1166 <div style='text-align: right; color:red;cursor:pointer'>
1167 <a onfocus='this.blur();' onclick="document.getElementById('div_pt30.1').style.display = 'none' " >
1168 [x]</a>
1169 </div>
1170 <pre>
1171
1172 pt30.1:
1173
1174 </pre>
1175 </div>
1176 <!--css div popup end-->
1177
1178 </td>
1179 </tr>
1180
1181 <tr class='passClass'>
1182 <td>region_grade_school.GetSchools</td>
1183 <td>1</td>
1184 <td>1</td>
1185 <td>0</td>
1186 <td>0</td>
1187 <td><a href="javascript:showClassDetail('c31',1)">Detail</a></td>
1188 </tr>
1189
1190 <tr id='pt31.1' class='hiddenRow'>
1191 <td class='none'><div class='testcase'>test_getSchools_success</div></td>
1192 <td colspan='5' align='center'>
1193
1194 <!--css div popup start-->
1195 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt31.1')" >
1196 pass</a>
1197
1198 <div id='div_pt31.1' class="popup_window">
1199 <div style='text-align: right; color:red;cursor:pointer'>
1200 <a onfocus='this.blur();' onclick="document.getElementById('div_pt31.1').style.display = 'none' " >
1201 [x]</a>
1202 </div>
1203 <pre>
1204
1205 pt31.1:
1206
1207 </pre>
1208 </div>
1209 <!--css div popup end-->
1210
1211 </td>
1212 </tr>
1213
1214 <tr class='errorClass'>
1215 <td>register.AddFeedBack</td>
1216 <td>1</td>
1217 <td>0</td>
1218 <td>0</td>
1219 <td>1</td>
1220 <td><a href="javascript:showClassDetail('c32',1)">Detail</a></td>
1221 </tr>
1222
1223 <tr id='ft32.1' class='none'>
1224 <td class='errorCase'><div class='testcase'>test_AddFeedBack_success</div></td>
1225 <td colspan='5' align='center'>
1226
1227 <!--css div popup start-->
1228 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft32.1')" >
1229 error</a>
1230
1231 <div id='div_ft32.1' class="popup_window">
1232 <div style='text-align: right; color:red;cursor:pointer'>
1233 <a onfocus='this.blur();' onclick="document.getElementById('div_ft32.1').style.display = 'none' " >
1234 [x]</a>
1235 </div>
1236 <pre>
1237
1238 ft32.1: Traceback (most recent call last):
1239 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/register.py", line 213, in test_AddFeedBack_success
1240 self.assertTrue(db_test.select_('acornuser.feedback', select) &gt; 0, 'AddFeedBack data insert Error')
1241 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1242 cursor.execute(sql)
1243 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1244 result = self._query(query)
1245 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1246 conn.query(q)
1247 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 856, in query
1248 self._affected_rows = self._read_query_result(unbuffered=unbuffered)
1249 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1057, in _read_query_result
1250 result.read()
1251 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1340, in read
1252 first_packet = self.connection._read_packet()
1253 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 987, in _read_packet
1254 packet_header = self._read_bytes(4)
1255 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1033, in _read_bytes
1256 CR.CR_SERVER_LOST, "Lost connection to MySQL server during query")
1257 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
1258 Traceback (most recent call last):
1259 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/register.py", line 213, in test_AddFeedBack_success
1260 self.assertTrue(db_test.select_('acornuser.feedback', select) &gt; 0, 'AddFeedBack data insert Error')
1261 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1262 cursor.execute(sql)
1263 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1264 result = self._query(query)
1265 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1266 conn.query(q)
1267 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 856, in query
1268 self._affected_rows = self._read_query_result(unbuffered=unbuffered)
1269 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1057, in _read_query_result
1270 result.read()
1271 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1340, in read
1272 first_packet = self.connection._read_packet()
1273 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 987, in _read_packet
1274 packet_header = self._read_bytes(4)
1275 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1033, in _read_bytes
1276 CR.CR_SERVER_LOST, "Lost connection to MySQL server during query")
1277 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
1278
1279
1280 </pre>
1281 </div>
1282 <!--css div popup end-->
1283
1284 </td>
1285 </tr>
1286
1287 <tr class='passClass'>
1288 <td>register.GetAuthCode</td>
1289 <td>1</td>
1290 <td>1</td>
1291 <td>0</td>
1292 <td>0</td>
1293 <td><a href="javascript:showClassDetail('c33',1)">Detail</a></td>
1294 </tr>
1295
1296 <tr id='pt33.1' class='hiddenRow'>
1297 <td class='none'><div class='testcase'>test_getAuthCode_success</div></td>
1298 <td colspan='5' align='center'>
1299
1300 <!--css div popup start-->
1301 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt33.1')" >
1302 pass</a>
1303
1304 <div id='div_pt33.1' class="popup_window">
1305 <div style='text-align: right; color:red;cursor:pointer'>
1306 <a onfocus='this.blur();' onclick="document.getElementById('div_pt33.1').style.display = 'none' " >
1307 [x]</a>
1308 </div>
1309 <pre>
1310
1311 pt33.1:
1312
1313 </pre>
1314 </div>
1315 <!--css div popup end-->
1316
1317 </td>
1318 </tr>
1319
1320 <tr class='passClass'>
1321 <td>register.GetRecentVideo</td>
1322 <td>2</td>
1323 <td>2</td>
1324 <td>0</td>
1325 <td>0</td>
1326 <td><a href="javascript:showClassDetail('c34',2)">Detail</a></td>
1327 </tr>
1328
1329 <tr id='pt34.1' class='hiddenRow'>
1330 <td class='none'><div class='testcase'>test_GetRecentVideo_noVideo_success</div></td>
1331 <td colspan='5' align='center'>pass</td>
1332 </tr>
1333
1334 <tr id='pt34.2' class='hiddenRow'>
1335 <td class='none'><div class='testcase'>test_GetRecentVideo_success</div></td>
1336 <td colspan='5' align='center'>pass</td>
1337 </tr>
1338
1339 <tr class='passClass'>
1340 <td>register.PhoneUsedCheck</td>
1341 <td>2</td>
1342 <td>2</td>
1343 <td>0</td>
1344 <td>0</td>
1345 <td><a href="javascript:showClassDetail('c35',2)">Detail</a></td>
1346 </tr>
1347
1348 <tr id='pt35.1' class='hiddenRow'>
1349 <td class='none'><div class='testcase'>test_phone_unused</div></td>
1350 <td colspan='5' align='center'>
1351
1352 <!--css div popup start-->
1353 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt35.1')" >
1354 pass</a>
1355
1356 <div id='div_pt35.1' class="popup_window">
1357 <div style='text-align: right; color:red;cursor:pointer'>
1358 <a onfocus='this.blur();' onclick="document.getElementById('div_pt35.1').style.display = 'none' " >
1359 [x]</a>
1360 </div>
1361 <pre>
1362
1363 pt35.1:
1364
1365 </pre>
1366 </div>
1367 <!--css div popup end-->
1368
1369 </td>
1370 </tr>
1371
1372 <tr id='pt35.2' class='hiddenRow'>
1373 <td class='none'><div class='testcase'>test_phone_used</div></td>
1374 <td colspan='5' align='center'>
1375
1376 <!--css div popup start-->
1377 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt35.2')" >
1378 pass</a>
1379
1380 <div id='div_pt35.2' class="popup_window">
1381 <div style='text-align: right; color:red;cursor:pointer'>
1382 <a onfocus='this.blur();' onclick="document.getElementById('div_pt35.2').style.display = 'none' " >
1383 [x]</a>
1384 </div>
1385 <pre>
1386
1387 pt35.2:
1388
1389 </pre>
1390 </div>
1391 <!--css div popup end-->
1392
1393 </td>
1394 </tr>
1395
1396 <tr class='passClass'>
1397 <td>register.RegisterExtrainfoCheck</td>
1398 <td>2</td>
1399 <td>2</td>
1400 <td>0</td>
1401 <td>0</td>
1402 <td><a href="javascript:showClassDetail('c36',2)">Detail</a></td>
1403 </tr>
1404
1405 <tr id='pt36.1' class='hiddenRow'>
1406 <td class='none'><div class='testcase'>test_checkRegisterExtrainfo_Complete_success</div></td>
1407 <td colspan='5' align='center'>pass</td>
1408 </tr>
1409
1410 <tr id='pt36.2' class='hiddenRow'>
1411 <td class='none'><div class='testcase'>test_checkRegisterExtrainfo_inComplete_success</div></td>
1412 <td colspan='5' align='center'>pass</td>
1413 </tr>
1414
1415 <tr class='errorClass'>
1416 <td>register.RegisterExtrainfoSubmit</td>
1417 <td>1</td>
1418 <td>0</td>
1419 <td>0</td>
1420 <td>1</td>
1421 <td><a href="javascript:showClassDetail('c37',1)">Detail</a></td>
1422 </tr>
1423
1424 <tr id='ft37.1' class='none'>
1425 <td class='errorCase'><div class='testcase'>test_RegisterExtrainfoSubmit_success</div></td>
1426 <td colspan='5' align='center'>
1427
1428 <!--css div popup start-->
1429 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft37.1')" >
1430 error</a>
1431
1432 <div id='div_ft37.1' class="popup_window">
1433 <div style='text-align: right; color:red;cursor:pointer'>
1434 <a onfocus='this.blur();' onclick="document.getElementById('div_ft37.1').style.display = 'none' " >
1435 [x]</a>
1436 </div>
1437 <pre>
1438
1439 ft37.1: Traceback (most recent call last):
1440 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/register.py", line 143, in test_RegisterExtrainfoSubmit_success
1441 self.assertEqual(db_test.select_('acornuser.acorn_user', where_1), 1, 'RegisterExtrainfoSubmit Error')
1442 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1443 cursor.execute(sql)
1444 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1445 result = self._query(query)
1446 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1447 conn.query(q)
1448 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 855, in query
1449 self._execute_command(COMMAND.COM_QUERY, sql)
1450 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1071, in _execute_command
1451 raise err.InterfaceError("(0, '')")
1452 pymysql.err.InterfaceError: (0, '')
1453 Traceback (most recent call last):
1454 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/register.py", line 143, in test_RegisterExtrainfoSubmit_success
1455 self.assertEqual(db_test.select_('acornuser.acorn_user', where_1), 1, 'RegisterExtrainfoSubmit Error')
1456 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1457 cursor.execute(sql)
1458 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1459 result = self._query(query)
1460 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1461 conn.query(q)
1462 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 855, in query
1463 self._execute_command(COMMAND.COM_QUERY, sql)
1464 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1071, in _execute_command
1465 raise err.InterfaceError("(0, '')")
1466 pymysql.err.InterfaceError: (0, '')
1467
1468
1469 </pre>
1470 </div>
1471 <!--css div popup end-->
1472
1473 </td>
1474 </tr>
1475
1476 <tr class='passClass'>
1477 <td>register.SignIn</td>
1478 <td>1</td>
1479 <td>1</td>
1480 <td>0</td>
1481 <td>0</td>
1482 <td><a href="javascript:showClassDetail('c38',1)">Detail</a></td>
1483 </tr>
1484
1485 <tr id='pt38.1' class='hiddenRow'>
1486 <td class='none'><div class='testcase'>test_signIn_success</div></td>
1487 <td colspan='5' align='center'>
1488
1489 <!--css div popup start-->
1490 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt38.1')" >
1491 pass</a>
1492
1493 <div id='div_pt38.1' class="popup_window">
1494 <div style='text-align: right; color:red;cursor:pointer'>
1495 <a onfocus='this.blur();' onclick="document.getElementById('div_pt38.1').style.display = 'none' " >
1496 [x]</a>
1497 </div>
1498 <pre>
1499
1500 pt38.1:
1501
1502 </pre>
1503 </div>
1504 <!--css div popup end-->
1505
1506 </td>
1507 </tr>
1508
1509 <tr class='passClass'>
1510 <td>register.UpdateUserNameByUserId</td>
1511 <td>2</td>
1512 <td>2</td>
1513 <td>0</td>
1514 <td>0</td>
1515 <td><a href="javascript:showClassDetail('c39',2)">Detail</a></td>
1516 </tr>
1517
1518 <tr id='pt39.1' class='hiddenRow'>
1519 <td class='none'><div class='testcase'>test_UpdateUserNameByUserId_phoneExists_success</div></td>
1520 <td colspan='5' align='center'>
1521
1522 <!--css div popup start-->
1523 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt39.1')" >
1524 pass</a>
1525
1526 <div id='div_pt39.1' class="popup_window">
1527 <div style='text-align: right; color:red;cursor:pointer'>
1528 <a onfocus='this.blur();' onclick="document.getElementById('div_pt39.1').style.display = 'none' " >
1529 [x]</a>
1530 </div>
1531 <pre>
1532
1533 pt39.1:
1534
1535 </pre>
1536 </div>
1537 <!--css div popup end-->
1538
1539 </td>
1540 </tr>
1541
1542 <tr id='pt39.2' class='hiddenRow'>
1543 <td class='none'><div class='testcase'>test_UpdateUserNameByUserId_success</div></td>
1544 <td colspan='5' align='center'>
1545
1546 <!--css div popup start-->
1547 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt39.2')" >
1548 pass</a>
1549
1550 <div id='div_pt39.2' class="popup_window">
1551 <div style='text-align: right; color:red;cursor:pointer'>
1552 <a onfocus='this.blur();' onclick="document.getElementById('div_pt39.2').style.display = 'none' " >
1553 [x]</a>
1554 </div>
1555 <pre>
1556
1557 pt39.2:
1558
1559 </pre>
1560 </div>
1561 <!--css div popup end-->
1562
1563 </td>
1564 </tr>
1565
1566 <tr class='errorClass'>
1567 <td>sub_account.AddSubAccount</td>
1568 <td>1</td>
1569 <td>0</td>
1570 <td>0</td>
1571 <td>1</td>
1572 <td><a href="javascript:showClassDetail('c40',1)">Detail</a></td>
1573 </tr>
1574
1575 <tr id='ft40.1' class='none'>
1576 <td class='errorCase'><div class='testcase'>test_addSubAccount_success</div></td>
1577 <td colspan='5' align='center'>
1578
1579 <!--css div popup start-->
1580 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft40.1')" >
1581 error</a>
1582
1583 <div id='div_ft40.1' class="popup_window">
1584 <div style='text-align: right; color:red;cursor:pointer'>
1585 <a onfocus='this.blur();' onclick="document.getElementById('div_ft40.1').style.display = 'none' " >
1586 [x]</a>
1587 </div>
1588 <pre>
1589
1590 ft40.1: Traceback (most recent call last):
1591 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/sub_account.py", line 36, in test_addSubAccount_success
1592 self.assertEqual(db_test.select_('acornuser.child_user', {'parent_id': Data.PARENT_ID}), 1, 'addSubAccount Error')
1593 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1594 cursor.execute(sql)
1595 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1596 result = self._query(query)
1597 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1598 conn.query(q)
1599 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 856, in query
1600 self._affected_rows = self._read_query_result(unbuffered=unbuffered)
1601 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1057, in _read_query_result
1602 result.read()
1603 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1340, in read
1604 first_packet = self.connection._read_packet()
1605 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 987, in _read_packet
1606 packet_header = self._read_bytes(4)
1607 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1033, in _read_bytes
1608 CR.CR_SERVER_LOST, "Lost connection to MySQL server during query")
1609 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
1610 Traceback (most recent call last):
1611 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/sub_account.py", line 36, in test_addSubAccount_success
1612 self.assertEqual(db_test.select_('acornuser.child_user', {'parent_id': Data.PARENT_ID}), 1, 'addSubAccount Error')
1613 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1614 cursor.execute(sql)
1615 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1616 result = self._query(query)
1617 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1618 conn.query(q)
1619 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 856, in query
1620 self._affected_rows = self._read_query_result(unbuffered=unbuffered)
1621 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1057, in _read_query_result
1622 result.read()
1623 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1340, in read
1624 first_packet = self.connection._read_packet()
1625 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 987, in _read_packet
1626 packet_header = self._read_bytes(4)
1627 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1033, in _read_bytes
1628 CR.CR_SERVER_LOST, "Lost connection to MySQL server during query")
1629 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
1630
1631
1632 </pre>
1633 </div>
1634 <!--css div popup end-->
1635
1636 </td>
1637 </tr>
1638
1639 <tr class='errorClass'>
1640 <td>sub_account.DelSubAccount</td>
1641 <td>1</td>
1642 <td>0</td>
1643 <td>0</td>
1644 <td>1</td>
1645 <td><a href="javascript:showClassDetail('c41',1)">Detail</a></td>
1646 </tr>
1647
1648 <tr id='ft41.1' class='none'>
1649 <td class='errorCase'><div class='testcase'>test_delSubAccount_success</div></td>
1650 <td colspan='5' align='center'>
1651
1652 <!--css div popup start-->
1653 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft41.1')" >
1654 error</a>
1655
1656 <div id='div_ft41.1' class="popup_window">
1657 <div style='text-align: right; color:red;cursor:pointer'>
1658 <a onfocus='this.blur();' onclick="document.getElementById('div_ft41.1').style.display = 'none' " >
1659 [x]</a>
1660 </div>
1661 <pre>
1662
1663 ft41.1: Traceback (most recent call last):
1664 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/sub_account.py", line 76, in test_delSubAccount_success
1665 self.assertEqual(db_test.select_('acornuser.child_user', {'subAccountId': self.subAccount}), 0, 'delSubAccount Error')
1666 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1667 cursor.execute(sql)
1668 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1669 result = self._query(query)
1670 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1671 conn.query(q)
1672 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 855, in query
1673 self._execute_command(COMMAND.COM_QUERY, sql)
1674 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1071, in _execute_command
1675 raise err.InterfaceError("(0, '')")
1676 pymysql.err.InterfaceError: (0, '')
1677 Traceback (most recent call last):
1678 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/sub_account.py", line 76, in test_delSubAccount_success
1679 self.assertEqual(db_test.select_('acornuser.child_user', {'subAccountId': self.subAccount}), 0, 'delSubAccount Error')
1680 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1681 cursor.execute(sql)
1682 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1683 result = self._query(query)
1684 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1685 conn.query(q)
1686 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 855, in query
1687 self._execute_command(COMMAND.COM_QUERY, sql)
1688 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1071, in _execute_command
1689 raise err.InterfaceError("(0, '')")
1690 pymysql.err.InterfaceError: (0, '')
1691
1692
1693 </pre>
1694 </div>
1695 <!--css div popup end-->
1696
1697 </td>
1698 </tr>
1699
1700 <tr class='passClass'>
1701 <td>sub_account.GetSubAccount</td>
1702 <td>1</td>
1703 <td>1</td>
1704 <td>0</td>
1705 <td>0</td>
1706 <td><a href="javascript:showClassDetail('c42',1)">Detail</a></td>
1707 </tr>
1708
1709 <tr id='pt42.1' class='hiddenRow'>
1710 <td class='none'><div class='testcase'>test_getSubAccount_success</div></td>
1711 <td colspan='5' align='center'>
1712
1713 <!--css div popup start-->
1714 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_pt42.1')" >
1715 pass</a>
1716
1717 <div id='div_pt42.1' class="popup_window">
1718 <div style='text-align: right; color:red;cursor:pointer'>
1719 <a onfocus='this.blur();' onclick="document.getElementById('div_pt42.1').style.display = 'none' " >
1720 [x]</a>
1721 </div>
1722 <pre>
1723
1724 pt42.1:
1725
1726 </pre>
1727 </div>
1728 <!--css div popup end-->
1729
1730 </td>
1731 </tr>
1732
1733 <tr class='errorClass'>
1734 <td>sub_account.SwitchAccounts</td>
1735 <td>2</td>
1736 <td>0</td>
1737 <td>0</td>
1738 <td>2</td>
1739 <td><a href="javascript:showClassDetail('c43',2)">Detail</a></td>
1740 </tr>
1741
1742 <tr id='ft43.1' class='none'>
1743 <td class='errorCase'><div class='testcase'>test_swichToParentAccount_success</div></td>
1744 <td colspan='5' align='center'>
1745
1746 <!--css div popup start-->
1747 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft43.1')" >
1748 error</a>
1749
1750 <div id='div_ft43.1' class="popup_window">
1751 <div style='text-align: right; color:red;cursor:pointer'>
1752 <a onfocus='this.blur();' onclick="document.getElementById('div_ft43.1').style.display = 'none' " >
1753 [x]</a>
1754 </div>
1755 <pre>
1756
1757 ft43.1: Traceback (most recent call last):
1758 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/sub_account.py", line 112, in test_swichToParentAccount_success
1759 self.assertEqual(db_test.select_('acornuser.acorn_user_status', where_data), 1, 'swichToParentAccount Error')
1760 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1761 cursor.execute(sql)
1762 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1763 result = self._query(query)
1764 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1765 conn.query(q)
1766 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 855, in query
1767 self._execute_command(COMMAND.COM_QUERY, sql)
1768 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1071, in _execute_command
1769 raise err.InterfaceError("(0, '')")
1770 pymysql.err.InterfaceError: (0, '')
1771 Traceback (most recent call last):
1772 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/sub_account.py", line 112, in test_swichToParentAccount_success
1773 self.assertEqual(db_test.select_('acornuser.acorn_user_status', where_data), 1, 'swichToParentAccount Error')
1774 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1775 cursor.execute(sql)
1776 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1777 result = self._query(query)
1778 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1779 conn.query(q)
1780 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 855, in query
1781 self._execute_command(COMMAND.COM_QUERY, sql)
1782 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1071, in _execute_command
1783 raise err.InterfaceError("(0, '')")
1784 pymysql.err.InterfaceError: (0, '')
1785
1786
1787 </pre>
1788 </div>
1789 <!--css div popup end-->
1790
1791 </td>
1792 </tr>
1793
1794 <tr id='ft43.2' class='none'>
1795 <td class='errorCase'><div class='testcase'>test_swichToSubAccount_success</div></td>
1796 <td colspan='5' align='center'>
1797
1798 <!--css div popup start-->
1799 <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft43.2')" >
1800 error</a>
1801
1802 <div id='div_ft43.2' class="popup_window">
1803 <div style='text-align: right; color:red;cursor:pointer'>
1804 <a onfocus='this.blur();' onclick="document.getElementById('div_ft43.2').style.display = 'none' " >
1805 [x]</a>
1806 </div>
1807 <pre>
1808
1809 ft43.2: Traceback (most recent call last):
1810 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/sub_account.py", line 99, in test_swichToSubAccount_success
1811 self.assertEqual(db_test.select_('acornuser.child_user', where_data), 1, 'swichToSubAccount Error')
1812 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1813 cursor.execute(sql)
1814 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1815 result = self._query(query)
1816 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1817 conn.query(q)
1818 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 855, in query
1819 self._execute_command(COMMAND.COM_QUERY, sql)
1820 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1071, in _execute_command
1821 raise err.InterfaceError("(0, '')")
1822 pymysql.err.InterfaceError: (0, '')
1823 Traceback (most recent call last):
1824 File "/Users/shaozl/PycharmProjects/apiTest/test_cases/sub_account.py", line 99, in test_swichToSubAccount_success
1825 self.assertEqual(db_test.select_('acornuser.child_user', where_data), 1, 'swichToSubAccount Error')
1826 File "/Users/shaozl/PycharmProjects/apiTest/data_fixture/mysql_db.py", line 51, in select_
1827 cursor.execute(sql)
1828 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
1829 result = self._query(query)
1830 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
1831 conn.query(q)
1832 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 855, in query
1833 self._execute_command(COMMAND.COM_QUERY, sql)
1834 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1071, in _execute_command
1835 raise err.InterfaceError("(0, '')")
1836 pymysql.err.InterfaceError: (0, '')
1837
1838
1839 </pre>
1840 </div>
1841 <!--css div popup end-->
1842
1843 </td>
1844 </tr>
1845
1846 <tr class='passClass'>
1847 <td>subject_sync.ClassNameVideo</td>
1848 <td>2</td>
1849 <td>2</td>
1850 <td>0</td>
1851 <td>0</td>
1852 <td><a href="javascript:showClassDetail('c44',2)">Detail</a></td>
1853 </tr>
1854
1855 <tr id='pt44.1' class='hiddenRow'>
1856 <td class='none'><div class='testcase'>test_ClassNameVideo_noData</div></td>
1857 <td colspan='5' align='center'>pass</td>
1858 </tr>
1859
1860 <tr id='pt44.2' class='hiddenRow'>
1861 <td class='none'><div class='testcase'>test_ClassNameVideo_success</div></td>
1862 <td colspan='5' align='center'>pass</td>
1863 </tr>
1864
1865 <tr class='passClass'>
1866 <td>subject_sync.ConsolidationExercise</td>
1867 <td>1</td>
1868 <td>1</td>
1869 <td>0</td>
1870 <td>0</td>
1871 <td><a href="javascript:showClassDetail('c45',1)">Detail</a></td>
1872 </tr>
1873
1874 <tr id='pt45.1' class='hiddenRow'>
1875 <td class='none'><div class='testcase'>test_ConsolidationExercise_success</div></td>
1876 <td colspan='5' align='center'>pass</td>
1877 </tr>
1878
1879 <tr class='passClass'>
1880 <td>subject_sync.PointVideo</td>
1881 <td>2</td>
1882 <td>2</td>
1883 <td>0</td>
1884 <td>0</td>
1885 <td><a href="javascript:showClassDetail('c46',2)">Detail</a></td>
1886 </tr>
1887
1888 <tr id='pt46.1' class='hiddenRow'>
1889 <td class='none'><div class='testcase'>test_PointVideo_noData</div></td>
1890 <td colspan='5' align='center'>pass</td>
1891 </tr>
1892
1893 <tr id='pt46.2' class='hiddenRow'>
1894 <td class='none'><div class='testcase'>test_PointVideo_success</div></td>
1895 <td colspan='5' align='center'>pass</td>
1896 </tr>
1897
1898 <tr class='passClass'>
1899 <td>subject_sync.SubjectTest</td>
1900 <td>1</td>
1901 <td>1</td>
1902 <td>0</td>
1903 <td>0</td>
1904 <td><a href="javascript:showClassDetail('c47',1)">Detail</a></td>
1905 </tr>
1906
1907 <tr id='pt47.1' class='hiddenRow'>
1908 <td class='none'><div class='testcase'>test_SubjectTest_success</div></td>
1909 <td colspan='5' align='center'>pass</td>
1910 </tr>
1911
1912 <tr id='total_row'>
1913 <td>Total</td>
1914 <td>72</td>
1915 <td>64</td>
1916 <td>1</td>
1917 <td>7</td>
1918 <td>&nbsp;</td>
1919 </tr>
1920 </table>
1921
1922 <div id='ending'>&nbsp;</div>
1923
1924 </body>
1925 </html>
1926
report/test_report.html
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <html xmlns="http://www.w3.org/1999/xhtml">
4 <head> 4 <head>
5 <title>Unit Test Report</title> 5 <title>Unit Test Report</title>
6 <meta name="generator" content="HTMLTestRunner 0.8.2"/> 6 <meta name="generator" content="HTMLTestRunner 0.8.2"/>
7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
8 8
9 <style type="text/css" media="screen"> 9 <style type="text/css" media="screen">
10 body { font-family: verdana, arial, helvetica, sans-serif; font-size: 80%; } 10 body { font-family: verdana, arial, helvetica, sans-serif; font-size: 80%; }
11 table { font-size: 100%; } 11 table { font-size: 100%; }
12 pre { } 12 pre { }
13 13
14 /* -- heading ---------------------------------------------------------------------- */ 14 /* -- heading ---------------------------------------------------------------------- */
15 h1 { 15 h1 {
16 font-size: 16pt; 16 font-size: 16pt;
17 color: gray; 17 color: gray;
18 } 18 }
19 .heading { 19 .heading {
20 margin-top: 0ex; 20 margin-top: 0ex;
21 margin-bottom: 1ex; 21 margin-bottom: 1ex;
22 } 22 }
23 23
24 .heading .attribute { 24 .heading .attribute {
25 margin-top: 1ex; 25 margin-top: 1ex;
26 margin-bottom: 0; 26 margin-bottom: 0;
27 } 27 }
28 28
29 .heading .description { 29 .heading .description {
30 margin-top: 4ex; 30 margin-top: 4ex;
31 margin-bottom: 6ex; 31 margin-bottom: 6ex;
32 } 32 }
33 33
34 /* -- css div popup ------------------------------------------------------------------------ */ 34 /* -- css div popup ------------------------------------------------------------------------ */
35 a.popup_link { 35 a.popup_link {
36 } 36 }
37 37
38 a.popup_link:hover { 38 a.popup_link:hover {
39 color: red; 39 color: red;
40 } 40 }
41 41
42 .popup_window { 42 .popup_window {
43 display: none; 43 display: none;
44 position: relative; 44 position: relative;
45 left: 0px; 45 left: 0px;
46 top: 0px; 46 top: 0px;
47 /*border: solid #627173 1px; */ 47 /*border: solid #627173 1px; */
48 padding: 10px; 48 padding: 10px;
49 background-color: #E6E6D6; 49 background-color: #E6E6D6;
50 font-family: "Lucida Console", "Courier New", Courier, monospace; 50 font-family: "Lucida Console", "Courier New", Courier, monospace;
51 text-align: left; 51 text-align: left;
52 font-size: 8pt; 52 font-size: 8pt;
53 width: 500px; 53 width: 500px;
54 } 54 }
55 55
56 } 56 }
57 /* -- report ------------------------------------------------------------------------ */ 57 /* -- report ------------------------------------------------------------------------ */
58 #show_detail_line { 58 #show_detail_line {
59 margin-top: 3ex; 59 margin-top: 3ex;
60 margin-bottom: 1ex; 60 margin-bottom: 1ex;
61 } 61 }
62 #result_table { 62 #result_table {
63 width: 80%; 63 width: 80%;
64 border-collapse: collapse; 64 border-collapse: collapse;
65 border: 1px solid #777; 65 border: 1px solid #777;
66 } 66 }
67 #header_row { 67 #header_row {
68 font-weight: bold; 68 font-weight: bold;
69 color: white; 69 color: white;
70 background-color: #777; 70 background-color: #777;
71 } 71 }
72 #result_table td { 72 #result_table td {
73 border: 1px solid #777; 73 border: 1px solid #777;
74 padding: 2px; 74 padding: 2px;
75 } 75 }
76 #total_row { font-weight: bold; } 76 #total_row { font-weight: bold; }
77 .passClass { background-color: #6c6; } 77 .passClass { background-color: #6c6; }
78 .failClass { background-color: #c60; } 78 .failClass { background-color: #c60; }
79 .errorClass { background-color: #c00; } 79 .errorClass { background-color: #c00; }
80 .passCase { color: #6c6; } 80 .passCase { color: #6c6; }
81 .failCase { color: #c60; font-weight: bold; } 81 .failCase { color: #c60; font-weight: bold; }
82 .errorCase { color: #c00; font-weight: bold; } 82 .errorCase { color: #c00; font-weight: bold; }
83 .hiddenRow { display: none; } 83 .hiddenRow { display: none; }
84 .testcase { margin-left: 2em; } 84 .testcase { margin-left: 2em; }
85 85
86 86
87 /* -- ending ---------------------------------------------------------------------- */ 87 /* -- ending ---------------------------------------------------------------------- */
88 #ending { 88 #ending {
89 } 89 }
90 90
91 </style> 91 </style>
92 92
93 </head> 93 </head>
94 <body> 94 <body>
95 <script language="javascript" type="text/javascript"><!-- 95 <script language="javascript" type="text/javascript"><!--
96 output_list = Array(); 96 output_list = Array();
97 97
98 /* level - 0:Summary; 1:Failed; 2:All */ 98 /* level - 0:Summary; 1:Failed; 2:All */
99 function showCase(level) { 99 function showCase(level) {
100 trs = document.getElementsByTagName("tr"); 100 trs = document.getElementsByTagName("tr");
101 for (var i = 0; i < trs.length; i++) { 101 for (var i = 0; i < trs.length; i++) {
102 tr = trs[i]; 102 tr = trs[i];
103 id = tr.id; 103 id = tr.id;
104 if (id.substr(0,2) == 'ft') { 104 if (id.substr(0,2) == 'ft') {
105 if (level < 1) { 105 if (level < 1) {
106 tr.className = 'hiddenRow'; 106 tr.className = 'hiddenRow';
107 } 107 }
108 else { 108 else {
109 tr.className = ''; 109 tr.className = '';
110 } 110 }
111 } 111 }
112 if (id.substr(0,2) == 'pt') { 112 if (id.substr(0,2) == 'pt') {
113 if (level > 1) { 113 if (level > 1) {
114 tr.className = ''; 114 tr.className = '';
115 } 115 }
116 else { 116 else {
117 tr.className = 'hiddenRow'; 117 tr.className = 'hiddenRow';
118 } 118 }
119 } 119 }
120 } 120 }
121 } 121 }
122 122
123 123
124 function showClassDetail(cid, count) { 124 function showClassDetail(cid, count) {
125 var id_list = Array(count); 125 var id_list = Array(count);
126 var toHide = 1; 126 var toHide = 1;
127 for (var i = 0; i < count; i++) { 127 for (var i = 0; i < count; i++) {
128 tid0 = 't' + cid.substr(1) + '.' + (i+1); 128 tid0 = 't' + cid.substr(1) + '.' + (i+1);
129 tid = 'f' + tid0; 129 tid = 'f' + tid0;
130 tr = document.getElementById(tid); 130 tr = document.getElementById(tid);
131 if (!tr) { 131 if (!tr) {
132 tid = 'p' + tid0; 132 tid = 'p' + tid0;
133 tr = document.getElementById(tid); 133 tr = document.getElementById(tid);
134 } 134 }
135 id_list[i] = tid; 135 id_list[i] = tid;
136 if (tr.className) { 136 if (tr.className) {
137 toHide = 0; 137 toHide = 0;
138 } 138 }
139 } 139 }
140 for (var i = 0; i < count; i++) { 140 for (var i = 0; i < count; i++) {
141 tid = id_list[i]; 141 tid = id_list[i];
142 if (toHide) { 142 if (toHide) {
143 document.getElementById('div_'+tid).style.display = 'none' 143 document.getElementById('div_'+tid).style.display = 'none'
144 document.getElementById(tid).className = 'hiddenRow'; 144 document.getElementById(tid).className = 'hiddenRow';
145 } 145 }
146 else { 146 else {
147 document.getElementById(tid).className = ''; 147 document.getElementById(tid).className = '';
148 } 148 }
149 } 149 }
150 } 150 }
151 151
152 152
153 function showTestDetail(div_id){ 153 function showTestDetail(div_id){
154 var details_div = document.getElementById(div_id) 154 var details_div = document.getElementById(div_id)
155 var displayState = details_div.style.display 155 var displayState = details_div.style.display
156 // alert(displayState) 156 // alert(displayState)
157 if (displayState != 'block' ) { 157 if (displayState != 'block' ) {
158 displayState = 'block' 158 displayState = 'block'
159 details_div.style.display = 'block' 159 details_div.style.display = 'block'
160 } 160 }
161 else { 161 else {
162 details_div.style.display = 'none' 162 details_div.style.display = 'none'
163 } 163 }
164 } 164 }
165 165
166 166
167 function html_escape(s) { 167 function html_escape(s) {
168 s = s.replace(/&/g,'&amp;'); 168 s = s.replace(/&/g,'&amp;');
169 s = s.replace(/</g,'&lt;'); 169 s = s.replace(/</g,'&lt;');
170 s = s.replace(/>/g,'&gt;'); 170 s = s.replace(/>/g,'&gt;');
171 return s; 171 return s;
172 } 172 }
173 173
174 /* obsoleted by detail in <div> 174 /* obsoleted by detail in <div>
175 function showOutput(id, name) { 175 function showOutput(id, name) {
176 var w = window.open("", //url 176 var w = window.open("", //url
177 name, 177 name,
178 "resizable,scrollbars,status,width=800,height=450"); 178 "resizable,scrollbars,status,width=800,height=450");
179 d = w.document; 179 d = w.document;
180 d.write("<pre>"); 180 d.write("<pre>");
181 d.write(html_escape(output_list[id])); 181 d.write(html_escape(output_list[id]));
182 d.write("\n"); 182 d.write("\n");
183 d.write("<a href='javascript:window.close()'>close</a>\n"); 183 d.write("<a href='javascript:window.close()'>close</a>\n");
184 d.write("</pre>\n"); 184 d.write("</pre>\n");
185 d.close(); 185 d.close();
186 } 186 }
187 */ 187 */
188 --></script> 188 --></script>
189 189
190 <div class='heading'> 190 <div class='heading'>
191 <h1>Unit Test Report</h1> 191 <h1>Unit Test Report</h1>
192 <p class='attribute'><strong>Start Time:</strong> 2018-01-12 15:33:19</p> 192 <p class='attribute'><strong>Start Time:</strong> 2018-01-15 17:44:45</p>
193 <p class='attribute'><strong>Duration:</strong> 0:00:09.093848</p> 193 <p class='attribute'><strong>Duration:</strong> 0:00:12.495048</p>
194 <p class='attribute'><strong>Status:</strong> Pass 1</p> 194 <p class='attribute'><strong>Status:</strong> Pass 1</p>
195 195
196 <p class='description'></p> 196 <p class='description'></p>
197 </div> 197 </div>
198 198
199 199
200 200
201 <p id='show_detail_line'>Show 201 <p id='show_detail_line'>Show
202 <a href='javascript:showCase(0)'>Summary</a> 202 <a href='javascript:showCase(0)'>Summary</a>
203 <a href='javascript:showCase(1)'>Failed</a> 203 <a href='javascript:showCase(1)'>Failed</a>
204 <a href='javascript:showCase(2)'>All</a> 204 <a href='javascript:showCase(2)'>All</a>
205 </p> 205 </p>
206 <table id='result_table'> 206 <table id='result_table'>
207 <colgroup> 207 <colgroup>
208 <col align='left' /> 208 <col align='left' />
209 <col align='right' /> 209 <col align='right' />
210 <col align='right' /> 210 <col align='right' />
211 <col align='right' /> 211 <col align='right' />
212 <col align='right' /> 212 <col align='right' />
213 <col align='right' /> 213 <col align='right' />
214 </colgroup> 214 </colgroup>
215 <tr id='header_row'> 215 <tr id='header_row'>
216 <td>Test Group/Test case</td> 216 <td>Test Group/Test case</td>
217 <td>Count</td> 217 <td>Count</td>
218 <td>Pass</td> 218 <td>Pass</td>
219 <td>Fail</td> 219 <td>Fail</td>
220 <td>Error</td> 220 <td>Error</td>
221 <td>View</td> 221 <td>View</td>
222 </tr> 222 </tr>
223 223
224 <tr class='passClass'> 224 <tr class='passClass'>
225 <td>test_cases.app_record_statistic.AppRecordEveryday</td> 225 <td>test_cases.app_record_statistic.AppRecordEveryday</td>
226 <td>1</td> 226 <td>1</td>
227 <td>1</td> 227 <td>1</td>
228 <td>0</td> 228 <td>0</td>
229 <td>0</td> 229 <td>0</td>
230 <td><a href="javascript:showClassDetail('c1',1)">Detail</a></td> 230 <td><a href="javascript:showClassDetail('c1',1)">Detail</a></td>
231 </tr> 231 </tr>
232 232
233 <tr id='pt1.1' class='hiddenRow'> 233 <tr id='pt1.1' class='hiddenRow'>
234 <td class='none'><div class='testcase'>test_getAppRecordEveryday_success</div></td> 234 <td class='none'><div class='testcase'>test_getAppRecordEveryday_success</div></td>
235 <td colspan='5' align='center'>pass</td> 235 <td colspan='5' align='center'>pass</td>
236 </tr> 236 </tr>
237 237
238 <tr id='total_row'> 238 <tr id='total_row'>
239 <td>Total</td> 239 <td>Total</td>
240 <td>1</td> 240 <td>1</td>
241 <td>1</td> 241 <td>1</td>
242 <td>0</td> 242 <td>0</td>
243 <td>0</td> 243 <td>0</td>
244 <td>&nbsp;</td> 244 <td>&nbsp;</td>
245 </tr> 245 </tr>
246 </table> 246 </table>
247 247
248 <div id='ending'>&nbsp;</div> 248 <div id='ending'>&nbsp;</div>
249 249
250 </body> 250 </body>
251 </html> 251 </html>
252 252
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 import unittest 4 import unittest
5 import HTMLTestRunner 5 import HTMLTestRunner
6 from test_cases import sub_account 6 from test_cases import sub_account
7 7
8 from test_suites import test_elecCard 8 from test_suites import test_elecCard
9 from test_cases import register 9 from test_cases import register
10 from test_cases import personal_info 10 from test_cases import personal_info
11 from test_cases import parent_space 11 from test_cases import parent_space
12 from test_cases import app_record_statistic 12 from test_cases import app_record_statistic
13 from test_cases import subject_sync 13 from test_cases import subject_sync
14 14
15
15 start_dir = './test_cases' 16 start_dir = './test_cases'
16 suite_run = unittest.TestSuite() 17 suite_run = unittest.TestSuite()
17 #suite_run = unittest.defaultTestLoader.discover(start_dir=start_dir, pattern='subject_sync.py') 18 suite_run = unittest.defaultTestLoader.discover(start_dir=start_dir, pattern='*.py')
18 19
19 20
20 suite_run.addTest(app_record_statistic.AppRecordEveryday('test_getAppRecordEveryday_success')) 21 #suite_run.addTest(app_record_statistic.AppRecordEveryday('test_getAppRecordEveryday_success'))
21 22
22 #suite_run.addTest(app_record_statistic.AppRecordReset('test_AppRecordReset_success')) 23 #suite_run.addTest(app_record_statistic.AppRecordReset('test_AppRecordReset_success'))
23 #suite_run.addTest(parent_space.ParentSpaceNewPassword('test_ParentSpaceNewPassword_success')) 24 #suite_run.addTest(parent_space.ParentSpaceChangePassword('test_ParentSpaceChangePassword_success'))
24 #suite_run.addTest(parent_space.ParentSpaceNewPassword('test_ParentSpaceNewPassword_authCodeError')) 25 #suite_run.addTest(parent_space.ParentSpaceNewPassword('test_ParentSpaceNewPassword_authCodeError'))
25 runner = HTMLTestRunner.HTMLTestRunner(outputdir='report') 26 runner = HTMLTestRunner.HTMLTestRunner(outputdir='report')
26 27
27 if __name__ == '__main__': 28 if __name__ == '__main__':
28 29
29 runner.run(suite_run) 30 runner.run(suite_run)
30 31
31 32
32 33
test_cases/__pycache__/app_record_statistic.cpython-36.pyc
No preview for this file type
test_cases/__pycache__/parent_space.cpython-36.pyc
No preview for this file type
test_cases/__pycache__/personal_info.cpython-36.pyc
No preview for this file type
test_cases/__pycache__/press.cpython-36.pyc
No preview for this file type
test_cases/__pycache__/register.cpython-36.pyc
No preview for this file type
test_cases/__pycache__/sub_account.cpython-36.pyc
No preview for this file type
test_cases/__pycache__/subject_sync.cpython-36.pyc
No preview for this file type
test_cases/app_record_statistic.py
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 import unittest 4 import unittest
5 import requests 5 import requests
6 from data_fixture.config_data import HOST_BOSS, HOST_STA 6 from data_fixture.config_data import HOST_BOSS, HOST_STA
7 from data_fixture import create_testdata as CreateTestData 7 from data_fixture import create_testdata as CreateTestData
8 from data_fixture import config_data as Data 8 from data_fixture import config_data as Data
9 from data_fixture.mysql_db import DB 9 from data_fixture.mysql_db import DB
10 import time 10 import time
11 from datetime import date 11 from datetime import date
12 12
13 db_test = DB()
14 13
15 14
16 #提交app使用记录 15 #提交app使用记录
17 class AppRecordSave(unittest.TestCase): 16 class AppRecordSave(unittest.TestCase):
18 def setUp(self): 17 def setUp(self):
19 self.base_url = HOST_STA + '/app/record/save' 18 self.base_url = HOST_STA + '/app/record/save'
20 19
21 def tearDown(self): 20 def tearDown(self):
22 print(self.result) 21 print(self.result)
23 22
24 def test_AppRecordSave_success(self): 23 def test_AppRecordSave_success(self):
25 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 24 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
26 postData = {'appName': '学科同步', 25 postData = {'appName': '学科同步',
27 'appPid': 'com.hjx.synsubject', 26 'appPid': 'com.hjx.synsubject',
28 'timeSpent': 1088, 27 'timeSpent': 1088,
29 'userId': Data.USER_ID, 28 'userId': Data.USER_ID,
30 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND} 29 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND}
31 send_time = str(time.time()).split('.')[0] 30 send_time = str(time.time()).split('.')[0]
32 r = requests.post(self.base_url, headers=headers, data=postData) 31 r = requests.post(self.base_url, headers=headers, data=postData)
33 self.result = r.json() 32 self.result = r.json()
34 self.assertEqual(self.result['status'], 1, 'test_AppRecordSave_success Error') 33 self.assertEqual(self.result['status'], 1, 'test_AppRecordSave_success Error')
35 where = {'app_name': '学科同步', 34 where = {'app_name': '学科同步',
36 'app_pid': 'com.hjx.synsubject', 35 'app_pid': 'com.hjx.synsubject',
37 'time_spent': 1088, 36 'time_spent': 1088,
38 'user_id': Data.USER_ID, 37 'user_id': Data.USER_ID,
39 'device_number': Data.DEVICE_NUMBER_CUS_BIND} 38 'device_number': Data.DEVICE_NUMBER_CUS_BIND}
40 where_2 = " time_end >= {} ".format(send_time) 39 where_2 = " time_end >= {} ".format(send_time)
41 self.assertTrue(db_test.select_('analytics.app_record', where, where_2) >= 1, 'test_AppRecordSave_success data Error') 40 self.assertTrue(CreateTestData.db_select('analytics.app_record', where, where_2) >= 1, 'test_AppRecordSave_success data Error')
42 41
43 42
44 # 按时间段获取app使用统计 43 # 按时间段获取app使用统计
45 class AppRecordStats(unittest.TestCase): 44 class AppRecordStats(unittest.TestCase):
46 def setUp(self): 45 def setUp(self):
47 self.base_url = HOST_STA + '/app/record/stats' 46 self.base_url = HOST_STA + '/app/record/stats'
48 now = int(str(time.time()).split('.')[0]) 47 now = int(str(time.time()).split('.')[0])
49 CreateTestData.create_app_use_record(now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND) 48 CreateTestData.create_app_use_record(now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND)
50 49
51 def tearDown(self): 50 def tearDown(self):
52 pass 51 pass
53 52
54 def test_getAppRecordStats_all_success(self): 53 def test_getAppRecordStats_all_success(self):
55 getData = {'userId': Data.USER_ID, 54 getData = {'userId': Data.USER_ID,
56 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 55 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
57 'type': 'all'} 56 'type': 'all'}
58 r = requests.get(self.base_url, params=getData) 57 r = requests.get(self.base_url, params=getData)
59 self.result_1 = r.json() 58 self.result_1 = r.json()
60 self.assertEqual(self.result_1['status'], 1, 'test_getAppRecordStats_all_success Error') 59 self.assertEqual(self.result_1['status'], 1, 'test_getAppRecordStats_all_success Error')
61 self.assertTrue(self.result_1['data']['gameTime'] > 0) 60 self.assertTrue(self.result_1['data']['gameTime'] > 0)
62 self.assertTrue(self.result_1['data']['studyTime'] > 0) 61 self.assertTrue(self.result_1['data']['studyTime'] > 0)
63 62
64 def test_getAppRecordStats_year_success(self): 63 def test_getAppRecordStats_year_success(self):
65 getData = {'userId': Data.USER_ID, 64 getData = {'userId': Data.USER_ID,
66 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 65 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
67 'type': 'year'} 66 'type': 'year'}
68 r = requests.get(self.base_url, params=getData) 67 r = requests.get(self.base_url, params=getData)
69 self.result_2 = r.json() 68 self.result_2 = r.json()
70 self.assertEqual(self.result_2['status'], 1, 'test_getAppRecordStats_year_success Error') 69 self.assertEqual(self.result_2['status'], 1, 'test_getAppRecordStats_year_success Error')
71 self.assertTrue(self.result_2['data']['gameTime'] > 0) 70 self.assertTrue(self.result_2['data']['gameTime'] > 0)
72 self.assertTrue(self.result_2['data']['studyTime'] > 0) 71 self.assertTrue(self.result_2['data']['studyTime'] > 0)
73 72
74 def test_getAppRecordStats_month_success(self): 73 def test_getAppRecordStats_month_success(self):
75 getData = {'userId': Data.USER_ID, 74 getData = {'userId': Data.USER_ID,
76 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 75 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
77 'type': 'month'} 76 'type': 'month'}
78 r = requests.get(self.base_url, params=getData) 77 r = requests.get(self.base_url, params=getData)
79 self.result_3 = r.json() 78 self.result_3 = r.json()
80 self.assertEqual(self.result_3['status'], 1, 'test_getAppRecordStats_month_success Error') 79 self.assertEqual(self.result_3['status'], 1, 'test_getAppRecordStats_month_success Error')
81 self.assertTrue(self.result_3['data']['gameTime'] > 0) 80 self.assertTrue(self.result_3['data']['gameTime'] > 0)
82 self.assertTrue(self.result_3['data']['studyTime'] > 0) 81 self.assertTrue(self.result_3['data']['studyTime'] > 0)
83 82
84 def test_getAppRecordStats_week_success(self): 83 def test_getAppRecordStats_week_success(self):
85 getData = {'userId': Data.USER_ID, 84 getData = {'userId': Data.USER_ID,
86 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 85 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
87 'type': 'week'} 86 'type': 'week'}
88 r = requests.get(self.base_url, params=getData) 87 r = requests.get(self.base_url, params=getData)
89 self.result_4 = r.json() 88 self.result_4 = r.json()
90 self.assertEqual(self.result_4['status'], 1, 'test_getAppRecordStats_week_success Error') 89 self.assertEqual(self.result_4['status'], 1, 'test_getAppRecordStats_week_success Error')
91 self.assertTrue(self.result_4['data']['gameTime'] > 0) 90 self.assertTrue(self.result_4['data']['gameTime'] > 0)
92 self.assertTrue(self.result_4['data']['studyTime'] > 0) 91 self.assertTrue(self.result_4['data']['studyTime'] > 0)
93 92
94 93
95 # 获取应用统计top排名 94 # 获取应用统计top排名
96 class AppRecordTop(unittest.TestCase): 95 class AppRecordTop(unittest.TestCase):
97 def setUp(self): 96 def setUp(self):
98 self.base_url = HOST_STA + '/app/record/top' 97 self.base_url = HOST_STA + '/app/record/top'
99 now = int(str(time.time()).split('.')[0]) 98 now = int(str(time.time()).split('.')[0])
100 CreateTestData.create_app_use_record(now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND) 99 CreateTestData.create_app_use_record(now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND)
101 100
102 def tearDown(self): 101 def tearDown(self):
103 pass 102 pass
104 103
105 def test_getAppRecordTop_hjx(self): 104 def test_getAppRecordTop_hjx(self):
106 getData = {'userId': Data.USER_ID, 105 getData = {'userId': Data.USER_ID,
107 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 106 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
108 'type': 'hjx'} 107 'type': 'hjx'}
109 r = requests.get(self.base_url, params=getData) 108 r = requests.get(self.base_url, params=getData)
110 self.result_1 = r.json() 109 self.result_1 = r.json()
111 self.assertEqual(self.result_1['status'], 1, 'test_getAppRecordTop_hjx Error') 110 self.assertEqual(self.result_1['status'], 1, 'test_getAppRecordTop_hjx Error')
112 self.assertTrue(len(self.result_1['data']) > 0) 111 self.assertTrue(len(self.result_1['data']) > 0)
113 112
114 def test_getAppRecordTop_other(self): 113 def test_getAppRecordTop_other(self):
115 getData = {'userId': Data.USER_ID, 114 getData = {'userId': Data.USER_ID,
116 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 115 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
117 'type': 'other'} 116 'type': 'other'}
118 r = requests.get(self.base_url, params=getData) 117 r = requests.get(self.base_url, params=getData)
119 self.result_2 = r.json() 118 self.result_2 = r.json()
120 self.assertEqual(self.result_2['status'], 1, 'test_getAppRecordTop_other Error') 119 self.assertEqual(self.result_2['status'], 1, 'test_getAppRecordTop_other Error')
121 self.assertTrue(len(self.result_2['data']) > 0) 120 self.assertTrue(len(self.result_2['data']) > 0)
122 121
123 122
124 # 获取某一天的app统计 123 # 获取某一天的app统计
125 class AppRecordOneday(unittest.TestCase): 124 class AppRecordOneday(unittest.TestCase):
126 def setUp(self): 125 def setUp(self):
127 self.base_url = HOST_STA + '/app/record/oneday' 126 self.base_url = HOST_STA + '/app/record/oneday'
128 self.now = int(str(time.time()).split('.')[0]) 127 self.now = int(str(time.time()).split('.')[0])
129 CreateTestData.create_app_use_record(self.now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND) 128 CreateTestData.create_app_use_record(self.now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND)
130 129
131 def tearDown(self): 130 def tearDown(self):
132 pass 131 pass
133 132
134 def test_getAppRecordOneday_success(self): 133 def test_getAppRecordOneday_success(self):
135 getData = {'userId': Data.USER_ID, 134 getData = {'userId': Data.USER_ID,
136 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 135 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
137 'dayTimestamp': str(time.mktime(date.today().timetuple())).split('.')[0]} 136 'dayTimestamp': str(time.mktime(date.today().timetuple())).split('.')[0]}
138 pageNum = 1 137 pageNum = 1
139 appRecord = [] 138 appRecord = []
140 while True: 139 while True:
141 getData.update({'pageNum':pageNum}) 140 getData.update({'pageNum':pageNum})
142 r = requests.get(self.base_url, params=getData) 141 r = requests.get(self.base_url, params=getData)
143 self.result = r.json() 142 self.result = r.json()
144 appRecord = appRecord + self.result['data'] 143 appRecord = appRecord + self.result['data']
145 if len(self.result['data']) == 0: 144 if len(self.result['data']) == 0:
146 break 145 break
147 pageNum += 1 146 pageNum += 1
148 147
149 self.result_1 = r.json() 148 self.result_1 = r.json()
150 self.assertTrue(len(appRecord) == 24) 149 self.assertTrue(len(appRecord) == 24)
151 150
152 app_name = appRecord[0]['appName'] 151 app_name = appRecord[0]['appName']
153 time_spent = appRecord[0]['timeSpentTotal'] 152 time_spent = appRecord[0]['timeSpentTotal']
154 time_end = appRecord[0]['latestTimeEnd'] 153 time_end = appRecord[0]['latestTimeEnd']
155 source_id = appRecord[0]['sourceId'] 154 source_id = appRecord[0]['sourceId']
156 category_id = appRecord[0]['categoryId'] 155 category_id = appRecord[0]['categoryId']
157 categoryType = appRecord[0]['categoryType'] 156 categoryType = appRecord[0]['categoryType']
158 study_category = [25,26,27,28,57] 157 study_category = [25,26,27,28,57]
159 game_category = [37,38,39,100] 158 game_category = [37,38,39,100]
160 159
161 where_1 = {'app_name':app_name, 160 where_1 = {'app_name':app_name,
162 'time_spent':time_spent, 161 'time_spent':time_spent,
163 'time_end': time_end, 162 'time_end': time_end,
164 'source_id':source_id, 163 'source_id':source_id,
165 'category_id':category_id, 164 'category_id':category_id,
166 'user_id': Data.USER_ID, 165 'user_id': Data.USER_ID,
167 'device_number': Data.DEVICE_NUMBER_CUS_BIND 166 'device_number': Data.DEVICE_NUMBER_CUS_BIND
168 } 167 }
169 self.assertEqual(db_test.select_('analytics.app_record', where_1) , 1) 168 self.assertEqual(CreateTestData.db_select('analytics.app_record', where_1) , 1)
170 if category_id in study_category: 169 if category_id in study_category:
171 self.assertEqual(categoryType, 1) 170 self.assertEqual(categoryType, 1)
172 if category_id in game_category: 171 if category_id in game_category:
173 self.assertEqual(categoryType, 2) 172 self.assertEqual(categoryType, 2)
174 173
175 174
176 # 获取几天的app统计 175 # 获取几天的app统计
177 class AppRecordEveryday(unittest.TestCase): 176 class AppRecordEveryday(unittest.TestCase):
178 def setUp(self): 177 def setUp(self):
179 self.base_url = HOST_STA + '/app/record/everyday' 178 self.base_url = HOST_STA + '/app/record/everyday'
180 self.now = int(str(time.time()).split('.')[0]) 179 self.now = int(str(time.time()).split('.')[0])
181 # CreateTestData.create_app_use_record(self.now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND) 180 # CreateTestData.create_app_use_record(self.now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND)
182 CreateTestData.create_app_use_record(self.now, '7000000054686780', '123456789002') 181 CreateTestData.create_app_use_record(self.now, '7000000054686780', '123456789002')
183 182
184 183
185 def tearDown(self): 184 def tearDown(self):
186 pass 185 pass
187 186
188 def test_getAppRecordEveryday_success(self): 187 def test_getAppRecordEveryday_success(self):
189 # getData = {'userId': Data.USER_ID, 188 # getData = {'userId': Data.USER_ID,
190 # 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 189 # 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
191 # 'pageNum': 1, 190 # 'pageNum': 1,
192 # 'pageSize': 7} 191 # 'pageSize': 7}
193 getData = {'userId': '7000000054686780', 192 getData = {'userId': '7000000054686780',
194 'deviceNumber': '123456789002', 193 'deviceNumber': '123456789002',
195 'pageNum': 1, 194 'pageNum': 1,
196 'pageSize': 7} 195 'pageSize': 7}
197 r = requests.get(self.base_url, params=getData) 196 r = requests.get(self.base_url, params=getData)
198 self.result = r.json() 197 self.result = r.json()
199 self.assertEqual(self.result['status'], 1, 'test_getAppRecordEveryday_success Error') 198 self.assertEqual(self.result['status'], 1, 'test_getAppRecordEveryday_success Error')
200 self.assertEqual(self.result['data'][0]['gameTimeSpent'], 2550) 199 self.assertEqual(self.result['data'][0]['gameTimeSpent'], 2550)
201 self.assertEqual(self.result['data'][0]['studyTimeSpent'], 3150) 200 self.assertEqual(self.result['data'][0]['studyTimeSpent'], 3150)
202 201
203 202
204 # 获取当天的app统计 203 # 获取当天的app统计
205 class AppRecordToday(unittest.TestCase): 204 class AppRecordToday(unittest.TestCase):
206 def setUp(self): 205 def setUp(self):
207 self.base_url = HOST_STA + '/app/record/today' 206 self.base_url = HOST_STA + '/app/record/today'
208 self.now = int(str(time.time()).split('.')[0]) 207 self.now = int(str(time.time()).split('.')[0])
209 CreateTestData.create_app_use_record(self.now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND) 208 CreateTestData.create_app_use_record(self.now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND)
210 209
211 def tearDown(self): 210 def tearDown(self):
212 pass 211 pass
213 212
214 def test_AppRecordToday_success(self): 213 def test_AppRecordToday_success(self):
215 getData = {'userId': Data.USER_ID, 214 getData = {'userId': Data.USER_ID,
216 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND} 215 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND}
217 r = requests.get(self.base_url, params=getData) 216 r = requests.get(self.base_url, params=getData)
218 self.result = r.json() 217 self.result = r.json()
219 self.assertEqual(self.result['status'], 1, 'AppRecordToday Error') 218 self.assertEqual(self.result['status'], 1, 'AppRecordToday Error')
220 self.assertEqual(self.result['data']['gameTimeSpent'], 2550) 219 self.assertEqual(self.result['data']['gameTimeSpent'], 2550)
221 self.assertEqual(self.result['data']['studyTimeSpent'], 3150) 220 self.assertEqual(self.result['data']['studyTimeSpent'], 3150)
222 221
223 222
224 #重置数据接口 223 #重置数据接口
225 class AppRecordReset(unittest.TestCase): 224 class AppRecordReset(unittest.TestCase):
226 def setUp(self): 225 def setUp(self):
227 self.base_url = HOST_STA + '/app/record/reset' 226 self.base_url = HOST_STA + '/app/record/reset'
228 # create elec card , to get mobile phpne 227 # create elec card , to get mobile phpne
229 self.password = CreateTestData.get_parentSpace_password(Data.DEVICE_NUMBER_CUS_BIND) 228 self.password = CreateTestData.get_parentSpace_password(Data.DEVICE_NUMBER_CUS_BIND)
230 now = int(str(time.time()).split('.')[0]) 229 now = int(str(time.time()).split('.')[0])
231 CreateTestData.create_app_use_record(now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND) 230 CreateTestData.create_app_use_record(now, Data.USER_ID, Data.DEVICE_NUMBER_CUS_BIND)
232 231
233 def tearDown(self): 232 def tearDown(self):
234 pass 233 pass
235 234
236 def test_AppRecordReset_success(self): 235 def test_AppRecordReset_success(self):
237 getData = {'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 236 getData = {'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
238 'password': self.password, 237 'password': self.password,
239 'userId': Data.USER_ID 238 'userId': Data.USER_ID
240 } 239 }
241 r = requests.post(self.base_url, data=getData) 240 r = requests.post(self.base_url, data=getData)
242 self.result = r.json() 241 self.result = r.json()
243 self.assertEqual(self.result['status'], 1, 'test_AppRecordReset_success Error') 242 self.assertEqual(self.result['status'], 1, 'test_AppRecordReset_success Error')
244 where = {'device_number': Data.DEVICE_NUMBER_CUS_BIND, 243 where = {'device_number': Data.DEVICE_NUMBER_CUS_BIND,
245 'user_id': Data.USER_ID 244 'user_id': Data.USER_ID
246 } 245 }
247 self.assertEqual(db_test.select_('analytics.app_record', where), 0) 246 self.assertEqual(CreateTestData.db_select('analytics.app_record', where), 0)
248 247
249 def test_AppRecordReset_passwordError(self): 248 def test_AppRecordReset_passwordError(self):
250 getData = {'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 249 getData = {'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
251 'userId': Data.USER_ID, 250 'userId': Data.USER_ID,
252 'password': self.password + '111' 251 'password': self.password + '111'
253 } 252 }
254 r = requests.post(self.base_url, data=getData) 253 r = requests.post(self.base_url, data=getData)
255 self.result_2 = r.json() 254 self.result_2 = r.json()
256 self.assertEqual(self.result_2['status'], 1005, 'test_AppRecordReset_passwordError Error') 255 self.assertEqual(self.result_2['status'], 1005, 'test_AppRecordReset_passwordError Error')
257 256
258 257
259 258
260 259
test_cases/parent_space.py
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 import unittest 4 import unittest
5 import requests 5 import requests
6 from data_fixture.config_data import HOST_BOSS, HOST_STA 6 from data_fixture.config_data import HOST_BOSS, HOST_STA
7 from data_fixture import create_testdata as CreateTestData 7 from data_fixture import create_testdata as CreateTestData
8 from data_fixture import config_data as Data 8 from data_fixture import config_data as Data
9 from data_fixture.mysql_db import DB 9 from data_fixture.mysql_db import DB
10 import uuid 10 import uuid
11 import time 11 import time
12 12
13 13
14 db_test = DB()
15 14
16 # 家长控制登录 15 # 家长控制登录
17 class ParentSpaceLogin(unittest.TestCase): 16 class ParentSpaceLogin(unittest.TestCase):
18 def setUp(self): 17 def setUp(self):
19 self.base_url = HOST_BOSS + '/parentsSpacePass/login' 18 self.base_url = HOST_BOSS + '/parentsSpacePass/login'
20 self.password = CreateTestData.get_parentSpace_password(Data.DEVICE_NUMBER_CUS_BIND) 19 self.password = CreateTestData.get_parentSpace_password(Data.DEVICE_NUMBER_CUS_BIND)
21 20
22 def tearDown(self): 21 def tearDown(self):
23 print(self.result) 22 print(self.result)
24 23
25 def test_ParentSpaceLogin_success(self): 24 def test_ParentSpaceLogin_success(self):
26 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 25 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
27 postData = {'password': self.password, 26 postData = {'password': self.password,
28 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND 27 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND
29 } 28 }
30 r = requests.post(self.base_url, headers=headers, data=postData) 29 r = requests.post(self.base_url, headers=headers, data=postData)
31 self.result = r.json() 30 self.result = r.json()
32 self.assertEqual(self.result['status'], 1, 'ParentSpaceLogin Error') 31 self.assertEqual(self.result['status'], 1, 'ParentSpaceLogin Error')
33 32
34 def test_ParentSpaceLogin_WrongPassword(self): 33 def test_ParentSpaceLogin_WrongPassword(self):
35 password_wrong = self.password + '11' 34 password_wrong = self.password + '11'
36 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 35 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
37 postData = {'password': password_wrong, 36 postData = {'password': password_wrong,
38 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND 37 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND
39 } 38 }
40 r = requests.post(self.base_url, headers=headers, data=postData) 39 r = requests.post(self.base_url, headers=headers, data=postData)
41 self.result = r.json() 40 self.result = r.json()
42 self.assertEqual(self.result['status'], 1005, 'test_ParentSpaceLogin_WrongPassword Error') 41 self.assertEqual(self.result['status'], 1005, 'test_ParentSpaceLogin_WrongPassword Error')
43 42
44 43
45 # 家长控制修改密码 44 # 家长控制修改密码
46 class ParentSpaceChangePassword(unittest.TestCase): 45 class ParentSpaceChangePassword(unittest.TestCase):
47 def setUp(self): 46 def setUp(self):
48 self.base_url = HOST_BOSS + '/parentsSpacePass/changePassword' 47 self.base_url = HOST_BOSS + '/parentsSpacePass/changePassword'
49 self.oldPass = CreateTestData.get_parentSpace_password(Data.DEVICE_NUMBER_CUS_BIND) 48 self.oldPass = CreateTestData.get_parentSpace_password(Data.DEVICE_NUMBER_CUS_BIND)
50 49
51 def tearDown(self): 50 def tearDown(self):
52 print(self.result) 51 print(self.result)
53 52
54 def test_ParentSpaceChangePassword_success(self): 53 def test_ParentSpaceChangePassword_success(self):
55 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 54 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
56 postData = {'oldPass': self.oldPass, 55 postData = {'oldPass': self.oldPass,
57 'newPass': '111111', 56 'newPass': '222222',
58 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND 57 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND
59 } 58 }
60 r = requests.post(self.base_url, headers=headers, data=postData) 59 r = requests.post(self.base_url, headers=headers, data=postData)
61 self.result = r.json() 60 self.result = r.json()
62 self.assertEqual(self.result['status'], 1, 'ParentSpacehangePassword Error') 61 self.assertEqual(self.result['status'], 1, 'ParentSpacehangePassword Error')
63 where = {'password': '111111', 62 where = {'password': '222222',
64 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND } 63 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND }
65 self.assertEqual(db_test.select_('acornuser.parents_space_pass', where), 1, 'ParentSpacehangePassword data Error') 64 self.assertEqual(CreateTestData.db_select('acornuser.parents_space_pass', where), 1, 'ParentSpacehangePassword data Error')
66 65
67 66
68 #家长控制忘记密码 67 #家长控制忘记密码
69 class ParentSpaceNewPassword(unittest.TestCase): 68 class ParentSpaceNewPassword(unittest.TestCase):
70 def setUp(self): 69 def setUp(self):
71 self.base_url = HOST_BOSS + '/parentsSpacePass/newpassword' 70 self.base_url = HOST_BOSS + '/parentsSpacePass/newpassword'
72 CreateTestData.pre_elecCard(Data.DEVICE_NUMBER_CUS_BIND) 71 CreateTestData.pre_elecCard(Data.DEVICE_NUMBER_CUS_BIND)
73 sql = "SELECT customerPhone FROM acornuser.ozing_customermachine where deviceNumber = '{}'".format(Data.DEVICE_NUMBER_CUS_BIND) 72 sql = "SELECT customerPhone FROM acornuser.ozing_customermachine where deviceNumber = '{}'".format(Data.DEVICE_NUMBER_CUS_BIND)
74 self.mobile = db_test.select(sql)[0]["customerPhone"].strip() 73 self.mobile = CreateTestData.db_select_bysql(sql)[0]["customerPhone"].strip()
75 self.auth = CreateTestData.fet_authCode(self.mobile) 74 self.auth = CreateTestData.fet_authCode(self.mobile)
76 75
77 def tearDown(self): 76 def tearDown(self):
78 pass 77 pass
79 78
80 def test_ParentSpaceNewPassword_success(self): 79 def test_ParentSpaceNewPassword_success(self):
81 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 80 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
82 postData = {'userName': self.mobile, 81 postData = {'userName': self.mobile,
83 'authCode': self.auth, 82 'authCode': self.auth,
84 'password': '111111', 83 'password': '111111',
85 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND 84 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND
86 } 85 }
87 r = requests.post(self.base_url, headers=headers, data=postData) 86 r = requests.post(self.base_url, headers=headers, data=postData)
88 self.result = r.json() 87 self.result = r.json()
89 self.assertEqual(self.result['status'], 1, 'test_ParentSpaceNewPassword_success Error') 88 self.assertEqual(self.result['status'], 1, 'test_ParentSpaceNewPassword_success Error')
90 where = {'password': '111111', 89 where = {'password': '111111',
91 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND } 90 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND }
92 self.assertEqual(db_test.select_('acornuser.parents_space_pass', where), 1, 'ParentSpacehangePassword data Error') 91 self.assertEqual(CreateTestData.db_select('acornuser.parents_space_pass', where), 1, 'ParentSpacehangePassword data Error')
93 92
94 def test_ParentSpaceNewPassword_authCodeError(self): 93 def test_ParentSpaceNewPassword_authCodeError(self):
95 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 94 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
96 postData = {'userName': self.mobile, 95 postData = {'userName': self.mobile,
97 'authCode': str(int(self.auth) - 1), 96 'authCode': str(int(self.auth) - 1),
98 'password': '111111', 97 'password': '111111',
99 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND 98 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND
100 } 99 }
101 r = requests.post(self.base_url, headers=headers, data=postData) 100 r = requests.post(self.base_url, headers=headers, data=postData)
102 self.result_2 = r.json() 101 self.result_2 = r.json()
103 self.assertEqual(self.result_2['status'], 1001, 'test_ParentSpaceNewPassword_success Error') 102 self.assertEqual(self.result_2['status'], 1001, 'test_ParentSpaceNewPassword_success Error')
104 103
105 104
106 105
107 106
test_cases/personal_info.py
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 import unittest 4 import unittest
5 import requests 5 import requests
6 from data_fixture.config_data import HOST_BOSS 6 from data_fixture.config_data import HOST_BOSS
7 from data_fixture import config_data as Data 7 from data_fixture import config_data as Data
8 from data_fixture import create_testdata 8 from data_fixture import create_testdata as CreateTestData
9 from data_fixture.mysql_db import DB 9 from data_fixture.mysql_db import DB
10 import os 10 import os
11 import uuid 11 import uuid
12 12
13 db_test = DB() 13
14 current_dir = str(os.path.dirname(__file__)) 14 current_dir = str(os.path.dirname(__file__))
15 15
16 #获取个人信息 16 #获取个人信息
17 class GetPersonalInfo(unittest.TestCase): 17 class GetPersonalInfo(unittest.TestCase):
18 def setUp(self): 18 def setUp(self):
19 self.base_url = HOST_BOSS + "/personal/get" 19 self.base_url = HOST_BOSS + "/personal/get"
20 self.subAccount = str(uuid.uuid4()).replace('-', '') 20 self.subAccount = str(uuid.uuid4()).replace('-', '')
21 create_testdata.pre_subAccount(Data.USER_ID, self.subAccount, 1) 21 CreateTestData.pre_subAccount(Data.USER_ID, self.subAccount, 1)
22 22
23 def tearDown(self): 23 def tearDown(self):
24 pass 24 pass
25 25
26 def test_getParentAccountInfo_success(self): 26 def test_getParentAccountInfo_success(self):
27 headers = {'Accept': '*/*'} 27 headers = {'Accept': '*/*'}
28 getData = {'userId': Data.USER_ID, 'type': 1} 28 getData = {'userId': Data.USER_ID, 'type': 1}
29 r = requests.get(self.base_url, headers=headers, params=getData) 29 r = requests.get(self.base_url, headers=headers, params=getData)
30 self.result_1 = r.json() 30 self.result_1 = r.json()
31 self.assertEqual(self.result_1['status'], 1, 'get parent info fail') 31 self.assertEqual(self.result_1['status'], 1, 'get parent info fail')
32 32
33 def test_getChildAccountInfo_success(self): 33 def test_getChildAccountInfo_success(self):
34 headers = {'Accept': '*/*'} 34 headers = {'Accept': '*/*'}
35 getData = {'userId': Data.USER_ID, 'type': 2} 35 getData = {'userId': Data.USER_ID, 'type': 2}
36 r = requests.get(self.base_url, headers=headers, params=getData) 36 r = requests.get(self.base_url, headers=headers, params=getData)
37 self.result_2 = r.json() 37 self.result_2 = r.json()
38 self.assertEqual(self.result_2['status'], 1, 'get child info fail') 38 self.assertEqual(self.result_2['status'], 1, 'get child info fail')
39 39
40 40
41 #修改个人信息 41 #修改个人信息
42 class UpdatePersonalInfo(unittest.TestCase): 42 class UpdatePersonalInfo(unittest.TestCase):
43 def setUp(self): 43 def setUp(self):
44 self.base_url = HOST_BOSS + "/personal/update" 44 self.base_url = HOST_BOSS + "/personal/update"
45 self.subAccount = str(uuid.uuid4()).replace('-', '') 45 self.subAccount = str(uuid.uuid4()).replace('-', '')
46 create_testdata.pre_subAccount(Data.PARENT_ID, self.subAccount, 1) 46 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount, 1)
47 47
48 def tearDown(self): 48 def tearDown(self):
49 pass 49 pass
50 50
51 def test_UpdateParentInfo_success(self): 51 def test_UpdateParentInfo_success(self):
52 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 52 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
53 postData = { 53 postData = {
54 'userId':Data.PARENT_ID, 54 'userId':Data.PARENT_ID,
55 'type': 1, 55 'type': 1,
56 'name':'主账户', 56 'name':'主账户',
57 'birthday':'2003-12-12', 57 'birthday':'2003-12-12',
58 'gradeId': '9', 58 'gradeId': '9',
59 'regionId' : '320100', 59 'regionId' : '320100',
60 'schoolId': '500018', 60 'schoolId': '500018',
61 'qq': '1313131313', 61 'qq': '1313131313',
62 'gender': 'female', 62 'gender': 'female',
63 'regionName': '江苏南京玄武', 63 'regionName': '江苏南京玄武',
64 'deviceNumber': Data.DEVICE_NUMBER_NEW, 64 'deviceNumber': Data.DEVICE_NUMBER_NEW,
65 'address':'幸福小区308' 65 'address':'幸福小区308'
66 } 66 }
67 where_data_1 = {'id':Data.PARENT_ID, 'qq': '1313131313'} 67 where_data_1 = {'id':Data.PARENT_ID, 'qq': '1313131313'}
68 where_data_2 = {'user_id':Data.PARENT_ID, 'school_id': '500018'} 68 where_data_2 = {'user_id':Data.PARENT_ID, 'school_id': '500018'}
69 where_data_3 = {'user_id':Data.PARENT_ID, 'address':'幸福小区308'} 69 where_data_3 = {'user_id':Data.PARENT_ID, 'address':'幸福小区308'}
70 r = requests.post(self.base_url, headers=headers, data=postData) 70 r = requests.post(self.base_url, headers=headers, data=postData)
71 self.result_1 = r.json() 71 self.result_1 = r.json()
72 self.assertEqual(self.result_1['status'], 1, 'UpdateParentInfo ERROR') 72 self.assertEqual(self.result_1['status'], 1, 'UpdateParentInfo ERROR')
73 self.assertTrue(db_test.select_('acornuser.acorn_user', where_data_1), 1) 73 self.assertTrue(CreateTestData.db_select('acornuser.acorn_user', where_data_1), 1)
74 self.assertTrue(db_test.select_('acornuser.ozing_student', where_data_2), 1) 74 self.assertTrue(CreateTestData.db_select('acornuser.ozing_student', where_data_2), 1)
75 self.assertTrue(db_test.select_('acornuser.acorn_user_extra', where_data_3), 1) 75 self.assertTrue(CreateTestData.db_select('acornuser.acorn_user_extra', where_data_3), 1)
76 76
77 77
78 def test_UpdateChildInfo_success(self): 78 def test_UpdateChildInfo_success(self):
79 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 79 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
80 postData = { 80 postData = {
81 'userId': Data.PARENT_ID, 81 'userId': Data.PARENT_ID,
82 'type': 2, 82 'type': 2,
83 'name': '子账户', 83 'name': '子账户',
84 'birthday': '2010-12-12', 84 'birthday': '2010-12-12',
85 'gradeId': '6', 85 'gradeId': '6',
86 'regionId': '330100', 86 'regionId': '330100',
87 'schoolId': '6129', 87 'schoolId': '6129',
88 'qq': '1515151515', 88 'qq': '1515151515',
89 'gender': 'female', 89 'gender': 'female',
90 'regionName': '浙江杭州西湖', 90 'regionName': '浙江杭州西湖',
91 'deviceNumber': Data.DEVICE_NUMBER_NEW, 91 'deviceNumber': Data.DEVICE_NUMBER_NEW,
92 'address': '鲜花小区808' 92 'address': '鲜花小区808'
93 } 93 }
94 where_data_child = {'qq': '1515151515', 'address': '鲜花小区808'} 94 where_data_child = {'qq': '1515151515', 'address': '鲜花小区808'}
95 r = requests.post(self.base_url, headers=headers, data=postData) 95 r = requests.post(self.base_url, headers=headers, data=postData)
96 self.result_2 = r.json() 96 self.result_2 = r.json()
97 self.assertEqual(self.result_2['status'], 1, 'UpdateParentInfo ERROR') 97 self.assertEqual(self.result_2['status'], 1, 'UpdateParentInfo ERROR')
98 self.assertTrue(db_test.select_('acornuser.child_user', where_data_child)) 98 self.assertTrue(CreateTestData.db_select('acornuser.child_user', where_data_child))
99 99
100 100
101 # 添加和修改个性签名 101 # 添加和修改个性签名
102 class AddorUpdateSignature(unittest.TestCase): 102 class AddorUpdateSignature(unittest.TestCase):
103 def setUp(self): 103 def setUp(self):
104 self.base_url = HOST_BOSS + "/signature/addOrUpdateSignature" 104 self.base_url = HOST_BOSS + "/signature/addOrUpdateSignature"
105 self.subAccount = str(uuid.uuid4()).replace('-', '') 105 self.subAccount = str(uuid.uuid4()).replace('-', '')
106 create_testdata.pre_subAccount(Data.PARENT_ID, self.subAccount, 0) 106 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount, 0)
107 create_testdata.checkSignatureExists(Data.PARENT_ID, 1) 107 CreateTestData.checkSignatureExists(Data.PARENT_ID, 1)
108 create_testdata.checkSignatureExists(self.subAccount, 2) 108 CreateTestData.checkSignatureExists(self.subAccount, 2)
109 109
110 def tearDown(self): 110 def tearDown(self):
111 pass 111 pass
112 112
113 def test_AddParentSignature_success(self): 113 def test_AddParentSignature_success(self):
114 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 114 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
115 postData = {'userId':Data.PARENT_ID, 115 postData = {'userId':Data.PARENT_ID,
116 'signature':'who is the clever Polly 谁是聪明的鹦鹉', 116 'signature':'who is the clever Polly 谁是聪明的鹦鹉',
117 'type': 1} 117 'type': 1}
118 r = requests.post(self.base_url, headers=headers, data=postData) 118 r = requests.post(self.base_url, headers=headers, data=postData)
119 self.result_1 = r.json() 119 self.result_1 = r.json()
120 self.assertEqual(self.result_1['status'], 1, 'AddParentSignature ERROR') 120 self.assertEqual(self.result_1['status'], 1, 'AddParentSignature ERROR')
121 where_1 = {'user_id':Data.PARENT_ID, 121 where_1 = {'user_id':Data.PARENT_ID,
122 'signature':'who is the clever Polly 谁是聪明的鹦鹉'} 122 'signature':'who is the clever Polly 谁是聪明的鹦鹉'}
123 self.assertEqual(db_test.select_('acornuser.acorn_user_extra', where_1), 1) 123 self.assertEqual(CreateTestData.db_select('acornuser.acorn_user_extra', where_1), 1)
124 124
125 def test_UpdateParentSignature_success(self): 125 def test_UpdateParentSignature_success(self):
126 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 126 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
127 postData = {'userId':Data.PARENT_ID, 127 postData = {'userId':Data.PARENT_ID,
128 'signature':'clever Polly 一只吵人的鹦鹉', 128 'signature':'clever Polly 一只吵人的鹦鹉',
129 'type': 1} 129 'type': 1}
130 r = requests.post(self.base_url, headers=headers, data=postData) 130 r = requests.post(self.base_url, headers=headers, data=postData)
131 self.result_2 = r.json() 131 self.result_2 = r.json()
132 self.assertEqual(self.result_2['status'], 1, 'UpdateParentSignature ERROR') 132 self.assertEqual(self.result_2['status'], 1, 'UpdateParentSignature ERROR')
133 where_2 = {'user_id':Data.PARENT_ID, 133 where_2 = {'user_id':Data.PARENT_ID,
134 'signature':'clever Polly 一只吵人的鹦鹉'} 134 'signature':'clever Polly 一只吵人的鹦鹉'}
135 self.assertEqual(db_test.select_('acornuser.acorn_user_extra', where_2), 1, 'UpdateParentSignature ERROR') 135 self.assertEqual(CreateTestData.db_select('acornuser.acorn_user_extra', where_2), 1, 'UpdateParentSignature ERROR')
136 136
137 def test_AddChildSignature_success(self): 137 def test_AddChildSignature_success(self):
138 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 138 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
139 postData = {'userId':self.subAccount, 139 postData = {'userId':self.subAccount,
140 'signature':'Polly can you spell its name 波利', 140 'signature':'Polly can you spell its name 波利',
141 'type': 2} 141 'type': 2}
142 r = requests.post(self.base_url, headers=headers, data=postData) 142 r = requests.post(self.base_url, headers=headers, data=postData)
143 self.result_3 = r.json() 143 self.result_3 = r.json()
144 self.assertEqual(self.result_3['status'], 1, 'AddChildSignature ERROR') 144 self.assertEqual(self.result_3['status'], 1, 'AddChildSignature ERROR')
145 where_1 = {'sub_account_id':self.subAccount, 145 where_1 = {'sub_account_id':self.subAccount,
146 'signature':'Polly can you spell its name 波利'} 146 'signature':'Polly can you spell its name 波利'}
147 self.assertEqual(db_test.select_('acornuser.subAccount_user_extra', where_1), 1, 'AddChildSignature ERROR') 147 self.assertEqual(CreateTestData.db_select('acornuser.subAccount_user_extra', where_1), 1, 'AddChildSignature ERROR')
148 148
149 def test_UpdateChildSignature_success(self): 149 def test_UpdateChildSignature_success(self):
150 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 150 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
151 postData = {'userId':self.subAccount, 151 postData = {'userId':self.subAccount,
152 'signature':'波利 P-O-L-L-Y', 152 'signature':'波利 P-O-L-L-Y',
153 'type': 2} 153 'type': 2}
154 r = requests.post(self.base_url, headers=headers, data=postData) 154 r = requests.post(self.base_url, headers=headers, data=postData)
155 self.result_4 = r.json() 155 self.result_4 = r.json()
156 self.assertEqual(self.result_4['status'], 1, 'UPDATEChildSignature ERROR') 156 self.assertEqual(self.result_4['status'], 1, 'UPDATEChildSignature ERROR')
157 where_1 = {'sub_account_id':self.subAccount, 157 where_1 = {'sub_account_id':self.subAccount,
158 'signature':'波利 P-O-L-L-Y'} 158 'signature':'波利 P-O-L-L-Y'}
159 self.assertEqual(db_test.select_('acornuser.subAccount_user_extra', where_1), 1, 'UPDATEChildSignature ERROR') 159 self.assertEqual(CreateTestData.db_select('acornuser.subAccount_user_extra', where_1), 1, 'UPDATEChildSignature ERROR')
160 160
161 161
162 # 显示个性签名 162 # 显示个性签名
163 class GetSignature(unittest.TestCase): 163 class GetSignature(unittest.TestCase):
164 def setUp(self): 164 def setUp(self):
165 self.base_url = HOST_BOSS + "/signature/info" 165 self.base_url = HOST_BOSS + "/signature/info"
166 self.subAccount = str(uuid.uuid4()).replace('-', '') 166 self.subAccount = str(uuid.uuid4()).replace('-', '')
167 create_testdata.checkSignatureExists(Data.PARENT_ID, 1) 167 CreateTestData.checkSignatureExists(Data.PARENT_ID, 1)
168 create_testdata.checkSignatureExists(self.subAccount, 2) 168 CreateTestData.checkSignatureExists(self.subAccount, 2)
169 169
170 def tearDown(self): 170 def tearDown(self):
171 pass 171 pass
172 172
173 def test_getParentSignature_success(self): 173 def test_getParentSignature_success(self):
174 headers = {'Accept': '*/*'} 174 headers = {'Accept': '*/*'}
175 getData = {'userId': Data.PARENT_ID, 'type': 1} 175 getData = {'userId': Data.PARENT_ID, 'type': 1}
176 r = requests.get(self.base_url, headers=headers, params=getData) 176 r = requests.get(self.base_url, headers=headers, params=getData)
177 self.result_1 = r.json() 177 self.result_1 = r.json()
178 self.assertEqual(self.result_1['status'], 1, 'get parent Signature fail') 178 self.assertEqual(self.result_1['status'], 1, 'get parent Signature fail')
179 179
180 def test_getChildSignature_success(self): 180 def test_getChildSignature_success(self):
181 headers = {'Accept': '*/*'} 181 headers = {'Accept': '*/*'}
182 getData = {'userId': self.subAccount, 'type': 2} 182 getData = {'userId': self.subAccount, 'type': 2}
183 r = requests.get(self.base_url, headers=headers, params=getData) 183 r = requests.get(self.base_url, headers=headers, params=getData)
184 self.result_2 = r.json() 184 self.result_2 = r.json()
185 self.assertEqual(self.result_2['status'], 1, 'get child Signature fail') 185 self.assertEqual(self.result_2['status'], 1, 'get child Signature fail')
186 186
187 187
188 #更新用户头像 -- 默认图片 188 #更新用户头像 -- 默认图片
189 class UpdatePortraitDefault(unittest.TestCase): 189 class UpdatePortraitDefault(unittest.TestCase):
190 def setUp(self): 190 def setUp(self):
191 self.base_url = HOST_BOSS + "/profile/picture/default" 191 self.base_url = HOST_BOSS + "/profile/picture/default"
192 self.subAccount = str(uuid.uuid4()).replace('-', '') 192 self.subAccount = str(uuid.uuid4()).replace('-', '')
193 create_testdata.pre_subAccount(Data.PARENT_ID, self.subAccount, 0) 193 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount, 0)
194 194
195 def tearDown(self): 195 def tearDown(self):
196 pass 196 pass
197 197
198 def test_UpdateParentPortraitDefault_success(self): 198 def test_UpdateParentPortraitDefault_success(self):
199 headers = {'Accept': '*/*', 'Content-Type':'application/x-www-form-urlencoded'} 199 headers = {'Accept': '*/*', 'Content-Type':'application/x-www-form-urlencoded'}
200 postData = {'userId': Data.PARENT_ID, 'type': 1, 200 postData = {'userId': Data.PARENT_ID, 'type': 1,
201 'defaultImg':'http://hjxprodbucket.oss.aliyuncs.com/static/upload/boss_api/announcement/2017-08-29/61e8d8cf-651f-49c9-beb2-ff1387af390a.png'} 201 'defaultImg':'http://hjxprodbucket.oss.aliyuncs.com/static/upload/boss_api/announcement/2017-08-29/61e8d8cf-651f-49c9-beb2-ff1387af390a.png'}
202 r = requests.post(self.base_url, headers=headers, data=postData) 202 r = requests.post(self.base_url, headers=headers, data=postData)
203 self.result_1 = r.json() 203 self.result_1 = r.json()
204 self.assertEqual(self.result_1['status'], 1, 'UpdateParentPortrait fail') 204 self.assertEqual(self.result_1['status'], 1, 'UpdateParentPortrait fail')
205 where = {'user_id': Data.PARENT_ID, 205 where = {'user_id': Data.PARENT_ID,
206 'portrait':'static/upload/boss_api/announcement/2017-08-29/61e8d8cf-651f-49c9-beb2-ff1387af390a.png'} 206 'portrait':'static/upload/boss_api/announcement/2017-08-29/61e8d8cf-651f-49c9-beb2-ff1387af390a.png'}
207 self.assertEqual(db_test.select_('acornuser.ozing_student', where), 1, 'UpdateParentPortraitDefault fail') 207 self.assertEqual(CreateTestData.db_select('acornuser.ozing_student', where), 1, 'UpdateParentPortraitDefault fail')
208 208
209 def test_UpdateChildPortraitDefault_success(self): 209 def test_UpdateChildPortraitDefault_success(self):
210 headers = {'Accept': '*/*', 'Content-Type':'application/x-www-form-urlencoded'} 210 headers = {'Accept': '*/*', 'Content-Type':'application/x-www-form-urlencoded'}
211 postData = {'userId': self.subAccount, 'type': 2, 211 postData = {'userId': self.subAccount, 'type': 2,
212 'defaultImg': 'http://hjxprodbucket.oss.aliyuncs.com/static/upload/boss_api/announcement/2017-08-29/61e8d8cf-651f-49c9-beb2-ff1387af390a.png'} 212 'defaultImg': 'http://hjxprodbucket.oss.aliyuncs.com/static/upload/boss_api/announcement/2017-08-29/61e8d8cf-651f-49c9-beb2-ff1387af390a.png'}
213 r = requests.post(self.base_url, headers=headers, data=postData) 213 r = requests.post(self.base_url, headers=headers, data=postData)
214 self.result_2 = r.json() 214 self.result_2 = r.json()
215 self.assertEqual(self.result_2['status'], 1, 'UpdateChildPortrait fail') 215 self.assertEqual(self.result_2['status'], 1, 'UpdateChildPortrait fail')
216 where = {'subAccountId': self.subAccount, 216 where = {'subAccountId': self.subAccount,
217 'image': 'static/upload/boss_api/announcement/2017-08-29/61e8d8cf-651f-49c9-beb2-ff1387af390a.png'} 217 'image': 'static/upload/boss_api/announcement/2017-08-29/61e8d8cf-651f-49c9-beb2-ff1387af390a.png'}
218 self.assertEqual(db_test.select_('acornuser.child_user', where), 1, 'UpdateChildPortraitDefault fail') 218 self.assertEqual(CreateTestData.db_select('acornuser.child_user', where), 1, 'UpdateChildPortraitDefault fail')
219 219
220 220
221 #更新用户头像-- 上传文件 221 #更新用户头像-- 上传文件
222 class UpdatePortrait(unittest.TestCase): 222 class UpdatePortrait(unittest.TestCase):
223 def setUp(self): 223 def setUp(self):
224 self.base_url = HOST_BOSS + "/profile/picture/update" 224 self.base_url = HOST_BOSS + "/profile/picture/update"
225 img_file_1 = current_dir + '/1.jpg' 225 img_file_1 = current_dir + '/1.jpg'
226 img_file_2 = current_dir + '/1.png' 226 img_file_2 = current_dir + '/1.png'
227 self.img_1 = open(img_file_1, 'rb') 227 self.img_1 = open(img_file_1, 'rb')
228 self.img_2 = open(img_file_2, 'rb') 228 self.img_2 = open(img_file_2, 'rb')
229 self.subAccount = str(uuid.uuid4()).replace('-', '') 229 self.subAccount = str(uuid.uuid4()).replace('-', '')
230 create_testdata.pre_subAccount(Data.PARENT_ID, self.subAccount, 0) 230 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount, 0)
231 231
232 def tearDown(self): 232 def tearDown(self):
233 pass 233 pass
234 234
235 def test_UpdateParentPortraitDefault_success(self): 235 def test_UpdateParentPortraitDefault_success(self):
236 headers = {'Accept': '*/*', 'Content-Type':'multipart/form-data; boundary=cada83b1d4b82a7ccd28ae8f7f6d6'} 236 headers = {'Accept': '*/*', 'Content-Type':'multipart/form-data; boundary=cada83b1d4b82a7ccd28ae8f7f6d6'}
237 postData = {'userId': Data.PARENT_ID, 'type': 1} 237 postData = {'userId': Data.PARENT_ID, 'type': 1}
238 file = {'img': self.img_1} 238 file = {'img': self.img_1}
239 r = requests.post(self.base_url, data=postData, files=file) 239 r = requests.post(self.base_url, data=postData, files=file)
240 ss = r.request 240 ss = r.request
241 self.img_1.close() 241 self.img_1.close()
242 self.result_1 = r.json() 242 self.result_1 = r.json()
243 self.assertEqual(self.result_1['status'], 1, 'UpdateParentPortrait fail') 243 self.assertEqual(self.result_1['status'], 1, 'UpdateParentPortrait fail')
244 self.assertEqual(len(self.result_1['data']), 1, 'UpdateParentPortrait data fail') 244 self.assertEqual(len(self.result_1['data']), 1, 'UpdateParentPortrait data fail')
245 245
246 def test_UpdateChildPortrait_success(self): 246 def test_UpdateChildPortrait_success(self):
247 headers = {'Accept': '*/*', 'Content-Type':'multipart/form-data; boundary=fa0cada83b1d4b82a7ccd28ae8f7f6d6'} 247 headers = {'Accept': '*/*', 'Content-Type':'multipart/form-data; boundary=fa0cada83b1d4b82a7ccd28ae8f7f6d6'}
248 postData = {'userId': self.subAccount, 'type': 2} 248 postData = {'userId': self.subAccount, 'type': 2}
249 file = {'img': self.img_2} 249 file = {'img': self.img_2}
250 r = requests.post(self.base_url, data=postData, files=file) 250 r = requests.post(self.base_url, data=postData, files=file)
251 ss = r.request 251 ss = r.request
252 self.img_2.close() 252 self.img_2.close()
253 self.result_2 = r.json() 253 self.result_2 = r.json()
254 self.assertEqual(self.result_2['status'], 1, 'UpdateChildPortrait fail') 254 self.assertEqual(self.result_2['status'], 1, 'UpdateChildPortrait fail')
255 self.assertEqual(len(self.result_2['data']), 1, 'UpdateChildPortrait data fail') 255 self.assertEqual(len(self.result_2['data']), 1, 'UpdateChildPortrait data fail')
256 256
257 257
258 258
test_cases/press.py
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 import unittest 4 import unittest
5 import requests 5 import requests
6 from data_fixture.config_data import HOST_BOSS 6 from data_fixture.config_data import HOST_BOSS
7 from data_fixture import create_testdata as CreateTestData 7 from data_fixture import create_testdata as CreateTestData
8 from data_fixture import config_data as Data 8 from data_fixture import config_data as Data
9 from data_fixture.mysql_db import DB 9 from data_fixture.mysql_db import DB
10 10
11 db_test = DB()
12 11
13 12
14 # 获取教材版本列表 13 # 获取教材版本列表
15 class GetPressList(unittest.TestCase): 14 class GetPressList(unittest.TestCase):
16 def setUp(self): 15 def setUp(self):
17 self.base_url = HOST_BOSS + '/press/list' 16 self.base_url = HOST_BOSS + '/press/list'
18 17
19 def tearDown(self): 18 def tearDown(self):
20 print(self.result) 19 print(self.result)
21 20
22 def test_getPressList_success(self): 21 def test_getPressList_success(self):
23 headers = {'Accept': '*/*'} 22 headers = {'Accept': '*/*'}
24 getData = {'subjectName': '数学'} 23 getData = {'subjectName': '数学'}
25 r = requests.get(self.base_url, headers=headers, params=getData) 24 r = requests.get(self.base_url, headers=headers, params=getData)
26 self.result = r.json() 25 self.result = r.json()
27 self.assertEqual(self.result['status'], 1, 'getPressList Error') 26 self.assertEqual(self.result['status'], 1, 'getPressList Error')
28 self.assertTrue(len(self.result['data']) > 1, 'getPressList data Error') 27 self.assertTrue(len(self.result['data']) > 1, 'getPressList data Error')
29 28
30 29
31 # 获取用户版本信息接口 30 # 获取用户版本信息接口
32 class GetUserPressInfo(unittest.TestCase): 31 class GetUserPressInfo(unittest.TestCase):
33 def setUp(self): 32 def setUp(self):
34 self.base_url = HOST_BOSS + '/userPress/info' 33 self.base_url = HOST_BOSS + '/userPress/info'
35 CreateTestData.pre_GetUserPressInfo(Data.USER_ID) 34 CreateTestData.pre_GetUserPressInfo(Data.USER_ID)
36 35
37 def tearDown(self): 36 def tearDown(self):
38 print(self.result) 37 print(self.result)
39 38
40 def test_getPressList_success(self): 39 def test_getPressList_success(self):
41 headers = {'Accept': '*/*'} 40 headers = {'Accept': '*/*'}
42 getData = {'userId': Data.USER_ID, 'gradeId': 9} 41 getData = {'userId': Data.USER_ID, 'gradeId': 9}
43 r = requests.get(self.base_url, headers=headers, params=getData) 42 r = requests.get(self.base_url, headers=headers, params=getData)
44 self.result = r.json() 43 self.result = r.json()
45 self.assertEqual(self.result['status'], 1, 'GetUserPressInfo Error') 44 self.assertEqual(self.result['status'], 1, 'GetUserPressInfo Error')
46 data = self.result['data'] 45 data = self.result['data']
47 for item in data: 46 for item in data:
48 if item['subject'] == '语文': 47 if item['subject'] == '语文':
49 press_to_check = item['press'] 48 press_to_check = item['press']
50 self.assertEqual(press_to_check, '北京师范大学出版社', 'GetUserPressInfo data Error') 49 self.assertEqual(press_to_check, '北京师范大学出版社', 'GetUserPressInfo data Error')
51 50
52 51
53 # 修改版本信息接口 52 # 修改版本信息接口
54 class UpdateUserPressInfo(unittest.TestCase): 53 class UpdateUserPressInfo(unittest.TestCase):
55 def setUp(self): 54 def setUp(self):
56 self.base_url = HOST_BOSS + '/userPress/update' 55 self.base_url = HOST_BOSS + '/userPress/update'
57 56
58 def tearDown(self): 57 def tearDown(self):
59 print(self.result) 58 print(self.result)
60 59
61 def test_getPressList_success(self): 60 def test_getPressList_success(self):
62 headers = {'Accept': '*/*', 'Content-Type': 'application/x-www-form-urlencoded'} 61 headers = {'Accept': '*/*', 'Content-Type': 'application/x-www-form-urlencoded'}
63 postData = {'userId': Data.USER_ID, 62 postData = {'userId': Data.USER_ID,
64 'chemistry': '山东教育出版社', 63 'chemistry': '山东教育出版社',
65 'chinese': '江苏教育出版社', 64 'chinese': '江苏教育出版社',
66 'biology': '人民教育出版社', 65 'biology': '人民教育出版社',
67 'geography': '人民教育出版社', 66 'geography': '人民教育出版社',
68 'physics': '人民教育出版社', 67 'physics': '人民教育出版社',
69 'english': '外语教学与研究出版社', 68 'english': '外语教学与研究出版社',
70 'political': '人民教育出版社', 69 'political': '人民教育出版社',
71 'math': '江苏科学技术出版社', 70 'math': '江苏科学技术出版社',
72 'history': '人民教育出版社' 71 'history': '人民教育出版社'
73 } 72 }
74 r = requests.post(self.base_url, headers=headers, data=postData) 73 r = requests.post(self.base_url, headers=headers, data=postData)
75 self.result = r.json() 74 self.result = r.json()
76 self.assertEqual(self.result['status'], 1, 'UpdateUserPressInfo Error') 75 self.assertEqual(self.result['status'], 1, 'UpdateUserPressInfo Error')
77 where = {'user_id': Data.USER_ID, 76 where = {'user_id': Data.USER_ID,
78 'chemistry': '山东教育出版社', 77 'chemistry': '山东教育出版社',
79 'chinese': '江苏教育出版社', 78 'chinese': '江苏教育出版社',
80 'biology': '人民教育出版社', 79 'biology': '人民教育出版社',
81 'geography': '人民教育出版社', 80 'geography': '人民教育出版社',
82 'physics': '人民教育出版社', 81 'physics': '人民教育出版社',
83 'english': '外语教学与研究出版社', 82 'english': '外语教学与研究出版社',
84 'political': '人民教育出版社', 83 'political': '人民教育出版社',
85 'math': '江苏科学技术出版社', 84 'math': '江苏科学技术出版社',
86 'history': '人民教育出版社' 85 'history': '人民教育出版社'
87 } 86 }
88 self.assertEqual(db_test.select_('acornuser.user_press', where), 1, 'UpdateUserPressInfo data Error') 87 self.assertEqual(CreateTestData.db_select('acornuser.user_press', where), 1, 'UpdateUserPressInfo data Error')
89 88
90 89
91 90
92 91
test_cases/register.py
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 import unittest 4 import unittest
5 import requests 5 import requests
6 from data_fixture.config_data import HOST_BOSS 6 from data_fixture.config_data import HOST_BOSS
7 from data_fixture import create_testdata as CreateTestData 7 from data_fixture import create_testdata as CreateTestData
8 from data_fixture import config_data as Data 8 from data_fixture import config_data as Data
9 from data_fixture.mysql_db import DB 9 from data_fixture.mysql_db import DB
10 import os 10 import os
11 11
12 db_test = DB() 12
13 current_dir = str(os.path.dirname(__file__)) 13 current_dir = str(os.path.dirname(__file__))
14 14
15 #手机号重复验证 15 #手机号重复验证
16 class PhoneUsedCheck(unittest.TestCase): 16 class PhoneUsedCheck(unittest.TestCase):
17 def setUp(self): 17 def setUp(self):
18 self.base_url = HOST_BOSS + "/ozing/timer/user/registered" 18 self.base_url = HOST_BOSS + "/ozing/timer/user/registered"
19 CreateTestData.pre_phoneUsedCheck(Data.USER_PHONE_USED, True) 19 CreateTestData.pre_phoneUsedCheck(Data.USER_PHONE_USED, True)
20 CreateTestData.pre_phoneUsedCheck(Data.USER_PHONE_UNUSED, False) 20 CreateTestData.pre_phoneUsedCheck(Data.USER_PHONE_UNUSED, False)
21 21
22 def tearDown(self): 22 def tearDown(self):
23 print(self.result) 23 print(self.result)
24 24
25 # 注册过的手机号 25 # 注册过的手机号
26 def test_phone_used(self): 26 def test_phone_used(self):
27 getData = {'mobile':Data.USER_PHONE_USED} 27 getData = {'mobile':Data.USER_PHONE_USED}
28 r = requests.get(self.base_url, params=getData) 28 r = requests.get(self.base_url, params=getData)
29 self.result = r.json() 29 self.result = r.json()
30 self.assertEqual(self.result['status'], True) 30 self.assertEqual(self.result['status'], True)
31 31
32 # 手机号未注册 32 # 手机号未注册
33 def test_phone_unused(self): 33 def test_phone_unused(self):
34 getData = {'mobile':Data.USER_PHONE_UNUSED} 34 getData = {'mobile':Data.USER_PHONE_UNUSED}
35 r = requests.get(self.base_url, params=getData) 35 r = requests.get(self.base_url, params=getData)
36 self.result = r.json() 36 self.result = r.json()
37 self.assertEqual(self.result['status'], False) 37 self.assertEqual(self.result['status'], False)
38 38
39 39
40 # 获取验证码 --register 40 # 获取验证码 --register
41 class GetAuthCode(unittest.TestCase): 41 class GetAuthCode(unittest.TestCase):
42 def setUp(self): 42 def setUp(self):
43 self.base_url = HOST_BOSS + "/ozing/timer/user/fetchAuthCode" 43 self.base_url = HOST_BOSS + "/ozing/timer/user/fetchAuthCode"
44 self.mobile = '13833333333' 44 self.mobile = '13833333333'
45 45
46 def tearDown(self): 46 def tearDown(self):
47 print(self.result) 47 print(self.result)
48 48
49 def test_getAuthCode_success(self): 49 def test_getAuthCode_success(self):
50 headers = {'Accept': '*/*'} 50 headers = {'Accept': '*/*'}
51 postData = {'mobile': self.mobile, 'type': 'register'} 51 postData = {'mobile': self.mobile, 'type': 'register'}
52 r = requests.post(self.base_url, headers=headers, data=postData) 52 r = requests.post(self.base_url, headers=headers, data=postData)
53 self.result = r.json() 53 self.result = r.json()
54 self.assertEqual(self.result['status'], 100) 54 self.assertEqual(self.result['status'], 100)
55 55
56 56
57 #用户注册 57 #用户注册
58 class SignIn(unittest.TestCase): 58 class SignIn(unittest.TestCase):
59 def setUp(self): 59 def setUp(self):
60 self.base_url = HOST_BOSS + "/ozing/timer/anking/user" 60 self.base_url = HOST_BOSS + "/ozing/timer/anking/user"
61 self.smsCode = CreateTestData.fet_authCode(Data.USER_PHONE) 61 self.smsCode = CreateTestData.fet_authCode(Data.USER_PHONE)
62 CreateTestData.pre_phoneUsedCheck(Data.USER_PHONE, False) 62 CreateTestData.pre_phoneUsedCheck(Data.USER_PHONE, False)
63 63
64 def tearDown(self): 64 def tearDown(self):
65 print(self.result) 65 print(self.result)
66 66
67 def test_signIn_success(self): 67 def test_signIn_success(self):
68 headers = {'Content-Type': 'application/json', 'Accept': '*/*'} 68 headers = {'Content-Type': 'application/json', 'Accept': '*/*'}
69 postData = { 69 postData = {
70 "username": Data.USER_PHONE, 70 "username": Data.USER_PHONE,
71 "password": 'Hjx111111', 71 "password": 'Hjx111111',
72 "source": 'Android', 72 "source": 'Android',
73 "smscode": self.smsCode 73 "smscode": self.smsCode
74 } 74 }
75 r = requests.post(self.base_url, headers=headers, json=postData) 75 r = requests.post(self.base_url, headers=headers, json=postData)
76 self.result = r.json() 76 self.result = r.json()
77 self.assertEqual(self.result['status'], 100) 77 self.assertEqual(self.result['status'], 100)
78 78
79 79
80 # 检查用户注册信息是否完整 80 # 检查用户注册信息是否完整
81 class RegisterExtrainfoCheck(unittest.TestCase): 81 class RegisterExtrainfoCheck(unittest.TestCase):
82 def setUp(self): 82 def setUp(self):
83 self.base_url = HOST_BOSS + '/register/extrainfo/check' 83 self.base_url = HOST_BOSS + '/register/extrainfo/check'
84 CreateTestData.pre_register_extrainfo_check(Data.USER_ID, True) 84 CreateTestData.pre_register_extrainfo_check(Data.USER_ID, True)
85 CreateTestData.pre_register_extrainfo_check(Data.USER_ID_INCOMPLETE, False) 85 CreateTestData.pre_register_extrainfo_check(Data.USER_ID_INCOMPLETE, False)
86 86
87 def tearDown(self): 87 def tearDown(self):
88 pass 88 pass
89 89
90 def test_checkRegisterExtrainfo_Complete_success(self): 90 def test_checkRegisterExtrainfo_Complete_success(self):
91 headers = {'Accept': '*/*'} 91 headers = {'Accept': '*/*'}
92 getData = {'userId': Data.USER_ID} 92 getData = {'userId': Data.USER_ID}
93 r = requests.get(self.base_url, headers=headers, params=getData) 93 r = requests.get(self.base_url, headers=headers, params=getData)
94 self.result_1 = r.json() 94 self.result_1 = r.json()
95 self.assertEqual(self.result_1['status'], 1, 'test_checkRegisterExtrainfo_Complete fail') 95 self.assertEqual(self.result_1['status'], 1, 'test_checkRegisterExtrainfo_Complete fail')
96 self.assertEqual(self.result_1['data']['isRegisterInfoComplete'], True, 'test_checkRegisterExtrainfo_Complete data fail') 96 self.assertEqual(self.result_1['data']['isRegisterInfoComplete'], True, 'test_checkRegisterExtrainfo_Complete data fail')
97 97
98 def test_checkRegisterExtrainfo_inComplete_success(self): 98 def test_checkRegisterExtrainfo_inComplete_success(self):
99 headers = {'Accept': '*/*'} 99 headers = {'Accept': '*/*'}
100 getData = {'userId': Data.USER_ID_INCOMPLETE} 100 getData = {'userId': Data.USER_ID_INCOMPLETE}
101 r = requests.get(self.base_url, headers=headers, params=getData) 101 r = requests.get(self.base_url, headers=headers, params=getData)
102 self.result_2 = r.json() 102 self.result_2 = r.json()
103 self.assertEqual(self.result_2['status'], 1, 'test_checkRegisterExtrainfo_inComplete fail') 103 self.assertEqual(self.result_2['status'], 1, 'test_checkRegisterExtrainfo_inComplete fail')
104 self.assertEqual(self.result_2['data']['isRegisterInfoComplete'], False, 104 self.assertEqual(self.result_2['data']['isRegisterInfoComplete'], False,
105 'test_checkRegisterExtrainfo_inComplete data fail') 105 'test_checkRegisterExtrainfo_inComplete data fail')
106 106
107 107
108 # 提交注册信息 108 # 提交注册信息
109 class RegisterExtrainfoSubmit(unittest.TestCase): 109 class RegisterExtrainfoSubmit(unittest.TestCase):
110 def setUp(self): 110 def setUp(self):
111 self.base_url = HOST_BOSS + '/register/extrainfo/submit' 111 self.base_url = HOST_BOSS + '/register/extrainfo/submit'
112 112
113 def tearDown(self): 113 def tearDown(self):
114 print(self.result) 114 print(self.result)
115 115
116 def test_RegisterExtrainfoSubmit_success(self): 116 def test_RegisterExtrainfoSubmit_success(self):
117 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 117 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
118 postData = { 118 postData = {
119 'name': '测试测试lalalallal', 119 'name': '测试测试lalalallal',
120 'gradeId': 7, 120 'gradeId': 7,
121 'schoolId': 68779, 121 'schoolId': 68779,
122 'regionName': '浙江杭州西湖', 122 'regionName': '浙江杭州西湖',
123 'regionId': 330106, 123 'regionId': 330106,
124 'userId': Data.USER_ID, 124 'userId': Data.USER_ID,
125 'chinese': '北京出版社', 125 'chinese': '北京出版社',
126 'english': '人民教育出版社', 126 'english': '人民教育出版社',
127 'math': '人民教育出版社' 127 'math': '人民教育出版社'
128 } 128 }
129 r = requests.post(self.base_url, headers=headers, data=postData) 129 r = requests.post(self.base_url, headers=headers, data=postData)
130 self.result = r.json() 130 self.result = r.json()
131 self.assertEqual(self.result['status'], 1, 'RegisterExtrainfoSubmit Error') 131 self.assertEqual(self.result['status'], 1, 'RegisterExtrainfoSubmit Error')
132 where_1 = {'id': Data.USER_ID,'nickname': '测试测试lalalallal'} 132 where_1 = {'id': Data.USER_ID,'nickname': '测试测试lalalallal'}
133 where_2 = {'user_id': Data.USER_ID, 133 where_2 = {'user_id': Data.USER_ID,
134 'grade_id': 7, 134 'grade_id': 7,
135 'school_id': 68779, 135 'school_id': 68779,
136 'region_name': '浙江杭州西湖', 136 'region_name': '浙江杭州西湖',
137 'region_id': 330106} 137 'region_id': 330106}
138 where_3 = {'user_id': Data.USER_ID, 138 where_3 = {'user_id': Data.USER_ID,
139 'chinese': '北京出版社', 139 'chinese': '北京出版社',
140 'english': '人民教育出版社', 140 'english': '人民教育出版社',
141 'math': '人民教育出版社' 141 'math': '人民教育出版社'
142 } 142 }
143 self.assertEqual(db_test.select_('acornuser.acorn_user', where_1), 1, 'RegisterExtrainfoSubmit Error') 143 self.assertEqual(CreateTestData.db_select('acornuser.acorn_user', where_1), 1, 'RegisterExtrainfoSubmit Error')
144 self.assertEqual(db_test.select_('acornuser.ozing_student', where_2), 1, 'RegisterExtrainfoSubmit Error') 144 self.assertEqual(CreateTestData.db_select('acornuser.ozing_student', where_2), 1, 'RegisterExtrainfoSubmit Error')
145 self.assertEqual(db_test.select_('acornuser.user_press', where_3), 1, 'RegisterExtrainfoSubmit Error') 145 self.assertEqual(CreateTestData.db_select('acornuser.user_press', where_3), 1, 'RegisterExtrainfoSubmit Error')
146 146
147 147
148 #账户管理界面更换手机号绑定 148 #账户管理界面更换手机号绑定
149 class UpdateUserNameByUserId(unittest.TestCase): 149 class UpdateUserNameByUserId(unittest.TestCase):
150 def setUp(self): 150 def setUp(self):
151 self.base_url = HOST_BOSS + '/electronicCard/updateUserNameByUserId' 151 self.base_url = HOST_BOSS + '/electronicCard/updateUserNameByUserId'
152 self.authCode_1 = CreateTestData.fet_authCode(Data.USER_PHONE_CHANGE_EXISTS) 152 self.authCode_1 = CreateTestData.fet_authCode(Data.USER_PHONE_CHANGE_EXISTS)
153 self.authCode_2 = CreateTestData.fet_authCode(Data.USER_PHONE_CHANGE) 153 self.authCode_2 = CreateTestData.fet_authCode(Data.USER_PHONE_CHANGE)
154 CreateTestData.pre_phoneUsedCheck(Data.USER_PHONE_CHANGE_EXISTS, True) 154 CreateTestData.pre_phoneUsedCheck(Data.USER_PHONE_CHANGE_EXISTS, True)
155 CreateTestData.pre_phoneUsedCheck(Data.USER_PHONE_CHANGE, False) 155 CreateTestData.pre_phoneUsedCheck(Data.USER_PHONE_CHANGE, False)
156 156
157 def tearDown(self): 157 def tearDown(self):
158 print(self.result) 158 print(self.result)
159 159
160 def test_UpdateUserNameByUserId_phoneExists_success(self): 160 def test_UpdateUserNameByUserId_phoneExists_success(self):
161 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 161 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
162 postData = { 162 postData = {
163 'username': Data.USER_PHONE_CHANGE_EXISTS, 163 'username': Data.USER_PHONE_CHANGE_EXISTS,
164 'authCode': self.authCode_1, 164 'authCode': self.authCode_1,
165 'userId': Data.USER_ID 165 'userId': Data.USER_ID
166 } 166 }
167 r = requests.post(self.base_url, headers=headers, data=postData) 167 r = requests.post(self.base_url, headers=headers, data=postData)
168 self.result = r.json() 168 self.result = r.json()
169 self.assertEqual(self.result['status'], 1006, 'UpdateUserNameByUserId_phoneExists Error') 169 self.assertEqual(self.result['status'], 1006, 'UpdateUserNameByUserId_phoneExists Error')
170 170
171 def test_UpdateUserNameByUserId_success(self): 171 def test_UpdateUserNameByUserId_success(self):
172 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 172 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
173 postData = { 173 postData = {
174 'username': Data.USER_PHONE_CHANGE, 174 'username': Data.USER_PHONE_CHANGE,
175 'authCode': self.authCode_2, 175 'authCode': self.authCode_2,
176 'userId': Data.USER_ID 176 'userId': Data.USER_ID
177 } 177 }
178 r = requests.post(self.base_url, headers=headers, data=postData) 178 r = requests.post(self.base_url, headers=headers, data=postData)
179 self.result = r.json() 179 self.result = r.json()
180 self.assertEqual(self.result['status'], 1, 'UpdateUserNameByUserId Error') 180 self.assertEqual(self.result['status'], 1, 'UpdateUserNameByUserId Error')
181 181
182 182
183 # 添加用户反馈 183 # 添加用户反馈
184 class AddFeedBack(unittest.TestCase): 184 class AddFeedBack(unittest.TestCase):
185 def setUp(self): 185 def setUp(self):
186 self.base_url = HOST_BOSS + '/feedback/add' 186 self.base_url = HOST_BOSS + '/feedback/add'
187 img_file = current_dir + '/1.png' 187 img_file = current_dir + '/1.png'
188 self.img = open(img_file, 'rb') 188 self.img = open(img_file, 'rb')
189 189
190 def tearDown(self): 190 def tearDown(self):
191 print(self.result) 191 print(self.result)
192 192
193 def test_AddFeedBack_success(self): 193 def test_AddFeedBack_success(self):
194 headers = {'Content-Type': 'multipart/form-data; boundary=fa0cada83b1d4b82a7ccd28ae8f7f6d6', 'Accept': '*/*'} 194 headers = {'Content-Type': 'multipart/form-data; boundary=fa0cada83b1d4b82a7ccd28ae8f7f6d6', 'Accept': '*/*'}
195 postData = { 195 postData = {
196 'userId': Data.USER_ID, 196 'userId': Data.USER_ID,
197 'content': '11111feedback哦哦哦', 197 'content': '11111feedback哦哦哦',
198 'contact': '00000000', 198 'contact': '00000000',
199 'feedtype': '个人中心' 199 'feedtype': '个人中心'
200 } 200 }
201 file = {'imgs': self.img} 201 file = {'imgs': self.img}
202 202
203 r = requests.post(self.base_url, data=postData, files=file) 203 r = requests.post(self.base_url, data=postData, files=file)
204 #r = requests.post(self.base_url, headers=headers, data=postData) 204 #r = requests.post(self.base_url, headers=headers, data=postData)
205 ss = r.request 205 ss = r.request
206 self.img.close() 206 self.img.close()
207 self.result = r.json() 207 self.result = r.json()
208 self.assertEqual(self.result['status'], 1, 'AddFeedBack Error') 208 self.assertEqual(self.result['status'], 1, 'AddFeedBack Error')
209 select = {'userId': Data.USER_ID, 209 select = {'userId': Data.USER_ID,
210 'content': '11111feedback哦哦哦', 210 'content': '11111feedback哦哦哦',
211 'contact': '00000000', 211 'contact': '00000000',
212 'feedtype': '个人中心'} 212 'feedtype': '个人中心'}
213 self.assertTrue(db_test.select_('acornuser.feedback', select) > 0, 'AddFeedBack data insert Error') 213 self.assertTrue(CreateTestData.db_select('acornuser.feedback', select) > 0, 'AddFeedBack data insert Error')
214 214
215 215
216 # 获取最近观看视频列表 216 # 获取最近观看视频列表
217 class GetRecentVideo(unittest.TestCase): 217 class GetRecentVideo(unittest.TestCase):
218 def setUp(self): 218 def setUp(self):
219 self.base_url = HOST_BOSS + '/personal/video/recent' 219 self.base_url = HOST_BOSS + '/personal/video/recent'
220 CreateTestData.pre_getRecentVideo(Data.USER_ID_NO_VIDEO, 0) 220 CreateTestData.pre_getRecentVideo(Data.USER_ID_NO_VIDEO, 0)
221 CreateTestData.pre_getRecentVideo(Data.USER_ID_VIDEO, 1) 221 CreateTestData.pre_getRecentVideo(Data.USER_ID_VIDEO, 1)
222 222
223 def tearDown(self): 223 def tearDown(self):
224 pass 224 pass
225 225
226 def test_GetRecentVideo_noVideo_success(self): 226 def test_GetRecentVideo_noVideo_success(self):
227 getData = {'userId': Data.USER_ID_NO_VIDEO, 227 getData = {'userId': Data.USER_ID_NO_VIDEO,
228 'pageNum': 1} 228 'pageNum': 1}
229 r = requests.get(self.base_url, params=getData) 229 r = requests.get(self.base_url, params=getData)
230 self.result_1 = r.json() 230 self.result_1 = r.json()
231 self.assertEqual(self.result_1['status'], 1000, 'GetRecentVideo-noVideo fail') 231 self.assertEqual(self.result_1['status'], 1000, 'GetRecentVideo-noVideo fail')
232 232
233 def test_GetRecentVideo_success(self): 233 def test_GetRecentVideo_success(self):
234 getData = {'userId': Data.USER_ID_VIDEO, 234 getData = {'userId': Data.USER_ID_VIDEO,
235 'pageNum': 1} 235 'pageNum': 1}
236 r = requests.get(self.base_url, params=getData) 236 r = requests.get(self.base_url, params=getData)
237 self.result_2 = r.json() 237 self.result_2 = r.json()
238 self.assertEqual(self.result_2['status'], 1, 'GetRecentVideo fail') 238 self.assertEqual(self.result_2['status'], 1, 'GetRecentVideo fail')
239 239
240 240
241 241
242 242
243 243
test_cases/sub_account.py
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 import unittest 4 import unittest
5 import requests 5 import requests
6 from data_fixture.config_data import HOST_BOSS 6 from data_fixture.config_data import HOST_BOSS
7 from data_fixture import create_testdata as CreateTestData 7 from data_fixture import create_testdata as CreateTestData
8 from data_fixture import config_data as Data 8 from data_fixture import config_data as Data
9 from data_fixture.mysql_db import DB 9 from data_fixture.mysql_db import DB
10 import uuid 10 import uuid
11 11
12 db_test = DB()
13 12
14 #添加子账户 13 #添加子账户
15 class AddSubAccount(unittest.TestCase): 14 class AddSubAccount(unittest.TestCase):
16 def setUp(self): 15 def setUp(self):
17 self.base_url = HOST_BOSS + '/childUser/addChildUser' 16 self.base_url = HOST_BOSS + '/childUser/addChildUser'
18 CreateTestData.pre_AddSubAccount(Data.PARENT_ID) 17 CreateTestData.pre_AddSubAccount(Data.PARENT_ID)
19 18
20 def tearDown(self): 19 def tearDown(self):
21 print(self.result) 20 print(self.result)
22 21
23 def test_addSubAccount_success(self): 22 def test_addSubAccount_success(self):
24 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'} 23 headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'}
25 postData = {'parentId': Data.PARENT_ID, 24 postData = {'parentId': Data.PARENT_ID,
26 'image': Data.SUB_ACC_IMAGE, 25 'image': Data.SUB_ACC_IMAGE,
27 'name': '测试sub', 26 'name': '测试sub',
28 'gradeId': '6', 27 'gradeId': '6',
29 'schoolId': Data.SUB_ACC_SCHOOL_ID_1, 28 'schoolId': Data.SUB_ACC_SCHOOL_ID_1,
30 'regionId': Data.SUB_ACC_REGION_ID_1, 29 'regionId': Data.SUB_ACC_REGION_ID_1,
31 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 30 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
32 'regionName': Data.SUB_ACC_REGION_NAME_1 31 'regionName': Data.SUB_ACC_REGION_NAME_1
33 } 32 }
34 r = requests.post(self.base_url, headers=headers, data=postData) 33 r = requests.post(self.base_url, headers=headers, data=postData)
35 self.result = r.json() 34 self.result = r.json()
36 self.assertEqual(db_test.select_('acornuser.child_user', {'parent_id': Data.PARENT_ID}), 1, 'addSubAccount Error') 35 self.assertEqual(CreateTestData.db_select('acornuser.child_user', {'parent_id': Data.PARENT_ID}), 1, 'addSubAccount Error')
37 self.assertEqual(self.result['status'], 1, 'addSubAccount Error') 36 self.assertEqual(self.result['status'], 1, 'addSubAccount Error')
38 37
39 38
40 #查找子账户信息 39 #查找子账户信息
41 class GetSubAccount(unittest.TestCase): 40 class GetSubAccount(unittest.TestCase):
42 def setUp(self): 41 def setUp(self):
43 self.base_url = HOST_BOSS + '/childUser/info' 42 self.base_url = HOST_BOSS + '/childUser/info'
44 self.subAccount_1 = str(uuid.uuid4()).replace('-', '') 43 self.subAccount_1 = str(uuid.uuid4()).replace('-', '')
45 self.subAccount_2 = str(uuid.uuid4()).replace('-', '') 44 self.subAccount_2 = str(uuid.uuid4()).replace('-', '')
46 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount_1, 0) 45 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount_1, 0)
47 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount_2, 1) 46 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount_2, 1)
48 47
49 def tearDown(self): 48 def tearDown(self):
50 print(self.result) 49 print(self.result)
51 50
52 def test_getSubAccount_success(self): 51 def test_getSubAccount_success(self):
53 headers = {'Accept': '*/*'} 52 headers = {'Accept': '*/*'}
54 getData = {'userId': Data.PARENT_ID, 'deviceNumber':Data.DEVICE_NUMBER_CUS_BIND} 53 getData = {'userId': Data.PARENT_ID, 'deviceNumber':Data.DEVICE_NUMBER_CUS_BIND}
55 r = requests.get(self.base_url, headers=headers, params=getData) 54 r = requests.get(self.base_url, headers=headers, params=getData)
56 self.result = r.json() 55 self.result = r.json()
57 self.assertEqual(self.result['status'], 1, 'getSubAccount Error') 56 self.assertEqual(self.result['status'], 1, 'getSubAccount Error')
58 self.assertTrue(len(self.result['data']) > 1, 'getSubAccount data Error') 57 self.assertTrue(len(self.result['data']) > 1, 'getSubAccount data Error')
59 58
60 59
61 #删除子账户 60 #删除子账户
62 class DelSubAccount(unittest.TestCase): 61 class DelSubAccount(unittest.TestCase):
63 def setUp(self): 62 def setUp(self):
64 self.base_url = HOST_BOSS + '/childUser/delete' 63 self.base_url = HOST_BOSS + '/childUser/delete'
65 self.subAccount = str(uuid.uuid4()).replace('-', '') 64 self.subAccount = str(uuid.uuid4()).replace('-', '')
66 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount, 0) 65 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount, 0)
67 66
68 def tearDown(self): 67 def tearDown(self):
69 print(self.result) 68 print(self.result)
70 69
71 def test_delSubAccount_success(self): 70 def test_delSubAccount_success(self):
72 headers = {'Accept': '*/*'} 71 headers = {'Accept': '*/*'}
73 getData = {'subAccountId': self.subAccount} 72 getData = {'subAccountId': self.subAccount}
74 r = requests.get(self.base_url, headers=headers, params=getData) 73 r = requests.get(self.base_url, headers=headers, params=getData)
75 self.result = r.json() 74 self.result = r.json()
76 self.assertEqual(db_test.select_('acornuser.child_user', {'subAccountId': self.subAccount}), 0, 'delSubAccount Error') 75 self.assertEqual(CreateTestData.db_select('acornuser.child_user', {'subAccountId': self.subAccount}), 0, 'delSubAccount Error')
77 self.assertEqual(self.result['status'], 1, 'delSubAccount ERROR') 76 self.assertEqual(self.result['status'], 1, 'delSubAccount ERROR')
78 77
79 78
80 #切换账户 79 #切换账户
81 class SwitchAccounts(unittest.TestCase): 80 class SwitchAccounts(unittest.TestCase):
82 def setUp(self): 81 def setUp(self):
83 self.base_url = HOST_BOSS + '/childUser/update' 82 self.base_url = HOST_BOSS + '/childUser/update'
84 self.subAccount = str(uuid.uuid4()).replace('-', '') 83 self.subAccount = str(uuid.uuid4()).replace('-', '')
85 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount, 0) 84 CreateTestData.pre_subAccount(Data.PARENT_ID, self.subAccount, 0)
86 85
87 def tearDown(self): 86 def tearDown(self):
88 print(self.result) 87 print(self.result)
89 88
90 def test_swichToSubAccount_success(self): 89 def test_swichToSubAccount_success(self):
91 headers = {'Accept': '*/*'} 90 headers = {'Accept': '*/*'}
92 getData = {'subAccountId': self.subAccount, 91 getData = {'subAccountId': self.subAccount,
93 'userId': Data.PARENT_ID, 92 'userId': Data.PARENT_ID,
94 'deviceNumber' : Data.DEVICE_NUMBER_CUS_BIND, 93 'deviceNumber' : Data.DEVICE_NUMBER_CUS_BIND,
95 'type': 2} 94 'type': 2}
96 r = requests.get(self.base_url, headers=headers, params=getData) 95 r = requests.get(self.base_url, headers=headers, params=getData)
97 self.result = r.json() 96 self.result = r.json()
98 where_data = {'parent_id': Data.PARENT_ID,'subAccountId': self.subAccount, 'status':1} 97 where_data = {'parent_id': Data.PARENT_ID,'subAccountId': self.subAccount, 'status':1}
99 self.assertEqual(db_test.select_('acornuser.child_user', where_data), 1, 'swichToSubAccount Error') 98 self.assertEqual(CreateTestData.db_select('acornuser.child_user', where_data), 1, 'swichToSubAccount Error')
100 self.assertEqual(self.result['status'], 1, 'swichToSubAccount ERROR') 99 self.assertEqual(self.result['status'], 1, 'swichToSubAccount ERROR')
101 100
102 def test_swichToParentAccount_success(self): 101 def test_swichToParentAccount_success(self):
103 headers = {'Accept': '*/*'} 102 headers = {'Accept': '*/*'}
104 getData = {'userId': Data.PARENT_ID, 103 getData = {'userId': Data.PARENT_ID,
105 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 104 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
106 'type': 1} 105 'type': 1}
107 r = requests.get(self.base_url, headers=headers, params=getData) 106 r = requests.get(self.base_url, headers=headers, params=getData)
108 self.result = r.json() 107 self.result = r.json()
109 where_data = {'userId': Data.PARENT_ID, 108 where_data = {'userId': Data.PARENT_ID,
110 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND, 109 'deviceNumber': Data.DEVICE_NUMBER_CUS_BIND,
111 'status': 1} 110 'status': 1}
112 self.assertEqual(db_test.select_('acornuser.acorn_user_status', where_data), 1, 'swichToParentAccount Error') 111 self.assertEqual(CreateTestData.db_select('acornuser.acorn_user_status', where_data), 1, 'swichToParentAccount Error')
113 self.assertEqual(self.result['status'], 1, 'swichToParentAccount ERROR') 112 self.assertEqual(self.result['status'], 1, 'swichToParentAccount ERROR')
114 113
115 114
116 115
117 116
118 117
119 118
test_cases/subject_sync.py
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 import unittest 4 import unittest
5 import requests 5 import requests
6 from data_fixture.config_data import HOST_BOSS, HOST_RES 6 from data_fixture.config_data import HOST_BOSS, HOST_RES
7 from data_fixture import create_testdata as CreateTestData 7 from data_fixture import create_testdata as CreateTestData
8 from data_fixture import config_data as Data 8 from data_fixture import config_data as Data
9 from data_fixture.mysql_db import DB 9 from data_fixture.mysql_db import DB
10 10
11 11
12 db_test = DB()
13 12
14 #获取同步视频接口 13 #获取同步视频接口
15 class ClassNameVideo(unittest.TestCase): 14 class ClassNameVideo(unittest.TestCase):
16 def setUp(self): 15 def setUp(self):
17 self.base_url = HOST_RES + '/className/video' 16 self.base_url = HOST_RES + '/className/video'
18 17
19 def tearDown(self): 18 def tearDown(self):
20 pass 19 pass
21 20
22 def test_ClassNameVideo_success(self): 21 def test_ClassNameVideo_success(self):
23 getData = {'textName': '秋天的怀念', 22 getData = {'textName': '秋天的怀念',
24 'press': '人民教育出版社', 23 'press': '人民教育出版社',
25 'subject': '语文', 24 'subject': '语文',
26 'gradeName': '7年级'} 25 'gradeName': '7年级'}
27 r = requests.get(self.base_url, params=getData) 26 r = requests.get(self.base_url, params=getData)
28 self.result_1 = r.json() 27 self.result_1 = r.json()
29 self.assertEqual(self.result_1['status'], 1, 'test_ClassNameVideo_success Error') 28 self.assertEqual(self.result_1['status'], 1, 'test_ClassNameVideo_success Error')
30 29
31 def test_ClassNameVideo_noData(self): 30 def test_ClassNameVideo_noData(self):
32 getData = {'textName': '秋天 的怀念', 31 getData = {'textName': '秋天 的怀念',
33 'press': '人民教育出版社', 32 'press': '人民教育出版社',
34 'subject': '语文', 33 'subject': '语文',
35 'gradeName': '7年级'} 34 'gradeName': '7年级'}
36 r = requests.get(self.base_url, params=getData) 35 r = requests.get(self.base_url, params=getData)
37 self.result_2 = r.json() 36 self.result_2 = r.json()
38 self.assertEqual(self.result_2['status'], 1000, 'test_ClassNameVideo_noData Error') 37 self.assertEqual(self.result_2['status'], 1000, 'test_ClassNameVideo_noData Error')
39 38
40 39
41 #获取知识点视频 40 #获取知识点视频
42 class PointVideo(unittest.TestCase): 41 class PointVideo(unittest.TestCase):
43 def setUp(self): 42 def setUp(self):
44 self.base_url = HOST_RES + '/point/video' 43 self.base_url = HOST_RES + '/point/video'
45 44
46 def tearDown(self): 45 def tearDown(self):
47 pass 46 pass
48 47
49 def test_PointVideo_success(self): 48 def test_PointVideo_success(self):
50 getData = {'textName': '秋天的怀念', 49 getData = {'textName': '秋天的怀念',
51 'press': '人民教育出版社', 50 'press': '人民教育出版社',
52 'subject': '语文', 51 'subject': '语文',
53 'gradeName': '7年级', 52 'gradeName': '7年级',
54 'point':'说明文阅读5说明文的结构||议论文的定义和分类'} 53 'point':'说明文阅读5说明文的结构||议论文的定义和分类'}
55 r = requests.get(self.base_url, params=getData) 54 r = requests.get(self.base_url, params=getData)
56 self.result_1 = r.json() 55 self.result_1 = r.json()
57 self.assertEqual(self.result_1['status'], 1, 'test_PointVideo_success Error') 56 self.assertEqual(self.result_1['status'], 1, 'test_PointVideo_success Error')
58 57
59 def test_PointVideo_noData(self): 58 def test_PointVideo_noData(self):
60 getData = {'textName': '秋天的怀念', 59 getData = {'textName': '秋天的怀念',
61 'press': '人民教育出版社', 60 'press': '人民教育出版社',
62 'subject': '语文', 61 'subject': '语文',
63 'gradeName': '7年级', 62 'gradeName': '7年级',
64 'point': '说明文阅读5说明文的结构'} 63 'point': '说明文阅读5说明文的结构'}
65 r = requests.get(self.base_url, params=getData) 64 r = requests.get(self.base_url, params=getData)
66 self.result_2 = r.json() 65 self.result_2 = r.json()
67 self.assertEqual(self.result_2['status'], 1000, 'test_PointVideo_noData Error') 66 self.assertEqual(self.result_2['status'], 1000, 'test_PointVideo_noData Error')
68 67
69 68
70 #课程中心PK练习抽题接口 69 #课程中心PK练习抽题接口
71 class SubjectTest(unittest.TestCase): 70 class SubjectTest(unittest.TestCase):
72 def setUp(self): 71 def setUp(self):
73 self.base_url = HOST_BOSS + '/subject/test/' 72 self.base_url = HOST_BOSS + '/subject/test/'
74 73
75 def tearDown(self): 74 def tearDown(self):
76 pass 75 pass
77 76
78 def test_SubjectTest_success(self): 77 def test_SubjectTest_success(self):
79 getData = {'subjectName': '数学', 78 getData = {'subjectName': '数学',
80 'questionPoint': '二元一次方程||二元一次方程组的解', 79 'questionPoint': '二元一次方程||二元一次方程组的解',
81 'gradeId': '10', 80 'gradeId': '10',
82 'textName': '二元一次方程组'} 81 'textName': '二元一次方程组'}
83 url = self.base_url + 'math' 82 url = self.base_url + 'math'
84 r = requests.get(url, params=getData) 83 r = requests.get(url, params=getData)
85 self.result_1 = r.json() 84 self.result_1 = r.json()
86 self.assertEqual(self.result_1['status'], 1, 'test_SubjectTest_success Error') 85 self.assertEqual(self.result_1['status'], 1, 'test_SubjectTest_success Error')
87 86
88 87
89 #巩固练习抽题接口 88 #巩固练习抽题接口
90 class ConsolidationExercise(unittest.TestCase): 89 class ConsolidationExercise(unittest.TestCase):
91 def setUp(self): 90 def setUp(self):
92 self.base_url = HOST_BOSS + '/consolidation/exercise' 91 self.base_url = HOST_BOSS + '/consolidation/exercise'
93 92
94 def tearDown(self): 93 def tearDown(self):
95 pass 94 pass
96 95
97 def test_ConsolidationExercise_success(self): 96 def test_ConsolidationExercise_success(self):
98 getData = {'subjectName': '数学', 97 getData = {'subjectName': '数学',
99 'gradeId': '10', 98 'gradeId': '10',
100 'secondPoint': '二元一次方程||二元一次方程组的解', 99 'secondPoint': '二元一次方程||二元一次方程组的解',
101 'textName': '二元一次方程组', 100 'textName': '二元一次方程组',
102 'difficultyLevel': '基础卷'} 101 'difficultyLevel': '基础卷'}
103 r = requests.get(self.base_url, params=getData) 102 r = requests.get(self.base_url, params=getData)
104 self.result = r.json() 103 self.result = r.json()
105 self.assertEqual(self.result['status'], 1, 'test_ConsolidationExercise_success Error') 104 self.assertEqual(self.result['status'], 1, 'test_ConsolidationExercise_success Error')
106 self.assertTrue(len(self.result['data']) > 1) 105 self.assertTrue(len(self.result['data']) > 1)
107 106
108 107
108 #课程中心PK练习提交接口
109 class PKSubmitCheck(unittest.TestCase):
110 def setUp(self):
111 self.base_url = HOST_BOSS + '/submit/'
112
113 def tearDown(self):
114 pass
115
116 def test_PKSubmitCheck_success(self):
117 getData = {'subjectName': '数学',
118 'gradeId': '10',
119 'secondPoint': '二元一次方程||二元一次方程组的解',
120 'textName': '二元一次方程组',
121 'difficultyLevel': '基础卷'}
122 r = requests.get(self.base_url, params=getData)
123 self.result = r.json()
124 self.assertEqual(self.result['status'], 1, 'test_ConsolidationExercise_success Error')
125 self.assertTrue(len(self.result['data']) > 1)
109 126
110 127