编写用例
1. 概述
TCase平台上对自动化的用例发起执行,可以识别用例执行的结果。要将自动化用例接入TCase做执行,用例需要符合平台的标准。
目前平台支持三种模式的用例:pytest模式、类gtest模式和nose模式。
不同模式的用例运行方式一致,都是由平台拉起一个新的进程运行;不同模式的主要区别在于结果解析不一致。
2. 用例执行结果
用例执行结果分为成功、跳过、失败、异常、超时和终止六种。
- 成功:用例执行成功,所有用例逻辑中的检查点全部检查通过
- 跳过:用例标记为跳过,未实际执行。
- 失败:用例执行过程中,因有检查点未通过(如实际值和预期值不符)
- 异常:用例执行过程中发生异常而中止,没有正常结束
- 超时:用例执行超时
- 终止:用例执行过程中被终止
3. pytest模式
需要Python3环境,并下载pytest依赖。详细可以查看pytest参考文档
3.1 简单示例
pytest用例函数以test开头即可识别,采用【python3 -m pytest example.py】调用
# example.py
# pytest用例函数以test开头即可识别,python3 -m pytest example.py
def test_example():
assert 1 == 1
3.2 用例结果判断
上面示例输出如下所示,用例结果为passed即为【成功】
============================================================== test session starts ===============================================================
platform linux -- Python 3.8.2, pytest-7.1.2, pluggy-1.0.0
rootdir: /data/tcase/test, configfile: pytest.ini
plugins: anyio-3.6.1
collected 1 item
example.py::test_example PASSED [100%]
================================================================ warnings summary ================================================================
../../../usr/local/lib/python3.8/site-packages/_pytest/config/__init__.py:1252
/usr/local/lib/python3.8/site-packages/_pytest/config/__init__.py:1252: PytestConfigWarning: Unknown config option: thread_id
self._warn_or_fail_if_strict(f"Unknown config option: {key}\n")
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
========================================================== 1 passed, 1 warning in 0.01s ==========================================================
4. 类gtest模式
天然适用于c++测试框架gtest编写的用例。类gtest模式下测试用例编写的形式没有限制,只要是命令行可以执行的程序,有日志输出结果通过终端输出即可。
平台对于用例结果的判断,完全基于用例程序执行后的输出的日志内容。也就是说,无论用例是shell脚本还是可执行程序,只要输出的文本满足以下要求,就可以被平台识别为合法用例
4.1 用例结果判断
- 1、如果用例结束时没有输出"Global test environment tear-down",则认为用例是异常结束的,结果为【异常】
- 2、如果用例结束时输出了"[ FAILED ]"(采用英文方括号,方括号与FAILED前后都有2个空格),则认为用例失败,结果为【失败】
- 3、如果用例结束没有输出"[ FAILED ]",且输出了"[ PASSED ]"(括号与FAILED、PASSED前后都有2个空格),则认为用例成功,结果为【成功】
- 4、如果用例输出"[ SKIPED ]",则用例结果会被标记为【跳过】
- 5、用例可以设置超时时间,当用例执行时间超过设置的时间时,用例结果会被标记为【超时】
5. nose模式
nose框架的使用可以查看nose参考文档
在用例执行命令时需要指定with-xunit参数,并且指定xunit-file参数指定保存结果的路径。如:nosetests -s --with-xunit --xunit-file=TestAllocBlob_not_exist_space.xml --verbose case/allocator/test_alloc_blob.py:TestAllocBlob.not_exist_space --nologcapture
5.1 用例结果判断
如下所示为nose用例的结果输出
如果errors为非零则用例会被标记为【失败】;
用例errors为零被标记为【成功】。
没有产生xml文件或者无法解析到对应结果时用例被标记为【异常】。
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="nosetests" tests="1" errors="0" failures="0" skip="0">
<testcase classname="test.case.engine.test_put_shard_slice.TestPutShardSlice" name="test_delay_to_put_slice" time="69.420">
<system-out><![CDATA[10.160.131.87[]]]>
</system-out>
</testcase>
</testsuite>