init
This commit is contained in:
parent
4721a0745c
commit
9007071ae2
|
@ -0,0 +1,52 @@
|
||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<code_scheme name="Project" version="173">
|
||||||
|
<DBN-PSQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false" />
|
||||||
|
</DBN-PSQL>
|
||||||
|
<DBN-SQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false">
|
||||||
|
<option name="STATEMENT_SPACING" value="one_line" />
|
||||||
|
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
|
||||||
|
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
|
||||||
|
</formatting-settings>
|
||||||
|
</DBN-SQL>
|
||||||
|
<DBN-PSQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false" />
|
||||||
|
</DBN-PSQL>
|
||||||
|
<DBN-SQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false">
|
||||||
|
<option name="STATEMENT_SPACING" value="one_line" />
|
||||||
|
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
|
||||||
|
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
|
||||||
|
</formatting-settings>
|
||||||
|
</DBN-SQL>
|
||||||
|
</code_scheme>
|
||||||
|
</component>
|
|
@ -0,0 +1,455 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DBNavigator.Project.DataEditorManager">
|
||||||
|
<record-view-column-sorting-type value="BY_INDEX" />
|
||||||
|
<value-preview-text-wrapping value="true" />
|
||||||
|
<value-preview-pinned value="false" />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DataExportManager">
|
||||||
|
<export-instructions>
|
||||||
|
<create-header value="true" />
|
||||||
|
<quote-values-containing-separator value="true" />
|
||||||
|
<quote-all-values value="false" />
|
||||||
|
<value-separator value="" />
|
||||||
|
<file-name value="" />
|
||||||
|
<file-location value="" />
|
||||||
|
<scope value="GLOBAL" />
|
||||||
|
<destination value="FILE" />
|
||||||
|
<format value="EXCEL" />
|
||||||
|
<charset value="UTF-8" />
|
||||||
|
</export-instructions>
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DatabaseBrowserManager">
|
||||||
|
<autoscroll-to-editor value="false" />
|
||||||
|
<autoscroll-from-editor value="true" />
|
||||||
|
<show-object-properties value="true" />
|
||||||
|
<loaded-nodes />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DatabaseFileManager">
|
||||||
|
<open-files />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.EditorStateManager">
|
||||||
|
<last-used-providers />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.MethodExecutionManager">
|
||||||
|
<method-browser />
|
||||||
|
<execution-history>
|
||||||
|
<group-entries value="true" />
|
||||||
|
<execution-inputs />
|
||||||
|
</execution-history>
|
||||||
|
<argument-values-cache />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.ObjectDependencyManager">
|
||||||
|
<last-used-dependency-type value="INCOMING" />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.ObjectQuickFilterManager">
|
||||||
|
<last-used-operator value="EQUAL" />
|
||||||
|
<filters />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.ScriptExecutionManager" clear-outputs="true">
|
||||||
|
<recently-used-interfaces />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.Settings">
|
||||||
|
<connections />
|
||||||
|
<browser-settings>
|
||||||
|
<general>
|
||||||
|
<display-mode value="TABBED" />
|
||||||
|
<navigation-history-size value="100" />
|
||||||
|
<show-object-details value="false" />
|
||||||
|
</general>
|
||||||
|
<filters>
|
||||||
|
<object-type-filter>
|
||||||
|
<object-type name="SCHEMA" enabled="true" />
|
||||||
|
<object-type name="USER" enabled="true" />
|
||||||
|
<object-type name="ROLE" enabled="true" />
|
||||||
|
<object-type name="PRIVILEGE" enabled="true" />
|
||||||
|
<object-type name="CHARSET" enabled="true" />
|
||||||
|
<object-type name="TABLE" enabled="true" />
|
||||||
|
<object-type name="VIEW" enabled="true" />
|
||||||
|
<object-type name="MATERIALIZED_VIEW" enabled="true" />
|
||||||
|
<object-type name="NESTED_TABLE" enabled="true" />
|
||||||
|
<object-type name="COLUMN" enabled="true" />
|
||||||
|
<object-type name="INDEX" enabled="true" />
|
||||||
|
<object-type name="CONSTRAINT" enabled="true" />
|
||||||
|
<object-type name="DATASET_TRIGGER" enabled="true" />
|
||||||
|
<object-type name="DATABASE_TRIGGER" enabled="true" />
|
||||||
|
<object-type name="SYNONYM" enabled="true" />
|
||||||
|
<object-type name="SEQUENCE" enabled="true" />
|
||||||
|
<object-type name="PROCEDURE" enabled="true" />
|
||||||
|
<object-type name="FUNCTION" enabled="true" />
|
||||||
|
<object-type name="PACKAGE" enabled="true" />
|
||||||
|
<object-type name="TYPE" enabled="true" />
|
||||||
|
<object-type name="TYPE_ATTRIBUTE" enabled="true" />
|
||||||
|
<object-type name="ARGUMENT" enabled="true" />
|
||||||
|
<object-type name="DIMENSION" enabled="true" />
|
||||||
|
<object-type name="CLUSTER" enabled="true" />
|
||||||
|
<object-type name="DBLINK" enabled="true" />
|
||||||
|
</object-type-filter>
|
||||||
|
</filters>
|
||||||
|
<sorting>
|
||||||
|
<object-type name="COLUMN" sorting-type="NAME" />
|
||||||
|
<object-type name="FUNCTION" sorting-type="NAME" />
|
||||||
|
<object-type name="PROCEDURE" sorting-type="NAME" />
|
||||||
|
<object-type name="ARGUMENT" sorting-type="POSITION" />
|
||||||
|
</sorting>
|
||||||
|
<default-editors>
|
||||||
|
<object-type name="VIEW" editor-type="SELECTION" />
|
||||||
|
<object-type name="PACKAGE" editor-type="SELECTION" />
|
||||||
|
<object-type name="TYPE" editor-type="SELECTION" />
|
||||||
|
</default-editors>
|
||||||
|
</browser-settings>
|
||||||
|
<navigation-settings>
|
||||||
|
<lookup-filters>
|
||||||
|
<lookup-objects>
|
||||||
|
<object-type name="SCHEMA" enabled="true" />
|
||||||
|
<object-type name="USER" enabled="false" />
|
||||||
|
<object-type name="ROLE" enabled="false" />
|
||||||
|
<object-type name="PRIVILEGE" enabled="false" />
|
||||||
|
<object-type name="CHARSET" enabled="false" />
|
||||||
|
<object-type name="TABLE" enabled="true" />
|
||||||
|
<object-type name="VIEW" enabled="true" />
|
||||||
|
<object-type name="MATERIALIZED VIEW" enabled="true" />
|
||||||
|
<object-type name="NESTED TABLE" enabled="false" />
|
||||||
|
<object-type name="COLUMN" enabled="false" />
|
||||||
|
<object-type name="INDEX" enabled="true" />
|
||||||
|
<object-type name="CONSTRAINT" enabled="true" />
|
||||||
|
<object-type name="DATASET TRIGGER" enabled="true" />
|
||||||
|
<object-type name="DATABASE TRIGGER" enabled="true" />
|
||||||
|
<object-type name="SYNONYM" enabled="false" />
|
||||||
|
<object-type name="SEQUENCE" enabled="true" />
|
||||||
|
<object-type name="PROCEDURE" enabled="true" />
|
||||||
|
<object-type name="FUNCTION" enabled="true" />
|
||||||
|
<object-type name="PACKAGE" enabled="true" />
|
||||||
|
<object-type name="TYPE" enabled="true" />
|
||||||
|
<object-type name="TYPE ATTRIBUTE" enabled="false" />
|
||||||
|
<object-type name="ARGUMENT" enabled="false" />
|
||||||
|
<object-type name="DIMENSION" enabled="false" />
|
||||||
|
<object-type name="CLUSTER" enabled="false" />
|
||||||
|
<object-type name="DBLINK" enabled="true" />
|
||||||
|
</lookup-objects>
|
||||||
|
<force-database-load value="false" />
|
||||||
|
<prompt-connection-selection value="true" />
|
||||||
|
<prompt-schema-selection value="true" />
|
||||||
|
</lookup-filters>
|
||||||
|
</navigation-settings>
|
||||||
|
<dataset-grid-settings>
|
||||||
|
<general>
|
||||||
|
<enable-zooming value="true" />
|
||||||
|
<enable-column-tooltip value="true" />
|
||||||
|
</general>
|
||||||
|
<sorting>
|
||||||
|
<nulls-first value="true" />
|
||||||
|
<max-sorting-columns value="4" />
|
||||||
|
</sorting>
|
||||||
|
<tracking-columns>
|
||||||
|
<columnNames value="" />
|
||||||
|
<visible value="true" />
|
||||||
|
<editable value="false" />
|
||||||
|
</tracking-columns>
|
||||||
|
</dataset-grid-settings>
|
||||||
|
<dataset-editor-settings>
|
||||||
|
<text-editor-popup>
|
||||||
|
<active value="false" />
|
||||||
|
<active-if-empty value="false" />
|
||||||
|
<data-length-threshold value="100" />
|
||||||
|
<popup-delay value="1000" />
|
||||||
|
</text-editor-popup>
|
||||||
|
<values-actions-popup>
|
||||||
|
<show-popup-button value="true" />
|
||||||
|
<element-count-threshold value="1000" />
|
||||||
|
<data-length-threshold value="250" />
|
||||||
|
</values-actions-popup>
|
||||||
|
<general>
|
||||||
|
<fetch-block-size value="100" />
|
||||||
|
<fetch-timeout value="30" />
|
||||||
|
<trim-whitespaces value="true" />
|
||||||
|
<convert-empty-strings-to-null value="true" />
|
||||||
|
<select-content-on-cell-edit value="true" />
|
||||||
|
<large-value-preview-active value="true" />
|
||||||
|
</general>
|
||||||
|
<filters>
|
||||||
|
<prompt-filter-dialog value="true" />
|
||||||
|
<default-filter-type value="BASIC" />
|
||||||
|
</filters>
|
||||||
|
<qualified-text-editor text-length-threshold="300">
|
||||||
|
<content-types>
|
||||||
|
<content-type name="Text" enabled="true" />
|
||||||
|
<content-type name="Properties" enabled="true" />
|
||||||
|
<content-type name="XML" enabled="true" />
|
||||||
|
<content-type name="DTD" enabled="true" />
|
||||||
|
<content-type name="HTML" enabled="true" />
|
||||||
|
<content-type name="XHTML" enabled="true" />
|
||||||
|
<content-type name="SQL" enabled="true" />
|
||||||
|
<content-type name="PL/SQL" enabled="true" />
|
||||||
|
<content-type name="JSON" enabled="true" />
|
||||||
|
<content-type name="JSON5" enabled="true" />
|
||||||
|
<content-type name="YAML" enabled="true" />
|
||||||
|
<content-type name="Bash" enabled="true" />
|
||||||
|
</content-types>
|
||||||
|
</qualified-text-editor>
|
||||||
|
<record-navigation>
|
||||||
|
<navigation-target value="VIEWER" />
|
||||||
|
</record-navigation>
|
||||||
|
</dataset-editor-settings>
|
||||||
|
<code-editor-settings>
|
||||||
|
<general>
|
||||||
|
<show-object-navigation-gutter value="false" />
|
||||||
|
<show-spec-declaration-navigation-gutter value="true" />
|
||||||
|
<enable-spellchecking value="true" />
|
||||||
|
<enable-reference-spellchecking value="false" />
|
||||||
|
</general>
|
||||||
|
<confirmations>
|
||||||
|
<save-changes value="false" />
|
||||||
|
<revert-changes value="true" />
|
||||||
|
</confirmations>
|
||||||
|
</code-editor-settings>
|
||||||
|
<code-completion-settings>
|
||||||
|
<filters>
|
||||||
|
<basic-filter>
|
||||||
|
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="schema" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="role" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="user" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="privilege" selected="true" />
|
||||||
|
<user-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</user-schema>
|
||||||
|
<public-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="false" />
|
||||||
|
</public-schema>
|
||||||
|
<any-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</any-schema>
|
||||||
|
</basic-filter>
|
||||||
|
<extended-filter>
|
||||||
|
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="schema" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="user" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="role" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="privilege" selected="true" />
|
||||||
|
<user-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</user-schema>
|
||||||
|
<public-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</public-schema>
|
||||||
|
<any-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</any-schema>
|
||||||
|
</extended-filter>
|
||||||
|
</filters>
|
||||||
|
<sorting enabled="true">
|
||||||
|
<sorting-element type="RESERVED_WORD" id="keyword" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="datatype" />
|
||||||
|
<sorting-element type="OBJECT" id="column" />
|
||||||
|
<sorting-element type="OBJECT" id="table" />
|
||||||
|
<sorting-element type="OBJECT" id="view" />
|
||||||
|
<sorting-element type="OBJECT" id="materialized view" />
|
||||||
|
<sorting-element type="OBJECT" id="index" />
|
||||||
|
<sorting-element type="OBJECT" id="constraint" />
|
||||||
|
<sorting-element type="OBJECT" id="trigger" />
|
||||||
|
<sorting-element type="OBJECT" id="synonym" />
|
||||||
|
<sorting-element type="OBJECT" id="sequence" />
|
||||||
|
<sorting-element type="OBJECT" id="procedure" />
|
||||||
|
<sorting-element type="OBJECT" id="function" />
|
||||||
|
<sorting-element type="OBJECT" id="package" />
|
||||||
|
<sorting-element type="OBJECT" id="type" />
|
||||||
|
<sorting-element type="OBJECT" id="dimension" />
|
||||||
|
<sorting-element type="OBJECT" id="cluster" />
|
||||||
|
<sorting-element type="OBJECT" id="dblink" />
|
||||||
|
<sorting-element type="OBJECT" id="schema" />
|
||||||
|
<sorting-element type="OBJECT" id="role" />
|
||||||
|
<sorting-element type="OBJECT" id="user" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="function" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="parameter" />
|
||||||
|
</sorting>
|
||||||
|
<format>
|
||||||
|
<enforce-code-style-case value="true" />
|
||||||
|
</format>
|
||||||
|
</code-completion-settings>
|
||||||
|
<execution-engine-settings>
|
||||||
|
<statement-execution>
|
||||||
|
<fetch-block-size value="100" />
|
||||||
|
<execution-timeout value="20" />
|
||||||
|
<debug-execution-timeout value="600" />
|
||||||
|
<focus-result value="false" />
|
||||||
|
<prompt-execution value="false" />
|
||||||
|
</statement-execution>
|
||||||
|
<script-execution>
|
||||||
|
<command-line-interfaces />
|
||||||
|
<execution-timeout value="300" />
|
||||||
|
</script-execution>
|
||||||
|
<method-execution>
|
||||||
|
<execution-timeout value="30" />
|
||||||
|
<debug-execution-timeout value="600" />
|
||||||
|
<parameter-history-size value="10" />
|
||||||
|
</method-execution>
|
||||||
|
</execution-engine-settings>
|
||||||
|
<operation-settings>
|
||||||
|
<transactions>
|
||||||
|
<uncommitted-changes>
|
||||||
|
<on-project-close value="ASK" />
|
||||||
|
<on-disconnect value="ASK" />
|
||||||
|
<on-autocommit-toggle value="ASK" />
|
||||||
|
</uncommitted-changes>
|
||||||
|
<multiple-uncommitted-changes>
|
||||||
|
<on-commit value="ASK" />
|
||||||
|
<on-rollback value="ASK" />
|
||||||
|
</multiple-uncommitted-changes>
|
||||||
|
</transactions>
|
||||||
|
<session-browser>
|
||||||
|
<disconnect-session value="ASK" />
|
||||||
|
<kill-session value="ASK" />
|
||||||
|
<reload-on-filter-change value="false" />
|
||||||
|
</session-browser>
|
||||||
|
<compiler>
|
||||||
|
<compile-type value="KEEP" />
|
||||||
|
<compile-dependencies value="ASK" />
|
||||||
|
<always-show-controls value="false" />
|
||||||
|
</compiler>
|
||||||
|
<debugger>
|
||||||
|
<debugger-type value="JDBC" />
|
||||||
|
<use-generic-runners value="true" />
|
||||||
|
</debugger>
|
||||||
|
</operation-settings>
|
||||||
|
<ddl-file-settings>
|
||||||
|
<extensions>
|
||||||
|
<mapping file-type-id="VIEW" extensions="vw" />
|
||||||
|
<mapping file-type-id="TRIGGER" extensions="trg" />
|
||||||
|
<mapping file-type-id="PROCEDURE" extensions="prc" />
|
||||||
|
<mapping file-type-id="FUNCTION" extensions="fnc" />
|
||||||
|
<mapping file-type-id="PACKAGE" extensions="pkg" />
|
||||||
|
<mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
|
||||||
|
<mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
|
||||||
|
<mapping file-type-id="TYPE" extensions="tpe" />
|
||||||
|
<mapping file-type-id="TYPE_SPEC" extensions="tps" />
|
||||||
|
<mapping file-type-id="TYPE_BODY" extensions="tpb" />
|
||||||
|
</extensions>
|
||||||
|
<general>
|
||||||
|
<lookup-ddl-files value="true" />
|
||||||
|
<create-ddl-files value="false" />
|
||||||
|
<synchronize-ddl-files value="true" />
|
||||||
|
<use-qualified-names value="false" />
|
||||||
|
<make-scripts-rerunnable value="true" />
|
||||||
|
</general>
|
||||||
|
</ddl-file-settings>
|
||||||
|
<general-settings>
|
||||||
|
<regional-settings>
|
||||||
|
<date-format value="MEDIUM" />
|
||||||
|
<number-format value="UNGROUPED" />
|
||||||
|
<locale value="SYSTEM_DEFAULT" />
|
||||||
|
<use-custom-formats value="false" />
|
||||||
|
</regional-settings>
|
||||||
|
<environment>
|
||||||
|
<environment-types>
|
||||||
|
<environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
|
||||||
|
<environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
|
||||||
|
<environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
|
||||||
|
<environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
|
||||||
|
</environment-types>
|
||||||
|
<visibility-settings>
|
||||||
|
<connection-tabs value="true" />
|
||||||
|
<dialog-headers value="true" />
|
||||||
|
<object-editor-tabs value="true" />
|
||||||
|
<script-editor-tabs value="false" />
|
||||||
|
<execution-result-tabs value="true" />
|
||||||
|
</visibility-settings>
|
||||||
|
</environment>
|
||||||
|
</general-settings>
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.StatementExecutionManager">
|
||||||
|
<execution-variables />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
|
||||||
|
</project>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredIdentifiers">
|
||||||
|
<list>
|
||||||
|
<option value="class_examples.test_survey.survey" />
|
||||||
|
<option value="test.test_data_excise.read_yml" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/pytest_book.iml" filepath="$PROJECT_DIR$/.idea/pytest_book.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/chapter7unit/class_examples" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/chapter9selenium/test" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/chapter11_BDD/pytestbdd" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/chapter10appium/Pappium-youdao-demo" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/chapter12/Mock" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/chapter5" isTestSource="false" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/src/chapter7unit/code_examples" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
<component name="TestRunnerService">
|
||||||
|
<option name="projectConfiguration" value="pytest" />
|
||||||
|
<option name="PROJECT_TEST_RUNNER" value="pytest" />
|
||||||
|
</component>
|
||||||
|
</module>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -0,0 +1,7 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-05-13 21:02
|
||||||
|
# File: setup.py
|
||||||
|
|
||||||
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
setup(name="Utils", packages=find_packages())
|
Binary file not shown.
|
@ -0,0 +1,3 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-04-13 15:11
|
||||||
|
# File: __init__.py
|
Binary file not shown.
|
@ -0,0 +1,3 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-04-13 15:32
|
||||||
|
# File: __init__.py.py
|
Binary file not shown.
|
@ -0,0 +1,3 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-04-13 15:32
|
||||||
|
# File: __init__.py.py
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,42 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
FOSS_LICENSES = ['Apache 2.0', 'MIT', 'GPL', 'BSD']
|
||||||
|
|
||||||
|
PYTHON_PKGS = ['pytest-automationtest', 'requests-api', 'django-web', 'cookiecutter-项目模板']
|
||||||
|
|
||||||
|
|
||||||
|
class Package:
|
||||||
|
def __init__(self, name, license):
|
||||||
|
self.name = name
|
||||||
|
self.license = license
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_open_source(self):
|
||||||
|
return self.license in FOSS_LICENSES
|
||||||
|
|
||||||
|
|
||||||
|
class Person:
|
||||||
|
def __init__(self, name, gender):
|
||||||
|
self.name = name
|
||||||
|
self.gender = gender
|
||||||
|
self._skills = ['eating', 'sleeping']
|
||||||
|
|
||||||
|
def learn(self, skill):
|
||||||
|
self._skills.append(skill)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def looks_like_a_programmer(self):
|
||||||
|
return any(
|
||||||
|
package in self._skills
|
||||||
|
for package in PYTHON_PKGS
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Woman(Person):
|
||||||
|
def __init__(self, name):
|
||||||
|
super().__init__(name, '女')
|
||||||
|
|
||||||
|
|
||||||
|
class Man(Person):
|
||||||
|
def __init__(self, name):
|
||||||
|
super().__init__(name, '男')
|
|
@ -0,0 +1,36 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import operator
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from .foobar import Package, Woman, Man
|
||||||
|
|
||||||
|
PACKAGES = [
|
||||||
|
Package('requests-api', 'Apache 2.0'),
|
||||||
|
Package('django-web', 'BSD'),
|
||||||
|
Package('pytest-automationtest', 'MIT'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(params=PACKAGES, ids=(operator.attrgetter('name')))
|
||||||
|
def python_package(request):
|
||||||
|
return request.param
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('person', [
|
||||||
|
Woman('lindafang'), Woman('nanzhang'),
|
||||||
|
Man('wenli'), Woman('mingzhao'), Man('dongjin')
|
||||||
|
], ids=())
|
||||||
|
def test_become_a_programmer(person, python_package):
|
||||||
|
person.learn(python_package.name)
|
||||||
|
print(person._skills)
|
||||||
|
assert person.looks_like_a_programmer
|
||||||
|
|
||||||
|
|
||||||
|
def test_is_open_source(python_package):
|
||||||
|
assert python_package.is_open_source
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
pytest.main()
|
|
@ -0,0 +1,32 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
# 这是一个英国游戏,逢3就fizz,逢5就buzz,如果是3,5的倍数,则fizzbuzz
|
||||||
|
# 类似中国的逢3或3的倍数就敲一下桌子,其他就说出来1,2,敲,4,5,敲,7,8,敲,10,11,敲,敲,14
|
||||||
|
RULES = (
|
||||||
|
(3 * 5, "FizzBuzz"),
|
||||||
|
(3, "Fizz"),
|
||||||
|
(5, "Buzz"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def fizzbuzz(number):
|
||||||
|
for div_number, substitution in RULES:
|
||||||
|
if not number % div_number:
|
||||||
|
return substitution
|
||||||
|
return str(number)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'number, word', [
|
||||||
|
(1, '1'),
|
||||||
|
(3, 'Fizz'),
|
||||||
|
(5, 'Buzz'),
|
||||||
|
(10, 'Buzz'),
|
||||||
|
(15, 'FizzBuzz'),
|
||||||
|
(16, '16')
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_fizzbuzz(number, word):
|
||||||
|
assert fizzbuzz(number) == word
|
|
@ -0,0 +1,12 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(params=['apple', 'banana'])
|
||||||
|
def fruit(request):
|
||||||
|
return request.param
|
||||||
|
|
||||||
|
|
||||||
|
def test_fruit(fruit):
|
||||||
|
print('这是我要输入的测试数据:我今天吃的是%s' % fruit)
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,54 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from sushi import Restaurant, Sushi
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def fooshi_bar():
|
||||||
|
"""Returns a Restaurant instance with a great menu."""
|
||||||
|
return Restaurant(
|
||||||
|
'Fooshi Bar',
|
||||||
|
location='Buenos Aires',
|
||||||
|
menu=[
|
||||||
|
'Ebi Nigiri',
|
||||||
|
'Edamame',
|
||||||
|
'Inarizushi',
|
||||||
|
'Kappa Maki',
|
||||||
|
'Miso Soup',
|
||||||
|
'Sake Nigiri',
|
||||||
|
'Tamagoyaki',
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='session')
|
||||||
|
def recipes():
|
||||||
|
"""Return a map from types of sushi to ingredients."""
|
||||||
|
return {
|
||||||
|
'California Roll': ['Rice', 'Cucumber', 'Avocado', 'Crab'],
|
||||||
|
'Ebi Nigiri': ['Shrimp', 'Rice'],
|
||||||
|
'Inarizushi': ['Fried tofu', 'Rice'],
|
||||||
|
'Kappa Maki': ['Cucumber', 'Rice', 'Nori'],
|
||||||
|
'Maguro Nigiri': ['Tuna', 'Rice', 'Nori'],
|
||||||
|
'Sake Nigiri': ['Salmon', 'Rice', 'Nori'],
|
||||||
|
'Tamagoyaki': ['Fried egg', 'Rice', 'Nori'],
|
||||||
|
'Tsunamayo Maki': ['Tuna', 'Mayonnaise'],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(params=[
|
||||||
|
'California Roll',
|
||||||
|
'Ebi Nigiri',
|
||||||
|
'Inarizushi',
|
||||||
|
'Kappa Maki',
|
||||||
|
'Maguro Nigiri',
|
||||||
|
'Sake Nigiri',
|
||||||
|
'Tamagoyaki',
|
||||||
|
'Tsunamayo Maki',
|
||||||
|
])
|
||||||
|
def sushi(recipes, request):
|
||||||
|
"""Create a Sushi instance based on recipes."""
|
||||||
|
name = request.param
|
||||||
|
return Sushi(name, ingredients=recipes[name])
|
|
@ -0,0 +1,30 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
class Restaurant:
|
||||||
|
def __init__(self, name, location, menu=None):
|
||||||
|
if not menu:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
self.name = name
|
||||||
|
self.location = location
|
||||||
|
self.menu = menu
|
||||||
|
|
||||||
|
|
||||||
|
class Sushi:
|
||||||
|
def __init__(self, name, ingredients=None):
|
||||||
|
if not ingredients:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
self.name = name
|
||||||
|
self.ingredients = ingredients
|
||||||
|
|
||||||
|
def __contains__(self, ingredient):
|
||||||
|
return ingredient in self.ingredients
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_vegetarian(self):
|
||||||
|
for ingredient in ['Crab', 'Salmon', 'Shrimp', 'Tuna']:
|
||||||
|
if ingredient in self:
|
||||||
|
return False
|
||||||
|
return True
|
|
@ -0,0 +1,23 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'sushi',
|
||||||
|
['Kappa Maki', 'Tamagoyaki', 'Inarizushi'],
|
||||||
|
indirect=True,
|
||||||
|
)
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'side_dish',
|
||||||
|
['Edamame', 'Miso Soup'],
|
||||||
|
)
|
||||||
|
def test_fooshi_serves_vegetarian_sushi(fooshi_bar, sushi, side_dish):
|
||||||
|
assert sushi.is_vegetarian
|
||||||
|
assert sushi.name in fooshi_bar.menu
|
||||||
|
assert side_dish in fooshi_bar.menu
|
||||||
|
|
||||||
|
|
||||||
|
def test_sushi(sushi):
|
||||||
|
assert sushi.name
|
||||||
|
assert sushi.ingredients
|
Binary file not shown.
|
@ -0,0 +1,39 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
|
||||||
|
class Client:
|
||||||
|
def get(self, url, *args, **kwargs):
|
||||||
|
# Send a real request based on the given parameters
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TestResponse:
|
||||||
|
def __init__(self, method, url, *args, **kwargs):
|
||||||
|
if 'foobar' in url:
|
||||||
|
self.status = 404
|
||||||
|
self.reason = 'foobar'
|
||||||
|
else:
|
||||||
|
self.status = 200
|
||||||
|
self.reason = None
|
||||||
|
|
||||||
|
|
||||||
|
class TestClient(Client):
|
||||||
|
def get(self, url, *args, **kwargs):
|
||||||
|
return TestResponse('get', url)
|
||||||
|
|
||||||
|
|
||||||
|
class TestScrapingTool(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.client = TestClient()
|
||||||
|
|
||||||
|
def test_success(self):
|
||||||
|
response = self.client.get('https://github.com/pytest-dev')
|
||||||
|
self.assertEqual(response.status, 200)
|
||||||
|
self.assertEqual(response.reason, None)
|
||||||
|
|
||||||
|
def test_failure(self):
|
||||||
|
response = self.client.get('foobar')
|
||||||
|
self.assertEqual(response.status, 404)
|
||||||
|
self.assertEqual(response.reason, 'foobar')
|
|
@ -0,0 +1,19 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-05-03 19:45
|
||||||
|
# File: test_unittest_mock.py
|
||||||
|
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
config = {"mykey": "ORIGINAL"}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="function")
|
||||||
|
@mock.patch.dict(config, {"mykey": "MOCKED"})
|
||||||
|
def my_fixture():
|
||||||
|
return config["mykey"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_foobar(my_fixture):
|
||||||
|
assert my_fixture == "MOCKED"
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-04-13 15:11
|
||||||
|
# File: __init__.py
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,20 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# File: test_first.py
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
def test_1():
|
||||||
|
print("\n这是第一个测试方法")
|
||||||
|
|
||||||
|
|
||||||
|
def test_3():
|
||||||
|
print("\n这是第三个测试方法")
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# def t_2():
|
||||||
|
# print("这是第二个测试方法")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
pytest.main(["-s", "test_first.py"])
|
|
@ -0,0 +1,68 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-04-28 21:38
|
||||||
|
# File: test_frame.py
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
# 模块中的方法
|
||||||
|
def setup_module():
|
||||||
|
print("\nsetup_module:整个test_module.py模块只执行一次")
|
||||||
|
|
||||||
|
|
||||||
|
def teardown_module():
|
||||||
|
print("teardown_module:整个test_module.py模块只执行一次")
|
||||||
|
|
||||||
|
|
||||||
|
def setup_function():
|
||||||
|
print("setup_function:每个非类函数测试用例开始前都会执行")
|
||||||
|
|
||||||
|
|
||||||
|
def teardown_function():
|
||||||
|
print("teardown_function:每个非类函数测试用例结束后都会执行")
|
||||||
|
|
||||||
|
|
||||||
|
# 测试模块中的用例1
|
||||||
|
|
||||||
|
|
||||||
|
def test_one():
|
||||||
|
print("正在执行测试模块----test_one")
|
||||||
|
|
||||||
|
|
||||||
|
def test_one_1():
|
||||||
|
print("正在执行测试模块----test_one_1")
|
||||||
|
|
||||||
|
|
||||||
|
# 测试模块中的用例2
|
||||||
|
def test_two():
|
||||||
|
print("正在执行测试模块----test_two")
|
||||||
|
|
||||||
|
|
||||||
|
# 测试类
|
||||||
|
class TestCase(object):
|
||||||
|
def setup_class(self):
|
||||||
|
print("\nsetup_class:在类中所有测试用例执行之前")
|
||||||
|
|
||||||
|
def teardown_class(self):
|
||||||
|
print("teardown_class:在类中所有测试用例执行之后")
|
||||||
|
|
||||||
|
def setup_method(self):
|
||||||
|
print("setup_method: 每个类中测试方法用例开始前执行")
|
||||||
|
|
||||||
|
def teardown_method(self):
|
||||||
|
print("teardown_method: 每个类中测试方法用例结束后执行")
|
||||||
|
|
||||||
|
def setup(self):
|
||||||
|
print("setup:每个类中测试方法用例开始前都会执行")
|
||||||
|
|
||||||
|
def teardown(self):
|
||||||
|
print("teardown:每个类中测试方法用例结束后都会执行")
|
||||||
|
|
||||||
|
def test_three(self):
|
||||||
|
print("正在执行测试类----test_three")
|
||||||
|
|
||||||
|
def test_four(self):
|
||||||
|
print("正在执行测试类----test_four")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
pytest.main(["-s", "test_frame.py"])
|
|
@ -0,0 +1,36 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-04-28 16:42
|
||||||
|
# File: test_frame_1.py
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
# 模块中的方法
|
||||||
|
def setup_module():
|
||||||
|
print("\nsetup_module:整个test_module.py模块只执行一次")
|
||||||
|
|
||||||
|
|
||||||
|
def teardown_module():
|
||||||
|
print("teardown_module:整个test_module.py模块只执行一次")
|
||||||
|
|
||||||
|
|
||||||
|
def setup_function():
|
||||||
|
print("setup_function:每个用例开始前都会执行")
|
||||||
|
|
||||||
|
|
||||||
|
def teardown_function():
|
||||||
|
print("teardown_function:每个用例结束后都会执行")
|
||||||
|
|
||||||
|
|
||||||
|
# 测试模块中的用例1
|
||||||
|
def test_one():
|
||||||
|
print("正在执行测试模块----test_one")
|
||||||
|
|
||||||
|
|
||||||
|
# 测试模块中的用例2
|
||||||
|
def test_two():
|
||||||
|
print("正在执行测试模块----test_two")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
pytest.main(["-s", "test_frame_1.py"])
|
|
@ -0,0 +1,36 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-04-28 16:42
|
||||||
|
# File: test_frame_1.py
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
# 测试类
|
||||||
|
class TestCase(object):
|
||||||
|
def setup_class(self):
|
||||||
|
print("\nsetup_class:所有用例执行之前")
|
||||||
|
|
||||||
|
def teardown_class(self):
|
||||||
|
print("teardown_class:所有用例执行之后")
|
||||||
|
|
||||||
|
def setup_method(self):
|
||||||
|
print("setup_method: 每个用例开始前执行")
|
||||||
|
|
||||||
|
def teardown_method(self):
|
||||||
|
print("teardown_method: 每个用例结束后执行")
|
||||||
|
|
||||||
|
def setup(self):
|
||||||
|
print("setup:每个用例开始前都会执行")
|
||||||
|
|
||||||
|
def teardown(self):
|
||||||
|
print("teardown:每个用例结束后都会执行")
|
||||||
|
|
||||||
|
def test_three(self):
|
||||||
|
print("正在执行测试类----test_three")
|
||||||
|
|
||||||
|
def test_four(self):
|
||||||
|
print("正在执行测试类----test_four")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
pytest.main(["-s", "test_frame_2.py"])
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
Pappium-youdao-demo
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
<component name="TestRunnerService">
|
||||||
|
<option name="projectConfiguration" value="pytest" />
|
||||||
|
<option name="PROJECT_TEST_RUNNER" value="pytest" />
|
||||||
|
</component>
|
||||||
|
</module>
|
|
@ -0,0 +1,52 @@
|
||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<code_scheme name="Project" version="173">
|
||||||
|
<DBN-PSQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false" />
|
||||||
|
</DBN-PSQL>
|
||||||
|
<DBN-SQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false">
|
||||||
|
<option name="STATEMENT_SPACING" value="one_line" />
|
||||||
|
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
|
||||||
|
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
|
||||||
|
</formatting-settings>
|
||||||
|
</DBN-SQL>
|
||||||
|
<DBN-PSQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false" />
|
||||||
|
</DBN-PSQL>
|
||||||
|
<DBN-SQL>
|
||||||
|
<case-options enabled="true">
|
||||||
|
<option name="KEYWORD_CASE" value="lower" />
|
||||||
|
<option name="FUNCTION_CASE" value="lower" />
|
||||||
|
<option name="PARAMETER_CASE" value="lower" />
|
||||||
|
<option name="DATATYPE_CASE" value="lower" />
|
||||||
|
<option name="OBJECT_CASE" value="preserve" />
|
||||||
|
</case-options>
|
||||||
|
<formatting-settings enabled="false">
|
||||||
|
<option name="STATEMENT_SPACING" value="one_line" />
|
||||||
|
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
|
||||||
|
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
|
||||||
|
</formatting-settings>
|
||||||
|
</DBN-SQL>
|
||||||
|
</code_scheme>
|
||||||
|
</component>
|
|
@ -0,0 +1,455 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DBNavigator.Project.DataEditorManager">
|
||||||
|
<record-view-column-sorting-type value="BY_INDEX" />
|
||||||
|
<value-preview-text-wrapping value="true" />
|
||||||
|
<value-preview-pinned value="false" />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DataExportManager">
|
||||||
|
<export-instructions>
|
||||||
|
<create-header value="true" />
|
||||||
|
<quote-values-containing-separator value="true" />
|
||||||
|
<quote-all-values value="false" />
|
||||||
|
<value-separator value="" />
|
||||||
|
<file-name value="" />
|
||||||
|
<file-location value="" />
|
||||||
|
<scope value="GLOBAL" />
|
||||||
|
<destination value="FILE" />
|
||||||
|
<format value="EXCEL" />
|
||||||
|
<charset value="UTF-8" />
|
||||||
|
</export-instructions>
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DatabaseBrowserManager">
|
||||||
|
<autoscroll-to-editor value="false" />
|
||||||
|
<autoscroll-from-editor value="true" />
|
||||||
|
<show-object-properties value="true" />
|
||||||
|
<loaded-nodes />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.DatabaseFileManager">
|
||||||
|
<open-files />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.EditorStateManager">
|
||||||
|
<last-used-providers />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.MethodExecutionManager">
|
||||||
|
<method-browser />
|
||||||
|
<execution-history>
|
||||||
|
<group-entries value="true" />
|
||||||
|
<execution-inputs />
|
||||||
|
</execution-history>
|
||||||
|
<argument-values-cache />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.ObjectDependencyManager">
|
||||||
|
<last-used-dependency-type value="INCOMING" />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.ObjectQuickFilterManager">
|
||||||
|
<last-used-operator value="EQUAL" />
|
||||||
|
<filters />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.ScriptExecutionManager" clear-outputs="true">
|
||||||
|
<recently-used-interfaces />
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.Settings">
|
||||||
|
<connections />
|
||||||
|
<browser-settings>
|
||||||
|
<general>
|
||||||
|
<display-mode value="TABBED" />
|
||||||
|
<navigation-history-size value="100" />
|
||||||
|
<show-object-details value="false" />
|
||||||
|
</general>
|
||||||
|
<filters>
|
||||||
|
<object-type-filter>
|
||||||
|
<object-type name="SCHEMA" enabled="true" />
|
||||||
|
<object-type name="USER" enabled="true" />
|
||||||
|
<object-type name="ROLE" enabled="true" />
|
||||||
|
<object-type name="PRIVILEGE" enabled="true" />
|
||||||
|
<object-type name="CHARSET" enabled="true" />
|
||||||
|
<object-type name="TABLE" enabled="true" />
|
||||||
|
<object-type name="VIEW" enabled="true" />
|
||||||
|
<object-type name="MATERIALIZED_VIEW" enabled="true" />
|
||||||
|
<object-type name="NESTED_TABLE" enabled="true" />
|
||||||
|
<object-type name="COLUMN" enabled="true" />
|
||||||
|
<object-type name="INDEX" enabled="true" />
|
||||||
|
<object-type name="CONSTRAINT" enabled="true" />
|
||||||
|
<object-type name="DATASET_TRIGGER" enabled="true" />
|
||||||
|
<object-type name="DATABASE_TRIGGER" enabled="true" />
|
||||||
|
<object-type name="SYNONYM" enabled="true" />
|
||||||
|
<object-type name="SEQUENCE" enabled="true" />
|
||||||
|
<object-type name="PROCEDURE" enabled="true" />
|
||||||
|
<object-type name="FUNCTION" enabled="true" />
|
||||||
|
<object-type name="PACKAGE" enabled="true" />
|
||||||
|
<object-type name="TYPE" enabled="true" />
|
||||||
|
<object-type name="TYPE_ATTRIBUTE" enabled="true" />
|
||||||
|
<object-type name="ARGUMENT" enabled="true" />
|
||||||
|
<object-type name="DIMENSION" enabled="true" />
|
||||||
|
<object-type name="CLUSTER" enabled="true" />
|
||||||
|
<object-type name="DBLINK" enabled="true" />
|
||||||
|
</object-type-filter>
|
||||||
|
</filters>
|
||||||
|
<sorting>
|
||||||
|
<object-type name="COLUMN" sorting-type="NAME" />
|
||||||
|
<object-type name="FUNCTION" sorting-type="NAME" />
|
||||||
|
<object-type name="PROCEDURE" sorting-type="NAME" />
|
||||||
|
<object-type name="ARGUMENT" sorting-type="POSITION" />
|
||||||
|
</sorting>
|
||||||
|
<default-editors>
|
||||||
|
<object-type name="VIEW" editor-type="SELECTION" />
|
||||||
|
<object-type name="PACKAGE" editor-type="SELECTION" />
|
||||||
|
<object-type name="TYPE" editor-type="SELECTION" />
|
||||||
|
</default-editors>
|
||||||
|
</browser-settings>
|
||||||
|
<navigation-settings>
|
||||||
|
<lookup-filters>
|
||||||
|
<lookup-objects>
|
||||||
|
<object-type name="SCHEMA" enabled="true" />
|
||||||
|
<object-type name="USER" enabled="false" />
|
||||||
|
<object-type name="ROLE" enabled="false" />
|
||||||
|
<object-type name="PRIVILEGE" enabled="false" />
|
||||||
|
<object-type name="CHARSET" enabled="false" />
|
||||||
|
<object-type name="TABLE" enabled="true" />
|
||||||
|
<object-type name="VIEW" enabled="true" />
|
||||||
|
<object-type name="MATERIALIZED VIEW" enabled="true" />
|
||||||
|
<object-type name="NESTED TABLE" enabled="false" />
|
||||||
|
<object-type name="COLUMN" enabled="false" />
|
||||||
|
<object-type name="INDEX" enabled="true" />
|
||||||
|
<object-type name="CONSTRAINT" enabled="true" />
|
||||||
|
<object-type name="DATASET TRIGGER" enabled="true" />
|
||||||
|
<object-type name="DATABASE TRIGGER" enabled="true" />
|
||||||
|
<object-type name="SYNONYM" enabled="false" />
|
||||||
|
<object-type name="SEQUENCE" enabled="true" />
|
||||||
|
<object-type name="PROCEDURE" enabled="true" />
|
||||||
|
<object-type name="FUNCTION" enabled="true" />
|
||||||
|
<object-type name="PACKAGE" enabled="true" />
|
||||||
|
<object-type name="TYPE" enabled="true" />
|
||||||
|
<object-type name="TYPE ATTRIBUTE" enabled="false" />
|
||||||
|
<object-type name="ARGUMENT" enabled="false" />
|
||||||
|
<object-type name="DIMENSION" enabled="false" />
|
||||||
|
<object-type name="CLUSTER" enabled="false" />
|
||||||
|
<object-type name="DBLINK" enabled="true" />
|
||||||
|
</lookup-objects>
|
||||||
|
<force-database-load value="false" />
|
||||||
|
<prompt-connection-selection value="true" />
|
||||||
|
<prompt-schema-selection value="true" />
|
||||||
|
</lookup-filters>
|
||||||
|
</navigation-settings>
|
||||||
|
<dataset-grid-settings>
|
||||||
|
<general>
|
||||||
|
<enable-zooming value="true" />
|
||||||
|
<enable-column-tooltip value="true" />
|
||||||
|
</general>
|
||||||
|
<sorting>
|
||||||
|
<nulls-first value="true" />
|
||||||
|
<max-sorting-columns value="4" />
|
||||||
|
</sorting>
|
||||||
|
<tracking-columns>
|
||||||
|
<columnNames value="" />
|
||||||
|
<visible value="true" />
|
||||||
|
<editable value="false" />
|
||||||
|
</tracking-columns>
|
||||||
|
</dataset-grid-settings>
|
||||||
|
<dataset-editor-settings>
|
||||||
|
<text-editor-popup>
|
||||||
|
<active value="false" />
|
||||||
|
<active-if-empty value="false" />
|
||||||
|
<data-length-threshold value="100" />
|
||||||
|
<popup-delay value="1000" />
|
||||||
|
</text-editor-popup>
|
||||||
|
<values-actions-popup>
|
||||||
|
<show-popup-button value="true" />
|
||||||
|
<element-count-threshold value="1000" />
|
||||||
|
<data-length-threshold value="250" />
|
||||||
|
</values-actions-popup>
|
||||||
|
<general>
|
||||||
|
<fetch-block-size value="100" />
|
||||||
|
<fetch-timeout value="30" />
|
||||||
|
<trim-whitespaces value="true" />
|
||||||
|
<convert-empty-strings-to-null value="true" />
|
||||||
|
<select-content-on-cell-edit value="true" />
|
||||||
|
<large-value-preview-active value="true" />
|
||||||
|
</general>
|
||||||
|
<filters>
|
||||||
|
<prompt-filter-dialog value="true" />
|
||||||
|
<default-filter-type value="BASIC" />
|
||||||
|
</filters>
|
||||||
|
<qualified-text-editor text-length-threshold="300">
|
||||||
|
<content-types>
|
||||||
|
<content-type name="Text" enabled="true" />
|
||||||
|
<content-type name="Properties" enabled="true" />
|
||||||
|
<content-type name="XML" enabled="true" />
|
||||||
|
<content-type name="DTD" enabled="true" />
|
||||||
|
<content-type name="HTML" enabled="true" />
|
||||||
|
<content-type name="XHTML" enabled="true" />
|
||||||
|
<content-type name="SQL" enabled="true" />
|
||||||
|
<content-type name="PL/SQL" enabled="true" />
|
||||||
|
<content-type name="JSON" enabled="true" />
|
||||||
|
<content-type name="JSON5" enabled="true" />
|
||||||
|
<content-type name="YAML" enabled="true" />
|
||||||
|
<content-type name="Bash" enabled="true" />
|
||||||
|
</content-types>
|
||||||
|
</qualified-text-editor>
|
||||||
|
<record-navigation>
|
||||||
|
<navigation-target value="VIEWER" />
|
||||||
|
</record-navigation>
|
||||||
|
</dataset-editor-settings>
|
||||||
|
<code-editor-settings>
|
||||||
|
<general>
|
||||||
|
<show-object-navigation-gutter value="false" />
|
||||||
|
<show-spec-declaration-navigation-gutter value="true" />
|
||||||
|
<enable-spellchecking value="true" />
|
||||||
|
<enable-reference-spellchecking value="false" />
|
||||||
|
</general>
|
||||||
|
<confirmations>
|
||||||
|
<save-changes value="false" />
|
||||||
|
<revert-changes value="true" />
|
||||||
|
</confirmations>
|
||||||
|
</code-editor-settings>
|
||||||
|
<code-completion-settings>
|
||||||
|
<filters>
|
||||||
|
<basic-filter>
|
||||||
|
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="schema" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="role" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="user" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="privilege" selected="true" />
|
||||||
|
<user-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</user-schema>
|
||||||
|
<public-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="false" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="false" />
|
||||||
|
</public-schema>
|
||||||
|
<any-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</any-schema>
|
||||||
|
</basic-filter>
|
||||||
|
<extended-filter>
|
||||||
|
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="function" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
|
||||||
|
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="schema" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="user" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="role" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="privilege" selected="true" />
|
||||||
|
<user-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</user-schema>
|
||||||
|
<public-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</public-schema>
|
||||||
|
<any-schema>
|
||||||
|
<filter-element type="OBJECT" id="table" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="materialized view" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="index" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="constraint" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="trigger" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="synonym" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="sequence" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="procedure" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="function" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="package" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="type" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dimension" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="cluster" selected="true" />
|
||||||
|
<filter-element type="OBJECT" id="dblink" selected="true" />
|
||||||
|
</any-schema>
|
||||||
|
</extended-filter>
|
||||||
|
</filters>
|
||||||
|
<sorting enabled="true">
|
||||||
|
<sorting-element type="RESERVED_WORD" id="keyword" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="datatype" />
|
||||||
|
<sorting-element type="OBJECT" id="column" />
|
||||||
|
<sorting-element type="OBJECT" id="table" />
|
||||||
|
<sorting-element type="OBJECT" id="view" />
|
||||||
|
<sorting-element type="OBJECT" id="materialized view" />
|
||||||
|
<sorting-element type="OBJECT" id="index" />
|
||||||
|
<sorting-element type="OBJECT" id="constraint" />
|
||||||
|
<sorting-element type="OBJECT" id="trigger" />
|
||||||
|
<sorting-element type="OBJECT" id="synonym" />
|
||||||
|
<sorting-element type="OBJECT" id="sequence" />
|
||||||
|
<sorting-element type="OBJECT" id="procedure" />
|
||||||
|
<sorting-element type="OBJECT" id="function" />
|
||||||
|
<sorting-element type="OBJECT" id="package" />
|
||||||
|
<sorting-element type="OBJECT" id="type" />
|
||||||
|
<sorting-element type="OBJECT" id="dimension" />
|
||||||
|
<sorting-element type="OBJECT" id="cluster" />
|
||||||
|
<sorting-element type="OBJECT" id="dblink" />
|
||||||
|
<sorting-element type="OBJECT" id="schema" />
|
||||||
|
<sorting-element type="OBJECT" id="role" />
|
||||||
|
<sorting-element type="OBJECT" id="user" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="function" />
|
||||||
|
<sorting-element type="RESERVED_WORD" id="parameter" />
|
||||||
|
</sorting>
|
||||||
|
<format>
|
||||||
|
<enforce-code-style-case value="true" />
|
||||||
|
</format>
|
||||||
|
</code-completion-settings>
|
||||||
|
<execution-engine-settings>
|
||||||
|
<statement-execution>
|
||||||
|
<fetch-block-size value="100" />
|
||||||
|
<execution-timeout value="20" />
|
||||||
|
<debug-execution-timeout value="600" />
|
||||||
|
<focus-result value="false" />
|
||||||
|
<prompt-execution value="false" />
|
||||||
|
</statement-execution>
|
||||||
|
<script-execution>
|
||||||
|
<command-line-interfaces />
|
||||||
|
<execution-timeout value="300" />
|
||||||
|
</script-execution>
|
||||||
|
<method-execution>
|
||||||
|
<execution-timeout value="30" />
|
||||||
|
<debug-execution-timeout value="600" />
|
||||||
|
<parameter-history-size value="10" />
|
||||||
|
</method-execution>
|
||||||
|
</execution-engine-settings>
|
||||||
|
<operation-settings>
|
||||||
|
<transactions>
|
||||||
|
<uncommitted-changes>
|
||||||
|
<on-project-close value="ASK" />
|
||||||
|
<on-disconnect value="ASK" />
|
||||||
|
<on-autocommit-toggle value="ASK" />
|
||||||
|
</uncommitted-changes>
|
||||||
|
<multiple-uncommitted-changes>
|
||||||
|
<on-commit value="ASK" />
|
||||||
|
<on-rollback value="ASK" />
|
||||||
|
</multiple-uncommitted-changes>
|
||||||
|
</transactions>
|
||||||
|
<session-browser>
|
||||||
|
<disconnect-session value="ASK" />
|
||||||
|
<kill-session value="ASK" />
|
||||||
|
<reload-on-filter-change value="false" />
|
||||||
|
</session-browser>
|
||||||
|
<compiler>
|
||||||
|
<compile-type value="KEEP" />
|
||||||
|
<compile-dependencies value="ASK" />
|
||||||
|
<always-show-controls value="false" />
|
||||||
|
</compiler>
|
||||||
|
<debugger>
|
||||||
|
<debugger-type value="JDBC" />
|
||||||
|
<use-generic-runners value="true" />
|
||||||
|
</debugger>
|
||||||
|
</operation-settings>
|
||||||
|
<ddl-file-settings>
|
||||||
|
<extensions>
|
||||||
|
<mapping file-type-id="VIEW" extensions="vw" />
|
||||||
|
<mapping file-type-id="TRIGGER" extensions="trg" />
|
||||||
|
<mapping file-type-id="PROCEDURE" extensions="prc" />
|
||||||
|
<mapping file-type-id="FUNCTION" extensions="fnc" />
|
||||||
|
<mapping file-type-id="PACKAGE" extensions="pkg" />
|
||||||
|
<mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
|
||||||
|
<mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
|
||||||
|
<mapping file-type-id="TYPE" extensions="tpe" />
|
||||||
|
<mapping file-type-id="TYPE_SPEC" extensions="tps" />
|
||||||
|
<mapping file-type-id="TYPE_BODY" extensions="tpb" />
|
||||||
|
</extensions>
|
||||||
|
<general>
|
||||||
|
<lookup-ddl-files value="true" />
|
||||||
|
<create-ddl-files value="false" />
|
||||||
|
<synchronize-ddl-files value="true" />
|
||||||
|
<use-qualified-names value="false" />
|
||||||
|
<make-scripts-rerunnable value="true" />
|
||||||
|
</general>
|
||||||
|
</ddl-file-settings>
|
||||||
|
<general-settings>
|
||||||
|
<regional-settings>
|
||||||
|
<date-format value="MEDIUM" />
|
||||||
|
<number-format value="UNGROUPED" />
|
||||||
|
<locale value="SYSTEM_DEFAULT" />
|
||||||
|
<use-custom-formats value="false" />
|
||||||
|
</regional-settings>
|
||||||
|
<environment>
|
||||||
|
<environment-types>
|
||||||
|
<environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
|
||||||
|
<environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
|
||||||
|
<environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
|
||||||
|
<environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
|
||||||
|
</environment-types>
|
||||||
|
<visibility-settings>
|
||||||
|
<connection-tabs value="true" />
|
||||||
|
<dialog-headers value="true" />
|
||||||
|
<object-editor-tabs value="true" />
|
||||||
|
<script-editor-tabs value="false" />
|
||||||
|
<execution-result-tabs value="true" />
|
||||||
|
</visibility-settings>
|
||||||
|
</environment>
|
||||||
|
</general-settings>
|
||||||
|
</component>
|
||||||
|
<component name="DBNavigator.Project.StatementExecutionManager">
|
||||||
|
<execution-variables />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
|
||||||
|
</project>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/../Pappium-youdao-demo/.idea/Pappium-youdao-demo.iml" filepath="$PROJECT_DIR$/../Pappium-youdao-demo/.idea/Pappium-youdao-demo.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,3 @@
|
||||||
|
title,text
|
||||||
|
我的日记1,this is my first note.
|
||||||
|
我的日记2, today is holiday.
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
- titlename
|
||||||
|
- mydaily
|
||||||
|
- 我的日记
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-13 11:13
|
||||||
|
# File: __init__.py.py
|
|
@ -0,0 +1 @@
|
||||||
|
base_url: http://127.0.0.1:4723/wd/hub
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-12 09:19
|
||||||
|
# File: __init__.py.py
|
|
@ -0,0 +1,27 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-14 11:28
|
||||||
|
# File: test_data_drvien.py
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from utils.get_csvdata import get_csv_data
|
||||||
|
from utils.get_path import PATH
|
||||||
|
|
||||||
|
datafile = PATH("../Testdatas/addnotedata.csv")
|
||||||
|
data_test = get_csv_data(datafile)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def data_addnote(*data_test):
|
||||||
|
# print("这是",data_test)
|
||||||
|
print(type(data_test))
|
||||||
|
return data_test
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("title,text", data_addnote)
|
||||||
|
def test_param(title, text):
|
||||||
|
print(title, "----")
|
||||||
|
print(text, "---")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
pytest.main()
|
|
@ -0,0 +1,41 @@
|
||||||
|
from appium import webdriver
|
||||||
|
|
||||||
|
from utils import desired_caps
|
||||||
|
|
||||||
|
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps.get_desired_caps())
|
||||||
|
# 进入时点的同意
|
||||||
|
el1 = driver.find_element_by_id("btn_ok")
|
||||||
|
# com.youdao.note:id/btn_ok
|
||||||
|
el1.click()
|
||||||
|
|
||||||
|
# time.sleep(2)
|
||||||
|
# driver.find_element_by_id("com.youdao.note:id/btn_ok").click()
|
||||||
|
#
|
||||||
|
# time.sleep(2)
|
||||||
|
# # 权限允许
|
||||||
|
# el2=driver.find_element_by_id("com.android.packageinstaller:id/permission_allow_button")
|
||||||
|
# el2.click()
|
||||||
|
# if el2 is not None:
|
||||||
|
# el2.click()
|
||||||
|
# time.sleep(3)
|
||||||
|
# el3 = driver.find_element_by_id("com.youdao.note:id/add_note")
|
||||||
|
# el3.click()
|
||||||
|
# time.sleep(2)
|
||||||
|
# el4 = driver.find_element_by_id("com.youdao.note:id/add_icon")
|
||||||
|
# el4.click()
|
||||||
|
# time.sleep(3)
|
||||||
|
# # driver.back()
|
||||||
|
# el5 = driver.find_element_by_id("com.youdao.note:id/note_title")
|
||||||
|
# el5.send_keys("这是我的日志")
|
||||||
|
# time.sleep(5)
|
||||||
|
#
|
||||||
|
# # driver.press_keycode(66)
|
||||||
|
# # time.sleep(1)
|
||||||
|
# driver.find_elements_by_xpath('//android.widget.LinearLayout[@resourceid="com.youdao.note:id/note_content"]')[1].send_keys('七点半签到')
|
||||||
|
|
||||||
|
# time.sleep(3)
|
||||||
|
#
|
||||||
|
# el9 = driver.find_element_by_id("com.youdao.note:id/actionbar_complete_text")
|
||||||
|
# el9.click()
|
||||||
|
#
|
||||||
|
# driver.reset()
|
|
@ -0,0 +1,39 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-12 09:20
|
||||||
|
# File: test_youdao_start.py
|
||||||
|
'''
|
||||||
|
1、连接手机(手机相关配置),启动手机app.
|
||||||
|
2、使用webdriver简单定位进行操作
|
||||||
|
|
||||||
|
'''
|
||||||
|
from utils.get_path import PATH
|
||||||
|
|
||||||
|
app_file = PATH("../Papp/ApiDemos-debug.apk")
|
||||||
|
print(app_file)
|
||||||
|
# desired_caps={
|
||||||
|
# "platformName":"android",
|
||||||
|
# # 在cmd使用adb devices返回的值写在下面
|
||||||
|
# "deviceName":"emulator-5554",
|
||||||
|
# # 这个是夜神的设备名
|
||||||
|
# # "deviceName":"127.0.0.1:62001",
|
||||||
|
# "platformVersion":"6.0",
|
||||||
|
# # 你夜神的android版本
|
||||||
|
# # "platformVersion":"5.1",
|
||||||
|
# "automationName":"UiAutomator2",
|
||||||
|
# # 值 是你app的地址
|
||||||
|
# "app":app_file,
|
||||||
|
#
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)
|
||||||
|
|
||||||
|
# el1 = driver.find_element_by_accessibility_id("Accessibility")
|
||||||
|
# el1.get_attribute("context-desc")
|
||||||
|
# el1.click()
|
||||||
|
# el2 = driver.find_element_by_accessibility_id("Accessibility Node Querying")
|
||||||
|
# el2.click()
|
||||||
|
# el3 = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.widget.LinearLayout/android.widget.ListView/android.widget.LinearLayout[3]/android.widget.CheckBox")
|
||||||
|
# el3.click()
|
||||||
|
# driver.save_screenshot("1.png")
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-13 11:12
|
||||||
|
# File: __init__.py.py
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-13 11:36
|
||||||
|
# File: addnotepage.py
|
||||||
|
from .basepage import BasePage
|
||||||
|
from .locators import AddNotePageLoacators
|
||||||
|
from .locators import FirstOpenPageLocators
|
||||||
|
|
||||||
|
|
||||||
|
class FirstOpenPage(BasePage):
|
||||||
|
# 继承的:BasePage是我的父类,父类中的所有方法我都能用。
|
||||||
|
|
||||||
|
def permission_allowandok(self):
|
||||||
|
BasePage.click_thing(self, FirstOpenPageLocators.btn_ok)
|
||||||
|
BasePage.click_thing(self, FirstOpenPageLocators.btn_ok)
|
||||||
|
BasePage.click_thing(self, FirstOpenPageLocators.permission_allow)
|
||||||
|
|
||||||
|
|
||||||
|
class AddNotePage(BasePage):
|
||||||
|
def add_note_ok(self, title):
|
||||||
|
BasePage.click_thing(self, AddNotePageLoacators.add_note)
|
||||||
|
BasePage.click_thing(self, AddNotePageLoacators.add_icon)
|
||||||
|
BasePage.set_value(self, AddNotePageLoacators.note_title, title)
|
||||||
|
# self.driver.press_keycode(66)
|
||||||
|
# BasePage.set_value(self, AddNotePageLoacators.note_editText, editText)
|
||||||
|
BasePage.click_thing(self, AddNotePageLoacators.submit_complete)
|
|
@ -0,0 +1,68 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-13 11:27
|
||||||
|
# File: basepage.py
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from selenium.webdriver.support import expected_conditions as EC
|
||||||
|
from selenium.webdriver.support.ui import WebDriverWait
|
||||||
|
|
||||||
|
log = logging.getLogger("linda's test")
|
||||||
|
|
||||||
|
|
||||||
|
class BasePage(object):
|
||||||
|
|
||||||
|
def __init__(self, driver):
|
||||||
|
# init
|
||||||
|
# self
|
||||||
|
# 设置driver的类型,所有方法在没有实例时才能点出来
|
||||||
|
self.driver: WebDriver = driver
|
||||||
|
log.info("这是个初始化驱动!")
|
||||||
|
|
||||||
|
def set_value(self, locator, value):
|
||||||
|
|
||||||
|
if (WebDriverWait(self.driver, 10).until(
|
||||||
|
EC.presence_of_element_located(locator)
|
||||||
|
)):
|
||||||
|
# 参数传递,元组格式与非元组格式
|
||||||
|
element = self.driver.find_element(*locator)
|
||||||
|
element.click()
|
||||||
|
element.clear()
|
||||||
|
element.send_keys(value)
|
||||||
|
else:
|
||||||
|
log.error("无法输入信息,找不到元素")
|
||||||
|
|
||||||
|
def click_thing(self, locator):
|
||||||
|
if (WebDriverWait(self.driver, 10).until(
|
||||||
|
EC.presence_of_element_located(locator)
|
||||||
|
)):
|
||||||
|
element = self.driver.find_element(*locator)
|
||||||
|
element.click()
|
||||||
|
else:
|
||||||
|
log.error("无法点击,找不到元素")
|
||||||
|
|
||||||
|
def save_pic(self, filepath):
|
||||||
|
self.driver.get_screenshot_as_file(filepath)
|
||||||
|
|
||||||
|
def swipe_up(self, driver):
|
||||||
|
# 兼容性-适合所有手机,获得屏幕大小--宽,高
|
||||||
|
width = driver.get_window_size()['width']
|
||||||
|
height = driver.get_window_size()['height']
|
||||||
|
# swipe(x=起始点x坐标,y=起始点y的坐标,x1=滑动到的点的x坐标,y1=滑动到的点的y坐标)
|
||||||
|
# 0,0的点是在屏幕左上角。
|
||||||
|
self.driver.swipe(width / 2, height / 3 * 2, width / 2, height / 3 * 1)
|
||||||
|
|
||||||
|
def swipe_down(self, driver):
|
||||||
|
width = driver.get_window_size()['width']
|
||||||
|
height = driver.get_window_size()['height']
|
||||||
|
self.driver.swipe(width / 2, height / 3, width / 2, height / 3 * 2)
|
||||||
|
|
||||||
|
def swipe_right(self, driver):
|
||||||
|
width = driver.get_window_size()['width']
|
||||||
|
height = driver.get_window_size()['height']
|
||||||
|
self.driver.swipe(width / 10, height / 2, width / 10 * 9, height / 2)
|
||||||
|
|
||||||
|
def swipe_left(self, driver):
|
||||||
|
width = driver.get_window_size()['width']
|
||||||
|
height = driver.get_window_size()['height']
|
||||||
|
self.driver.swipe(width / 10 * 9, height / 2, width / 10, height / 2)
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-13 11:23
|
||||||
|
# File: locators.py
|
||||||
|
|
||||||
|
from appium.webdriver.common.mobileby import MobileBy
|
||||||
|
|
||||||
|
|
||||||
|
class FirstOpenPageLocators(object):
|
||||||
|
btn_ok = (MobileBy.ID, "com.youdao.note:id/btn_ok")
|
||||||
|
permission_allow = (MobileBy.ID, "com.android.packageinstaller:id/permission_allow_button")
|
||||||
|
|
||||||
|
|
||||||
|
class AddNotePageLoacators(object):
|
||||||
|
add_note = (MobileBy.ID, "com.youdao.note:id/add_note")
|
||||||
|
add_icon = (MobileBy.ID, "com.youdao.note:id/add_icon")
|
||||||
|
note_title = (MobileBy.ID, "com.youdao.note:id/note_title")
|
||||||
|
# note_editText = (MobileBy.XPATH, "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.EditText")
|
||||||
|
# /hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.EditText
|
||||||
|
# // android.widget.EditText
|
||||||
|
note_editText = (MobileBy.XPATH, "//android.widget.EditText")
|
||||||
|
submit_complete = (MobileBy.ID, "com.youdao.note:id/actionbar_complete_text")
|
|
@ -0,0 +1,9 @@
|
||||||
|
[pytest]
|
||||||
|
markers =
|
||||||
|
regression
|
||||||
|
sanity
|
||||||
|
|
||||||
|
log_cli = 1
|
||||||
|
log_cli_level = INFO
|
||||||
|
log_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)
|
||||||
|
log_cli_date_format = %Y-%m-%d %H:%M:%S
|
|
@ -0,0 +1,81 @@
|
||||||
|
{
|
||||||
|
"name": "test_addnote[titlename]",
|
||||||
|
"status": "passed",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"name": "初始化添加页面",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246234664,
|
||||||
|
"stop": 1605246234664
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"attachments": [
|
||||||
|
{
|
||||||
|
"name": "log",
|
||||||
|
"source": "2b791e82-6b09-43b9-a2b0-0eee6940d2be-attachment.txt",
|
||||||
|
"type": "text/plain"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "add",
|
||||||
|
"value": "'titlename'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246234664,
|
||||||
|
"stop": 1605246243327,
|
||||||
|
"uuid": "e980355b-ef95-4b6b-aeb8-f6181bc9331e",
|
||||||
|
"historyId": "08c83c542e7f539f428476244e3617e1",
|
||||||
|
"testCaseId": "8db33a95bdc54014b9ea1036d3f6a2a7",
|
||||||
|
"fullName": "testcases.test_add_note_pytest.TestNotePytest#test_addnote",
|
||||||
|
"labels": [
|
||||||
|
{
|
||||||
|
"name": "feature",
|
||||||
|
"value": "笔记功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "story",
|
||||||
|
"value": "添加笔记功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "severity",
|
||||||
|
"value": "critical"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tag",
|
||||||
|
"value": "regression"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "parentSuite",
|
||||||
|
"value": "testcases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "suite",
|
||||||
|
"value": "test_add_note_pytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "subSuite",
|
||||||
|
"value": "TestNotePytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "host",
|
||||||
|
"value": "cpe-172-115-250-122.socal.res.rr.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "thread",
|
||||||
|
"value": "7020-MainThread"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "framework",
|
||||||
|
"value": "pytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "language",
|
||||||
|
"value": "cpython3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "package",
|
||||||
|
"value": "testcases.test_add_note_pytest"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"uuid": "6af5198a-4b32-4ed1-a49a-328e93e6c547",
|
||||||
|
"children": [
|
||||||
|
"e980355b-ef95-4b6b-aeb8-f6181bc9331e",
|
||||||
|
"932f4547-1f00-4527-a0ad-998e2cbe2673",
|
||||||
|
"ce01012d-2140-458b-a97c-f77dc84502a5",
|
||||||
|
"91aa413c-8e34-43d9-9953-5afb870b11dd"
|
||||||
|
],
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "base_url",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246224382,
|
||||||
|
"stop": 1605246224382
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246224382,
|
||||||
|
"stop": 1605246257547
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"uuid": "bd510ca4-b7dd-41fc-86b0-5efdb63d06e3",
|
||||||
|
"children": [
|
||||||
|
"e980355b-ef95-4b6b-aeb8-f6181bc9331e",
|
||||||
|
"932f4547-1f00-4527-a0ad-998e2cbe2673",
|
||||||
|
"ce01012d-2140-458b-a97c-f77dc84502a5",
|
||||||
|
"91aa413c-8e34-43d9-9953-5afb870b11dd"
|
||||||
|
],
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "sensitive_url",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246232886,
|
||||||
|
"stop": 1605246232886
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246232886,
|
||||||
|
"stop": 1605246257545
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"uuid": "ab21421a-098d-44d6-93bb-eee0ca2d83a7",
|
||||||
|
"children": [
|
||||||
|
"e980355b-ef95-4b6b-aeb8-f6181bc9331e"
|
||||||
|
],
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "_skip_sensitive",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246234663,
|
||||||
|
"stop": 1605246234663
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246234663,
|
||||||
|
"stop": 1605246243328
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
[32mINFO [0m linda's test:basepage.py:22 这是个初始化驱动!
|
||||||
|
[32mINFO [0m linda's test:basepage.py:22 这是个初始化驱动!
|
|
@ -0,0 +1,81 @@
|
||||||
|
{
|
||||||
|
"name": "test_addnote[我的日记]",
|
||||||
|
"status": "passed",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"name": "初始化添加页面",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246251075,
|
||||||
|
"stop": 1605246251075
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"attachments": [
|
||||||
|
{
|
||||||
|
"name": "log",
|
||||||
|
"source": "eeea85be-6a8d-4746-b9a8-d80b5ebfda0f-attachment.txt",
|
||||||
|
"type": "text/plain"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "add",
|
||||||
|
"value": "'我的日记'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246251075,
|
||||||
|
"stop": 1605246256942,
|
||||||
|
"uuid": "ce01012d-2140-458b-a97c-f77dc84502a5",
|
||||||
|
"historyId": "c3dadac8012ca3b0e11d3abb7b964158",
|
||||||
|
"testCaseId": "8db33a95bdc54014b9ea1036d3f6a2a7",
|
||||||
|
"fullName": "testcases.test_add_note_pytest.TestNotePytest#test_addnote",
|
||||||
|
"labels": [
|
||||||
|
{
|
||||||
|
"name": "feature",
|
||||||
|
"value": "笔记功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "story",
|
||||||
|
"value": "添加笔记功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "severity",
|
||||||
|
"value": "critical"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tag",
|
||||||
|
"value": "regression"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "parentSuite",
|
||||||
|
"value": "testcases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "suite",
|
||||||
|
"value": "test_add_note_pytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "subSuite",
|
||||||
|
"value": "TestNotePytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "host",
|
||||||
|
"value": "cpe-172-115-250-122.socal.res.rr.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "thread",
|
||||||
|
"value": "7020-MainThread"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "framework",
|
||||||
|
"value": "pytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "language",
|
||||||
|
"value": "cpython3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "package",
|
||||||
|
"value": "testcases.test_add_note_pytest"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,81 @@
|
||||||
|
{
|
||||||
|
"name": "test_addnote[mydaily]",
|
||||||
|
"status": "passed",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"name": "初始化添加页面",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246243331,
|
||||||
|
"stop": 1605246243331
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"attachments": [
|
||||||
|
{
|
||||||
|
"name": "log",
|
||||||
|
"source": "929d0d94-ab92-4aa4-bcb1-9a1109957415-attachment.txt",
|
||||||
|
"type": "text/plain"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "add",
|
||||||
|
"value": "'mydaily'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246243331,
|
||||||
|
"stop": 1605246251070,
|
||||||
|
"uuid": "932f4547-1f00-4527-a0ad-998e2cbe2673",
|
||||||
|
"historyId": "334b8cf0229187da0114e758a97ae5d6",
|
||||||
|
"testCaseId": "8db33a95bdc54014b9ea1036d3f6a2a7",
|
||||||
|
"fullName": "testcases.test_add_note_pytest.TestNotePytest#test_addnote",
|
||||||
|
"labels": [
|
||||||
|
{
|
||||||
|
"name": "feature",
|
||||||
|
"value": "笔记功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "story",
|
||||||
|
"value": "添加笔记功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "severity",
|
||||||
|
"value": "critical"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tag",
|
||||||
|
"value": "regression"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "parentSuite",
|
||||||
|
"value": "testcases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "suite",
|
||||||
|
"value": "test_add_note_pytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "subSuite",
|
||||||
|
"value": "TestNotePytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "host",
|
||||||
|
"value": "cpe-172-115-250-122.socal.res.rr.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "thread",
|
||||||
|
"value": "7020-MainThread"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "framework",
|
||||||
|
"value": "pytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "language",
|
||||||
|
"value": "cpython3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "package",
|
||||||
|
"value": "testcases.test_add_note_pytest"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"uuid": "c9f3b0b4-2ec7-4afc-a304-6e857432dc38",
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "add",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246243331,
|
||||||
|
"stop": 1605246243331
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246243331,
|
||||||
|
"stop": 1605246251071
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"uuid": "ff8441f3-8417-48e9-b01c-c384b71c8700",
|
||||||
|
"children": [
|
||||||
|
"932f4547-1f00-4527-a0ad-998e2cbe2673"
|
||||||
|
],
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "_skip_sensitive",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246243330,
|
||||||
|
"stop": 1605246243331
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246243330,
|
||||||
|
"stop": 1605246251071
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
[32mINFO [0m linda's test:basepage.py:22 这是个初始化驱动!
|
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"uuid": "c46fc8fd-34b6-45d3-8870-848aa6b8dbbc",
|
||||||
|
"children": [
|
||||||
|
"e980355b-ef95-4b6b-aeb8-f6181bc9331e",
|
||||||
|
"932f4547-1f00-4527-a0ad-998e2cbe2673",
|
||||||
|
"ce01012d-2140-458b-a97c-f77dc84502a5",
|
||||||
|
"91aa413c-8e34-43d9-9953-5afb870b11dd"
|
||||||
|
],
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "run_app",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246224383,
|
||||||
|
"stop": 1605246232885
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"afters": [
|
||||||
|
{
|
||||||
|
"name": "run_app::close_app",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246256948,
|
||||||
|
"stop": 1605246257544
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246224383,
|
||||||
|
"stop": 1605246257544
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
{
|
||||||
|
"name": "test_deletenote",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246256946,
|
||||||
|
"stop": 1605246256946,
|
||||||
|
"uuid": "91aa413c-8e34-43d9-9953-5afb870b11dd",
|
||||||
|
"historyId": "e314ff1939927dfbdf68c324dbe84599",
|
||||||
|
"testCaseId": "e22a501644a708de344509cdcb40311a",
|
||||||
|
"fullName": "testcases.test_add_note_pytest.TestNotePytest#test_deletenote",
|
||||||
|
"labels": [
|
||||||
|
{
|
||||||
|
"name": "feature",
|
||||||
|
"value": "笔记功能"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tag",
|
||||||
|
"value": "sanity"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "parentSuite",
|
||||||
|
"value": "testcases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "suite",
|
||||||
|
"value": "test_add_note_pytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "subSuite",
|
||||||
|
"value": "TestNotePytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "host",
|
||||||
|
"value": "cpe-172-115-250-122.socal.res.rr.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "thread",
|
||||||
|
"value": "7020-MainThread"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "framework",
|
||||||
|
"value": "pytest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "language",
|
||||||
|
"value": "cpython3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "package",
|
||||||
|
"value": "testcases.test_add_note_pytest"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"uuid": "4ed3e9e2-2391-45c6-8aba-9bdade7d6019",
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "add",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246234663,
|
||||||
|
"stop": 1605246234663
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246234663,
|
||||||
|
"stop": 1605246243327
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"uuid": "4b5061e6-a718-44a1-bcd2-6f9b7bb52f5e",
|
||||||
|
"children": [
|
||||||
|
"e980355b-ef95-4b6b-aeb8-f6181bc9331e",
|
||||||
|
"932f4547-1f00-4527-a0ad-998e2cbe2673",
|
||||||
|
"ce01012d-2140-458b-a97c-f77dc84502a5",
|
||||||
|
"91aa413c-8e34-43d9-9953-5afb870b11dd"
|
||||||
|
],
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "agree_init",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246232886,
|
||||||
|
"stop": 1605246234663
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246232886,
|
||||||
|
"stop": 1605246256947
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"uuid": "e77dd35f-5fd5-4521-b0ab-a4fd5e6ec090",
|
||||||
|
"children": [
|
||||||
|
"91aa413c-8e34-43d9-9953-5afb870b11dd"
|
||||||
|
],
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "_skip_sensitive",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246256946,
|
||||||
|
"stop": 1605246256946
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246256945,
|
||||||
|
"stop": 1605246256946
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"uuid": "7dce7389-7b0e-4d16-a373-c01cd539b2ea",
|
||||||
|
"children": [
|
||||||
|
"e980355b-ef95-4b6b-aeb8-f6181bc9331e",
|
||||||
|
"932f4547-1f00-4527-a0ad-998e2cbe2673",
|
||||||
|
"ce01012d-2140-458b-a97c-f77dc84502a5",
|
||||||
|
"91aa413c-8e34-43d9-9953-5afb870b11dd"
|
||||||
|
],
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "_verify_url",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246224383,
|
||||||
|
"stop": 1605246224383
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246224383,
|
||||||
|
"stop": 1605246257546
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
[32mINFO [0m linda's test:basepage.py:22 这是个初始化驱动!
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"uuid": "405f9e2d-01f6-4302-aafd-ab6eb4dfb000",
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "add",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246251074,
|
||||||
|
"stop": 1605246251074
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246251074,
|
||||||
|
"stop": 1605246256942
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"uuid": "30fc52eb-81b3-4005-9ce8-7dbcbe894eca",
|
||||||
|
"children": [
|
||||||
|
"ce01012d-2140-458b-a97c-f77dc84502a5"
|
||||||
|
],
|
||||||
|
"befores": [
|
||||||
|
{
|
||||||
|
"name": "_skip_sensitive",
|
||||||
|
"status": "passed",
|
||||||
|
"start": 1605246251074,
|
||||||
|
"stop": 1605246251074
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start": 1605246251074,
|
||||||
|
"stop": 1605246256943
|
||||||
|
}
|
Binary file not shown.
|
@ -0,0 +1,3 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-13 11:12
|
||||||
|
# File: __init__.py.py
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-14 08:57
|
||||||
|
# File: conftest.py
|
||||||
|
import pytest
|
||||||
|
from appium import webdriver
|
||||||
|
|
||||||
|
from utils import desired_caps
|
||||||
|
# 在哪个包下,这个包下所有文件共享的数据写在这里
|
||||||
|
from utils.get_path import PATH
|
||||||
|
from utils.get_yaml import get_yaml_data
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='session')
|
||||||
|
def run_app(request):
|
||||||
|
desired_cap_value = desired_caps.get_desired_caps()
|
||||||
|
driver = webdriver.Remote(get_yaml_data(PATH("../config/conf.yaml"))['base_url'], desired_cap_value)
|
||||||
|
|
||||||
|
def close_app():
|
||||||
|
driver.quit()
|
||||||
|
|
||||||
|
request.addfinalizer(close_app)
|
||||||
|
return driver
|
|
@ -0,0 +1,62 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-13 11:55
|
||||||
|
# File: test_add_note.py
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from appium import webdriver
|
||||||
|
from ddt import ddt, data
|
||||||
|
|
||||||
|
from pageobject import addnotepage
|
||||||
|
from utils import desired_caps
|
||||||
|
from utils.get_csvdata import get_csv_data
|
||||||
|
from utils.get_path import PATH
|
||||||
|
|
||||||
|
|
||||||
|
@ddt
|
||||||
|
class TestNote(unittest.TestCase):
|
||||||
|
datafile = PATH("../Testdatas/addnotedata.csv")
|
||||||
|
print(datafile)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
desired_cap_value = desired_caps.get_desired_caps()
|
||||||
|
cls.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_cap_value)
|
||||||
|
# 先初始化页面,
|
||||||
|
ok = addnotepage.FirstOpenPage(cls.driver)
|
||||||
|
# 操作的方法
|
||||||
|
ok.permission_allowandok()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tearDownClass(cls):
|
||||||
|
# 关闭app
|
||||||
|
cls.driver.quit()
|
||||||
|
|
||||||
|
# def test_addNote_nodate(self):
|
||||||
|
# # 初始化添加笔记页面
|
||||||
|
# add_note=addnotepage.AddNotePage(self.driver)
|
||||||
|
# add_note.save_pic("/Users/lindafang/PycharmProjects/Pappium-youdao-demo/shotpicture/"+str(datetime.now()) + "addnote.png")
|
||||||
|
# add_note.add_note_ok("这是笔记的标题","我今天很开心,跟大家共同渡过!")
|
||||||
|
|
||||||
|
@data(*get_csv_data(datafile))
|
||||||
|
def test_addNote(self, value):
|
||||||
|
daily_title = value[0]
|
||||||
|
daily_text = value[1]
|
||||||
|
# 先初始化添加日记的页面
|
||||||
|
addnote = addnotepage.AddNotePage(self.driver)
|
||||||
|
addnote.add_note_ok(daily_title, daily_text)
|
||||||
|
addnote.save_pic(PATH("../shotpicture/" + str(datetime.now())) + "addnote.png")
|
||||||
|
# 这里少断言,先在页面找到要断言的元素,在locator中加入元素。
|
||||||
|
# 在封装的方法中加入属性值 的获取,在这里加断言
|
||||||
|
assert 1
|
||||||
|
|
||||||
|
def test_edit_note(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_delete_note(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
|
@ -0,0 +1,47 @@
|
||||||
|
# Author: lindafang
|
||||||
|
# Date: 2020-08-14 08:55
|
||||||
|
# File: test_add_note_pytest.py
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import allure
|
||||||
|
import pytest
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
from pageobject import addnotepage
|
||||||
|
from utils.get_path import PATH
|
||||||
|
|
||||||
|
|
||||||
|
@allure.feature("笔记功能")
|
||||||
|
class TestNotePytest(object):
|
||||||
|
@allure.step("初始化,打开手机,同意权限")
|
||||||
|
@pytest.fixture(scope='module', autouse=True)
|
||||||
|
def agree_init(self, run_app):
|
||||||
|
# 初始化driver,文件级通用
|
||||||
|
# 先初始化页面,
|
||||||
|
ok = addnotepage.FirstOpenPage(run_app)
|
||||||
|
# 操作的方法
|
||||||
|
ok.permission_allowandok()
|
||||||
|
|
||||||
|
@allure.story("添加笔记功能")
|
||||||
|
@pytest.mark.regression
|
||||||
|
@allure.severity("critical")
|
||||||
|
@pytest.mark.parametrize("add",
|
||||||
|
yaml.safe_load(open(PATH("../Testdatas/" + "addnotedata.yaml"), 'r', encoding='utf8')))
|
||||||
|
def test_addnote(self, add, run_app):
|
||||||
|
note_title = add
|
||||||
|
# 初始化添加笔记页
|
||||||
|
with allure.step("初始化添加页面"):
|
||||||
|
addnote = addnotepage.AddNotePage(run_app)
|
||||||
|
# # 添加标题和内容
|
||||||
|
addnote.add_note_ok(note_title)
|
||||||
|
# # 截图
|
||||||
|
addnote.save_pic(PATH("../shotpicture/" + str(datetime.now())) + "addnote.png")
|
||||||
|
|
||||||
|
@pytest.mark.sanity
|
||||||
|
# @pytest.mark.skip
|
||||||
|
def test_deletenote(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
pytest.main()
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue