mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-01-07 19:31:51 +08:00
Update tests20 tests (#6276)
* [skip ci] Update test levels Signed-off-by: yanliang567 <yanliang.qiao@zilliz.com> * [skip ci] Drop collections in self when teardown Signed-off-by: yanliang567 <yanliang.qiao@zilliz.com> * [skip ci] Update search testcase Signed-off-by: yanliang567 <yanliang.qiao@zilliz.com> * [skip ci] Open writing logs Signed-off-by: yanliang567 <yanliang.qiao@zilliz.com>
This commit is contained in:
parent
2b481563a8
commit
bc48b2a914
@ -47,16 +47,16 @@ class Base:
|
||||
log.info("[setup_class] Start setup class...")
|
||||
|
||||
def teardown_class(self):
|
||||
log.info("[teardown_class] Start teardown class...")
|
||||
pass
|
||||
|
||||
def setup(self):
|
||||
log.info(("*" * 35) + " setup " + ("*" * 35))
|
||||
self.connection_wrap = ApiConnectionsWrapper()
|
||||
self.utility_wrap = ApiUtilityWrapper()
|
||||
self.collection_wrap = ApiCollectionWrapper()
|
||||
self.collection_object_list.append(self.collection_wrap)
|
||||
self.partition_wrap = ApiPartitionWrapper()
|
||||
self.index_wrap = ApiIndexWrapper()
|
||||
self.utility_wrap = ApiUtilityWrapper()
|
||||
self.collection_schema_wrap = ApiCollectionSchemaWrapper()
|
||||
self.field_schema_wrap = ApiFieldSchemaWrapper()
|
||||
|
||||
@ -68,19 +68,16 @@ class Base:
|
||||
if self.connection_wrap.get_connection(alias=DefaultConfig.DEFAULT_USING)[0] is None:
|
||||
self.connection_wrap.connect(alias=DefaultConfig.DEFAULT_USING, host=param_info.param_host,
|
||||
port=param_info.param_port)
|
||||
if self.collection_wrap.collection is not None:
|
||||
self.collection_wrap.drop(check_task='check_nothing')
|
||||
|
||||
for collection_object in self.collection_object_list:
|
||||
if collection_object is not None and collection_object.collection is not None:
|
||||
collection_object.drop()
|
||||
if collection_object.collection is not None \
|
||||
and collection_object.name in self.utility_wrap.list_collections()[0]:
|
||||
collection_object.drop(check_task='check_nothing')
|
||||
|
||||
# if self.collection_wrap is not None:
|
||||
# collection_list = self.utility_wrap.list_collections()[0]
|
||||
# for i in collection_list:
|
||||
# collection_wrap = ApiCollectionWrapper()
|
||||
# collection_wrap.init_collection(name=i)
|
||||
# collection_wrap.drop()
|
||||
except Exception as e:
|
||||
pass
|
||||
log.debug(str(e))
|
||||
|
||||
try:
|
||||
""" Delete connection and reset configuration"""
|
||||
@ -92,7 +89,7 @@ class Base:
|
||||
self.connection_wrap.add_connection(default={"host": DefaultConfig.DEFAULT_HOST,
|
||||
"port": DefaultConfig.DEFAULT_PORT})
|
||||
except Exception as e:
|
||||
pass
|
||||
log.debug(str(e))
|
||||
|
||||
@pytest.fixture(scope="module", autouse=True)
|
||||
def initialize_env(self, request):
|
||||
@ -140,8 +137,8 @@ class TestcaseBase(Base):
|
||||
if self.connection_wrap.get_connection(alias=DefaultConfig.DEFAULT_USING)[0] is None:
|
||||
self._connect()
|
||||
collection_w = ApiCollectionWrapper()
|
||||
self.collection_object_list.append(collection_w)
|
||||
collection_w.init_collection(name=name, schema=schema, check_task=check_task, check_items=check_items, **kwargs)
|
||||
self.collection_object_list.append(collection_w)
|
||||
return collection_w
|
||||
|
||||
def init_partition_wrap(self, collection_wrap=None, name=None, description=None,
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
apiVersion: chaos-mesh.org/v1alpha1
|
||||
kind: PodChaos
|
||||
metadata:
|
||||
name: test-proxy-podkill
|
||||
namespace: chaos-testing
|
||||
spec:
|
||||
action: pod-kill
|
||||
mode: one
|
||||
selector:
|
||||
namespaces:
|
||||
- chaos-testing # target namespace of milvus deployment
|
||||
labelSelectors:
|
||||
app.kubernetes.io/instance: milvus-chaos
|
||||
app.kubernetes.io/name: milvus
|
||||
component: pulsar
|
||||
scheduler:
|
||||
cron: '@every 2s'
|
||||
@ -10,18 +10,22 @@ from common import common_func as cf
|
||||
from chaos_commons import *
|
||||
from common.common_type import CaseLabel
|
||||
import constants
|
||||
from delayed_assert import expect, assert_expectations
|
||||
|
||||
|
||||
def assert_statistic(checkers, expectations={}):
|
||||
for k in checkers.keys():
|
||||
# expect succ if no expectations
|
||||
succ_rate = checkers[k].succ_rate()
|
||||
total = checkers[k].total()
|
||||
if expectations.get(k, '') == constants.FAIL:
|
||||
log.debug(f"Expect Fail: {str(k)} succ rate {succ_rate}, total: {checkers[k].total()}")
|
||||
delayed_assert.expect(succ_rate < 0.49)
|
||||
log.debug(f"Expect Fail: {str(k)} succ rate {succ_rate}, total: {total}")
|
||||
expect(succ_rate < 0.49 or total < 2,
|
||||
f"Expect Fail: {str(k)} succ rate {succ_rate}, total: {total}")
|
||||
else:
|
||||
log.debug(f"Expect Succ: {str(k)} succ rate {succ_rate}, total: {checkers[k].total()}")
|
||||
delayed_assert.expect(succ_rate > 0.90)
|
||||
log.debug(f"Expect Succ: {str(k)} succ rate {succ_rate}, total: {total}")
|
||||
expect(succ_rate > 0.90 or total > 2,
|
||||
f"Expect Succ: {str(k)} succ rate {succ_rate}, total: {total}")
|
||||
|
||||
|
||||
class TestChaosBase:
|
||||
@ -167,4 +171,7 @@ class TestChaos(TestChaosBase):
|
||||
log.debug("******3rd assert after chaos deleted: ")
|
||||
assert_statistic(self.health_checkers)
|
||||
|
||||
# assert all expectations
|
||||
assert_expectations()
|
||||
|
||||
log.debug("*********************Chaos Test Completed**********************")
|
||||
|
||||
1
tests20/python_client/load/README.md
Normal file
1
tests20/python_client/load/README.md
Normal file
@ -0,0 +1 @@
|
||||
# Load Test
|
||||
@ -677,7 +677,7 @@ class TestCollectionParams(TestcaseBase):
|
||||
schema, _ = self.collection_schema_wrap.init_collection_schema(fields)
|
||||
assert not schema.auto_id
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
def test_collection_auto_id_inconsistent(self):
|
||||
"""
|
||||
target: test collection auto_id with both collection schema and field schema
|
||||
@ -747,7 +747,7 @@ class TestCollectionParams(TestcaseBase):
|
||||
self.field_schema_wrap.init_field_schema(name="int", dtype=DataType.INT64, auto_id=True,
|
||||
check_task=CheckTasks.err_res, check_items=error)
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.parametrize("dtype", [DataType.FLOAT_VECTOR, DataType.BINARY_VECTOR])
|
||||
def test_collection_vector_without_dim(self, dtype):
|
||||
"""
|
||||
@ -1032,7 +1032,7 @@ class TestCollectionDataframe(TestcaseBase):
|
||||
self.collection_wrap.construct_from_dataframe(c_name, df, primary_field='A', check_task=CheckTasks.err_res,
|
||||
check_items=error)
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
def test_construct_from_non_dataframe(self, get_non_df):
|
||||
"""
|
||||
target: test create collection by invalid dataframe
|
||||
@ -1115,7 +1115,7 @@ class TestCollectionDataframe(TestcaseBase):
|
||||
self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,
|
||||
auto_id=None, check_task=CheckTasks.err_res, check_items=error)
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
def test_construct_auto_id_true_insert(self):
|
||||
"""
|
||||
target: test construct with true auto_id
|
||||
@ -1129,7 +1129,7 @@ class TestCollectionDataframe(TestcaseBase):
|
||||
self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,
|
||||
auto_id=True, check_task=CheckTasks.err_res, check_items=error)
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.xfail(reason="#5967")
|
||||
def test_construct_auto_id_true_no_insert(self):
|
||||
"""
|
||||
@ -1163,7 +1163,7 @@ class TestCollectionDataframe(TestcaseBase):
|
||||
assert cf._check_primary_keys(mutation_res.primary_keys, 100)
|
||||
assert self.collection_wrap.num_entities == nb
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
def test_construct_auto_id_false(self):
|
||||
"""
|
||||
target: test construct with false auto_id
|
||||
|
||||
@ -14,7 +14,7 @@ class TestConnectionParams(TestcaseBase):
|
||||
The author : Ting.Wang
|
||||
"""
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
@pytest.mark.parametrize("data", ct.get_dict_without_host_port)
|
||||
def test_connection_add_connection_kwargs_param_check(self, data):
|
||||
"""
|
||||
@ -35,7 +35,7 @@ class TestConnectionParams(TestcaseBase):
|
||||
self.connection_wrap.list_connections(check_task=ct.CheckTasks.ccr,
|
||||
check_items={ct.list_content: [(DefaultConfig.DEFAULT_USING, None)]})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L1)
|
||||
def test_connection_connect_kwargs_param_check(self):
|
||||
"""
|
||||
target: test **kwargs of connect
|
||||
@ -51,7 +51,7 @@ class TestConnectionParams(TestcaseBase):
|
||||
check_task=ct.CheckTasks.err_res,
|
||||
check_items={ct.err_code: 0, ct.err_msg: cem.NoHostPort})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
@pytest.mark.parametrize("alias", ct.get_not_string)
|
||||
def test_connection_connect_alias_param_check(self, alias):
|
||||
"""
|
||||
@ -64,7 +64,7 @@ class TestConnectionParams(TestcaseBase):
|
||||
self.connection_wrap.connect(alias=alias, check_task=ct.CheckTasks.err_res,
|
||||
check_items={ct.err_code: 0, ct.err_msg: cem.AliasType % type(alias)})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
@pytest.mark.parametrize("alias", ct.get_not_string)
|
||||
def test_connection_get_alias_param_check(self, alias):
|
||||
"""
|
||||
@ -77,7 +77,7 @@ class TestConnectionParams(TestcaseBase):
|
||||
self.connection_wrap.get_connection(alias=alias, check_task=ct.CheckTasks.err_res,
|
||||
check_items={ct.err_code: 0, ct.err_msg: cem.AliasType % type(alias)})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
@pytest.mark.parametrize("alias", ct.get_not_string)
|
||||
def test_connection_get_addr_alias_param_check(self, alias):
|
||||
"""
|
||||
@ -90,7 +90,7 @@ class TestConnectionParams(TestcaseBase):
|
||||
self.connection_wrap.get_connection_addr(alias=alias, check_task=ct.CheckTasks.err_res,
|
||||
check_items={ct.err_code: 0, ct.err_msg: cem.AliasType % type(alias)})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
@pytest.mark.parametrize("alias", ct.get_not_string)
|
||||
def test_connection_remove_alias_param_check(self, alias):
|
||||
"""
|
||||
@ -104,7 +104,7 @@ class TestConnectionParams(TestcaseBase):
|
||||
self.connection_wrap.remove_connection(alias=alias, check_task=ct.CheckTasks.err_res,
|
||||
check_items={ct.err_code: 0, ct.err_msg: cem.AliasType % type(alias)})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
@pytest.mark.parametrize("alias", ct.get_not_string)
|
||||
def test_connection_disconnect_alias_param_check(self, alias):
|
||||
"""
|
||||
@ -231,7 +231,7 @@ class TestConnectionOperation(TestcaseBase):
|
||||
self.connection_wrap.get_connection_addr(alias=DefaultConfig.DEFAULT_USING, check_task=ct.CheckTasks.ccr,
|
||||
check_items={ct.dict_content: {'host': 'localhost', 'port': '19530'}})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L0)
|
||||
@pytest.mark.tags(ct.CaseLabel.L1)
|
||||
def test_connection_add_cover_default(self):
|
||||
"""
|
||||
target: add a connection to override the default connection
|
||||
@ -494,7 +494,7 @@ class TestConnectionOperation(TestcaseBase):
|
||||
self.connection_wrap.get_connection_addr(alias=connect_name, check_task=ct.CheckTasks.ccr,
|
||||
check_items={ct.dict_content: {'host': host, 'port': port}})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L1)
|
||||
@pytest.mark.parametrize("connect_name", [DefaultConfig.DEFAULT_USING, "test_alias_nme"])
|
||||
def test_connection_connect_wrong_params(self, host, port, connect_name):
|
||||
"""
|
||||
@ -518,7 +518,7 @@ class TestConnectionOperation(TestcaseBase):
|
||||
self.connection_wrap.get_connection_addr(alias=connect_name, check_task=ct.CheckTasks.ccr,
|
||||
check_items={ct.dict_content: dict_content})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
@pytest.mark.parametrize("connect_name", [DefaultConfig.DEFAULT_USING, ct.Not_Exist])
|
||||
def test_connection_disconnect_not_exist(self, connect_name):
|
||||
"""
|
||||
@ -542,7 +542,7 @@ class TestConnectionOperation(TestcaseBase):
|
||||
check_task=ct.CheckTasks.ccr,
|
||||
check_items={ct.dict_content: {"host": "localhost", "port": "19530"}})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L0)
|
||||
@pytest.mark.tags(ct.CaseLabel.L1)
|
||||
def test_connection_disconnect_after_default_connect(self, host, port):
|
||||
"""
|
||||
target: disconnect default connect and check result
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import datetime
|
||||
import pytest
|
||||
|
||||
from base.client_base import TestcaseBase
|
||||
@ -10,45 +11,59 @@ prefix = "e2e_"
|
||||
|
||||
class TestE2e(TestcaseBase):
|
||||
""" Test case of end to end"""
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
@pytest.mark.parametrize("name", [(cf.gen_unique_str(prefix))])
|
||||
def test_milvus_default(self, name):
|
||||
from utils.util_log import test_log as log
|
||||
# create
|
||||
t0 = datetime.datetime.now()
|
||||
collection_w = self.init_collection_wrap(name=name)
|
||||
log.debug("assert create")
|
||||
tt = datetime.datetime.now() - t0
|
||||
log.debug(f"assert create: {tt}")
|
||||
assert collection_w.name == name
|
||||
|
||||
# insert
|
||||
data = cf.gen_default_list_data()
|
||||
t0 = datetime.datetime.now()
|
||||
_, res = collection_w.insert(data)
|
||||
log.debug("assert insert")
|
||||
tt = datetime.datetime.now() - t0
|
||||
log.debug(f"assert insert: {tt}")
|
||||
assert res
|
||||
|
||||
# flush
|
||||
log.debug("assert flush")
|
||||
t0 = datetime.datetime.now()
|
||||
assert collection_w.num_entities == len(data[0])
|
||||
tt = datetime.datetime.now() - t0
|
||||
log.debug(f"assert flush: {tt}")
|
||||
|
||||
# search
|
||||
collection_w.load()
|
||||
search_vectors = cf.gen_vectors(1, ct.default_dim)
|
||||
t0 = datetime.datetime.now()
|
||||
res_1, _ = collection_w.search(data=search_vectors,
|
||||
anns_field=ct.default_float_vec_field_name,
|
||||
param={"nprobe": 16}, limit=1)
|
||||
log.debug("assert search")
|
||||
tt = datetime.datetime.now() - t0
|
||||
log.debug(f"assert search: {tt}")
|
||||
assert len(res_1) == 1
|
||||
# collection_w.release()
|
||||
|
||||
# index
|
||||
collection_w.insert(cf.gen_default_dataframe_data(nb=4000))
|
||||
assert collection_w.num_entities == len(data[0]) + 4000
|
||||
collection_w.insert(cf.gen_default_dataframe_data(nb=5000))
|
||||
assert collection_w.num_entities == len(data[0]) + 5000
|
||||
_index_params = {"index_type": "IVF_SQ8", "metric_type": "L2", "params": {"nlist": 64}}
|
||||
t0 = datetime.datetime.now()
|
||||
index, _ = collection_w.create_index(field_name=ct.default_float_vec_field_name,
|
||||
index_params=_index_params,
|
||||
name=cf.gen_unique_str())
|
||||
log.debug("assert index")
|
||||
tt = datetime.datetime.now() - t0
|
||||
log.debug(f"assert index: {tt}")
|
||||
assert len(collection_w.indexes) == 1
|
||||
|
||||
# # query
|
||||
# term_expr = f'{ct.default_int64_field_name} in [1,2,3,4]'
|
||||
# res, _ = collection_w.query(term_expr)
|
||||
# assert len(res) == 4
|
||||
# query
|
||||
term_expr = f'{ct.default_int64_field_name} in [3001,4001,4999,2999]'
|
||||
t0 = datetime.datetime.now()
|
||||
res, _ = collection_w.query(term_expr)
|
||||
tt = datetime.datetime.now() - t0
|
||||
log.debug(f"assert query: {tt}")
|
||||
assert len(res) == 4
|
||||
|
||||
@ -345,7 +345,7 @@ class TestIndexAdvanced(TestcaseBase):
|
||||
"""
|
||||
pass
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L3)
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
def _test_index_recovery_after_restart(self):
|
||||
"""
|
||||
target: test index still existed after server restart
|
||||
@ -354,7 +354,7 @@ class TestIndexAdvanced(TestcaseBase):
|
||||
"""
|
||||
pass
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L3)
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
def _test_index_building_after_restart(self):
|
||||
"""
|
||||
target: index can still build if not finished before server restart
|
||||
|
||||
@ -541,7 +541,7 @@ class TestInsertOperation(TestcaseBase):
|
||||
assert cf._check_primary_keys(primary_keys, nb * 2)
|
||||
assert collection_w.num_entities == nb * 2
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
def test_insert_auto_id_true_list_data(self):
|
||||
"""
|
||||
target: test insert ids fields values when auto_id=True
|
||||
|
||||
@ -138,7 +138,7 @@ class TestPartitionParams(TestcaseBase):
|
||||
)
|
||||
assert collection_w.has_partition(partition_name)[0]
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
def test_partition_default_name(self):
|
||||
"""
|
||||
target: verify create a partition with default name
|
||||
@ -412,7 +412,7 @@ class TestPartitionOperations(TestcaseBase):
|
||||
check_items={ct.err_code: 1,
|
||||
ct.err_msg: "maximum partition's number should be limit to 4096"})
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
@pytest.mark.parametrize("partition_name", [ct.default_partition_name])
|
||||
def test_partition_drop_default_partition(self, partition_name):
|
||||
"""
|
||||
@ -455,7 +455,7 @@ class TestPartitionOperations(TestcaseBase):
|
||||
|
||||
# verify that drop the partition again with exception
|
||||
partition_w.drop(check_task=CheckTasks.err_res,
|
||||
check_items={ct.err_code: 1, ct.err_msg: "Partition doesn't exist"})
|
||||
check_items={ct.err_code: 1, ct.err_msg: "Partition not exist"})
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
@pytest.mark.parametrize("partition_name", [cf.gen_unique_str(prefix)])
|
||||
@ -578,7 +578,7 @@ class TestPartitionOperations(TestcaseBase):
|
||||
|
||||
# release the dropped partition and check err response
|
||||
partition_w.release(check_task=CheckTasks.err_res,
|
||||
check_items={ct.err_code: 1, ct.err_msg: "Partition doesn't exist"})
|
||||
check_items={ct.err_code: 1, ct.err_msg: "Partition not exist"})
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.parametrize("partition_name", [cf.gen_unique_str(prefix)])
|
||||
@ -690,7 +690,7 @@ class TestPartitionOperations(TestcaseBase):
|
||||
# insert data to partition
|
||||
partition_w.insert(cf.gen_default_dataframe_data(),
|
||||
check_task=CheckTasks.err_res,
|
||||
check_items={ct.err_code: 1, ct.err_msg: "Partition doesn't exist"})
|
||||
check_items={ct.err_code: 1, ct.err_msg: "Partition not exist"})
|
||||
# TODO: update the assert error
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
|
||||
@ -440,7 +440,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
******************************************************************
|
||||
"""
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
@pytest.mark.parametrize("collection_name", [cf.gen_unique_str(prefix)])
|
||||
def test_query_without_connection(self, collection_name):
|
||||
"""
|
||||
@ -462,7 +462,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
collection_w.query(default_term_expr, check_task=CheckTasks.err_res,
|
||||
check_items={ct.err_code: 0, ct.err_msg: cem.ConnectFirst})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L1)
|
||||
@pytest.mark.parametrize("collection_name, data",
|
||||
[(cf.gen_unique_str(prefix), cf.gen_default_list_data(ct.default_nb))])
|
||||
def test_query_without_loading(self, collection_name, data):
|
||||
@ -485,7 +485,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
collection_w.query(default_term_expr, check_task=CheckTasks.err_res,
|
||||
check_items={ct.err_code: 1, ct.err_msg: clem.CollNotLoaded % collection_name})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L1)
|
||||
@pytest.mark.parametrize("term_expr", [f'{ct.default_int64_field_name} in [0]'])
|
||||
def test_query_expr_single_term_array(self, term_expr):
|
||||
"""
|
||||
@ -501,7 +501,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
check_vec = vectors[0].iloc[:, [0, 1]][0:1].to_dict('records')
|
||||
collection_w.query(term_expr, check_task=CheckTasks.check_query_results, check_items={exp_res: check_vec})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L1)
|
||||
@pytest.mark.parametrize("term_expr", [f'{ct.default_int64_field_name} in [0]'])
|
||||
def test_query_binary_expr_single_term_array(self, term_expr, check_content):
|
||||
"""
|
||||
@ -518,7 +518,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
check_vec = vectors[0].iloc[:, [0, 1]][0:1].to_dict('records')
|
||||
collection_w.query(term_expr, check_task=CheckTasks.check_query_results, check_items={exp_res: check_vec})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
def test_query_expr_all_term_array(self):
|
||||
"""
|
||||
target: test query with all array term expr
|
||||
@ -537,7 +537,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
# query all array value
|
||||
collection_w.query(term_expr, check_task=CheckTasks.check_query_results, check_items={exp_res: check_vec})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L1)
|
||||
def test_query_expr_half_term_array(self):
|
||||
"""
|
||||
target: test query with half array term expr
|
||||
@ -554,7 +554,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
assert len(res) == len(int_values)
|
||||
|
||||
@pytest.mark.xfail(reason="fail")
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
def test_query_expr_repeated_term_array(self):
|
||||
"""
|
||||
target: test query with repeated term array on primary field with unique value
|
||||
@ -568,7 +568,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
assert len(res) == 1
|
||||
assert res[0][ct.default_int64_field_name] == int_values[0]
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L0)
|
||||
def test_query_after_index(self):
|
||||
"""
|
||||
target: test query after creating index
|
||||
@ -589,7 +589,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
check_vec = vectors[0].iloc[:, [0, 1]][0:len(int_values)].to_dict('records')
|
||||
collection_w.query(term_expr, check_task=CheckTasks.check_query_results, check_items={exp_res: check_vec})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L1)
|
||||
def test_query_after_search(self):
|
||||
"""
|
||||
target: test query after search
|
||||
@ -606,7 +606,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
collection_w.search(vectors_s[:ct.default_nq], ct.default_float_vec_field_name,
|
||||
ct.default_search_params, limit, "int64 >= 0",
|
||||
check_task=CheckTasks.check_search_results,
|
||||
check_items={"nq": ct.default_nq, "limit": nb_old})
|
||||
check_items={"nq": ct.default_nq, "limit": nb_old, "nb": nb_old})
|
||||
|
||||
# check number of entities and that method calls the flush interface
|
||||
assert collection_w.num_entities == nb_old
|
||||
@ -615,7 +615,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
check_vec = vectors[0].iloc[:, [0, 1]][0:2].to_dict('records')
|
||||
collection_w.query(term_expr, check_task=CheckTasks.check_query_results, check_items={exp_res: check_vec})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
def test_query_partition_repeatedly(self):
|
||||
"""
|
||||
target: test query repeatedly on partition
|
||||
@ -647,7 +647,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
res_two, _ = collection_w.query(default_term_expr, partition_names=[partition_w.name])
|
||||
assert res_one == res_two
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
def test_query_another_partition(self):
|
||||
"""
|
||||
target: test query another partition
|
||||
@ -663,7 +663,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
collection_w.query(term_expr, partition_names=[partition_w.name], check_task=CheckTasks.check_query_results,
|
||||
check_items={exp_res: []})
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
def test_query_multi_partitions_multi_results(self):
|
||||
"""
|
||||
target: test query on multi partitions and get multi results
|
||||
@ -679,7 +679,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
res, _ = collection_w.query(term_expr, partition_names=[ct.default_partition_name, partition_w.name])
|
||||
assert len(res) == 2
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L3)
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
def test_query_multi_partitions_single_result(self):
|
||||
"""
|
||||
target: test query on multi partitions and get single result
|
||||
@ -696,6 +696,7 @@ class TestQueryOperation(TestcaseBase):
|
||||
assert len(res) == 1
|
||||
assert res[0][ct.default_int64_field_name] == half
|
||||
|
||||
@pytest.mark.tags(ct.CaseLabel.L2)
|
||||
def insert_entities_into_two_partitions_in_half(self, half):
|
||||
"""
|
||||
insert default entities into two partitions(partition_w and _default) in half(int64 and float fields values)
|
||||
|
||||
@ -447,7 +447,7 @@ class TestCollectionSearch(TestcaseBase):
|
||||
check_task=CheckTasks.check_search_results,
|
||||
check_items={"nq": 0})
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
def test_search_before_after_delete(self):
|
||||
"""
|
||||
target: test search function before and after deletion
|
||||
@ -747,7 +747,7 @@ class TestCollectionSearch(TestcaseBase):
|
||||
"nb": default_nb,
|
||||
"limit": default_limit})
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L0)
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
def test_search_collection_multiple_times(self):
|
||||
"""
|
||||
target: test search for multiple times
|
||||
@ -1127,7 +1127,6 @@ class TestCollectionSearch(TestcaseBase):
|
||||
"limit": default_limit})
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
@pytest.mark.timeout(300)
|
||||
def test_search_concurrent_multi_threads(self):
|
||||
"""
|
||||
target: test concurrent search with multi-processes
|
||||
|
||||
@ -161,7 +161,7 @@ class TestUtilityBase(TestcaseBase):
|
||||
res, _ = self.utility_wrap.has_collection(cw.name)
|
||||
assert res is True
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
def test_has_collection_not_created(self):
|
||||
"""
|
||||
target: test has_collection with collection name which is not created
|
||||
@ -188,7 +188,7 @@ class TestUtilityBase(TestcaseBase):
|
||||
res, _ = self.utility_wrap.has_collection(c_name)
|
||||
assert res is False
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
def test_has_partition(self):
|
||||
"""
|
||||
target: test has_partition with partition name
|
||||
@ -368,6 +368,7 @@ class TestUtilityBase(TestcaseBase):
|
||||
assert res is None
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.skip(reason='hang issue #6272')
|
||||
def test_wait_index_collection_index(self):
|
||||
"""
|
||||
target: test wait_index
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user