端到端测试¶
执行测试套件¶
要求¶
我们使用:
Kind v0.6.1
S2I v1.1.14
Kustomize v3.2.3
Kubectl v1.16.2
Pytest
pip install -U pytest
gRPC.io Tools
python -m pip install grpcio-tools
设置¶
执行以下命令设置所有:
kind_test_setup.sh
可用的 kind kubernetes 配置:
export KUBECONFIG="$(kind get kubeconfig-path)"
运行¶
运行测试并输出日志到文件:
make test_sequential > test_sequential.log
make test_parallel > test_parallel.log
make test_notebooks > test_notebooks.log
运行单个测试
pytest -sv test_tags.py::TestTagsPythonS2iK8s::test_model_single_grpc > test_model_single_grpc.log
日志¶
在独立终端查看测试日志:
tail -f test_sequential.log
在独立的终端查看控制器日志:
export KUBECONFIG="$(kind get kubeconfig-path)"
kubectl logs -f -n seldon-system $(kubectl get pods -n seldon-system -l app=seldon -o jsonpath='{.items[0].metadata.name}')
编写新测试:¶
个人命名空间¶
每个测试都应该运行在他们各自的 Kubernetes 命名空间。 这允许更清洁的环境,并使其中一些能够平行化 (参考 串行和并行测试)。
为使创建和删除命名空间更简化,你可以
使用 namespace 装置。
这个 fixture 负责创建一个具有唯一名称的名称空间,并在最后将其拆下。
要使用它,你仅需指定 namespace 参数作为传参的一部分传入到测试函数。
该 fixture 会在后台取值 namespace 参数值,并创建一个新的命名空间。
def test_foo(..., namespace, ...):
print(f"the new namespace's name is {namespace}")
串行及并行测试¶
我们借助 pytest-xdist 并行化执行测试来加速测试套件。
然而一些测试可能跟其他测试一起执行时产生副作用。
比如,操作器更新测试会改变整个集群的 Seldon 操作器,这
会影响并行测试执行。
为了区分串行和并行化的测试,你需要使用 sequential 标记。
标记 pytest 以允许 选择测试子集。
要标记串行测试,你可以;
@pytest.mark.sequential
def test_foo(...):
print("the scripts will run this test sequentially")
测试整合脚本会确保测试标记为 sequential 以运行在独立的 worker 中。