一、编写测试用例:
用例名称——>用例步骤——>预期结果——>实际结果——>前置、后置
1、用例名称:要以 test_开头 ;
2、用例步骤:即用例业务逻辑 ;
3、断言:(实际和预期结果比对) assert 表达式( True/ False ) AssertError ;
当出现用例 AssertError 或者 测试用例其他原因 raise 异常时,测试用例执行Fail ;
4、用例呈现的2种形式:
a、.py 下的函数,函数名以 test_ 开头 ;
b、.py 下类里面的方法,方法名以 test_ 开头 ;
5、自动搜集测试用例:
a、搜集目录 :在哪个文件目录下执行 pytest 命令,就在 哪个目录开始搜集测试用例 ;
b、目录下的文件过滤: 文件名以 test_ 开头的 py文件,或者 文件名 以 _test 结尾的py 文件 ;
目录下所有 .py 文件 的执行顺序是 按照 ASCII 码 顺序 ;
c、.py 文件下的用例过滤:.py 文件下的函数, 函数名以 test_ 开头,
所有测试用例 test_xx 是按照代码 自上而下的 顺序执行 ;
6、pytest.main(['-s', '-v', 'test_dd.py']) 在 _.py 文件中添加 pytest.main() 的效果 和 在cmd 命令行执行效果一样 ;
a、当出现用例 AssertError 或者 测试用例其他原因 raise 异常时,测试用例执行Fail ;
示例代码如下:
def test_3(): login = 'success' assert login == 'success' # 除数不能为0 ,异常,测试用例执行Fail def test_1(): a = 10 b = 0 c = a / b login = 'success' assert login == 'success'
执行结果如下:
D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd>pytest -sv ================================================= test session starts ================================================= platform win32 -- Python 3.8.6, pytest-5.4.3, py-1.10.0, pluggy-0.13.1 -- c:\skyworkspace\worktools\python\python38\python.exe cachedir: .pytest_cache metadata: {'Python': '3.8.6', 'Platform': 'Windows-10-10.0.19041-SP0', 'Packages': {'pytest': '5.4.3', 'py': '1.10.0', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.9.43', 'html': '2.1.1', 'metadata': '1.11.0'}, 'JAVA_HOME': 'C:\\SkyWorkSpace\\WorkTools\\Java\\jdk1.8\\jdk1.8.0_271'} rootdir: D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd plugins: allure-pytest-2.9.43, html-2.1.1, metadata-1.11.0 collected 2 items test_dd.py::test_3 PASSED test_dd.py::test_1 FAILED ====================================================== FAILURES ======================================================= _______________________________________________________ test_1 ________________________________________________________ def test_1(): a = 10 b = 0 > c = a / b E ZeroDivisionError: division by zero test_dd.py:11: ZeroDivisionError =============================================== short test summary info =============================================== FAILED test_dd.py::test_1 - ZeroDivisionError: division by zero ============================================= 1 failed, 1 passed in 0.16s ============================================= D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd>
b、pytest.main(['-sv', 'test_dd.py']) : 在 _.py 文件中添加 pytest.main() 的效果 和 在cmd 命令行执行效果一样 ;
或者 pytest.main(['-s', '-v', 'test_dd.py']) ,参数以列表的形式 ;
代码如下:
import pytest class TestDemo(): def test_3(self): login = 'success' assert login == 'success' def test_2(self): login = 'success' assert login == 'success' def func_1(self): login = 'success' assert login == 'success' class TestDemoAA(): def test_3(self): login = 'success' assert login == 'success' def test_2(self): login = 'success' assert login == 'success' def func_1(self): login = 'success' assert login == 'success' if __name__ == '__main__': pytest.main(['-sv', 'test_dd.py'])
执行结果如下:
D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day15/dd/test_dd.py ============================= test session starts ============================= platform win32 -- Python 3.8.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1 -- D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\venv\Scripts\python.exe cachedir: .pytest_cache rootdir: D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd collecting ... collected 4 items test_dd.py::TestDemo::test_3 PASSED test_dd.py::TestDemo::test_2 PASSED test_dd.py::TestDemoAA::test_3 PASSED test_dd.py::TestDemoAA::test_2 PASSED ============================== 4 passed in 0.01s ============================== Process finished with exit code 0