Pytest学习笔记
1、介绍
1.1、单元测试
单元测试是指在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试
1.2、单元测试框架
- 测试发现:从多个py文件里面去找到我们测试用例
- 测试执行:按照一定的顺序和规则去执行。并生成结果
- 测试判断:通过断言判断预期结果和实际结果的差异
- 测试报告:统计测试进度,耗时,通过率,生成测试报告
1.3、自动化测试框架
针对一个项目开发的一个代码框架,这个框架封装了很多的基础模块,报告模块等等
1.4、Pytest
pytest可以和selenium,requests,appium结合实现web自动化,接口自动化,app自动化
pytest可以实现测试用例的跳过以及reruns失败用例重试
pytest可以和allure生成非常美观的测试报告
pytest可以和Jenkins持续集成
pytest有很多非常强大的插件,并且这些插件能够实现很多的实用的操作
- pytest pytest-xdist 测试用例分布式执行,多CPU分发
- pytest-ordering 用于改变测试用例的执行顺序(从上到下)
- pytest-rerunfailures 用例失败后重跑 pytest-html (生成html格式的自动化测试报告)
- allure-pytest 用于生成美观的测试报告
2、快速入门
2.1、Pytest约定
模块名必须以test_开头或者_test结尾
测试类必须以Test开头,并且不能有init方法
测试方法必须以test开头
2.2、安装依赖
安装插件时可以通过将要安装的插件卸载requirements.txt中进行快速进行安装
2.3、运行方式
main.py
import pytest
if __name__ == '__main__':
# pytest.main()
test_demo1.py
class Test_Demo1_C1:
def test_01(self):
print("hello world!")
test_demo2.py
class Test_Demo1_C2:
def test_02(self):
print("hello world!2")
test_demo3.py
class Test_Demo1_C3:
def test_03(self):
print("hello world!3")
test_demo4.py
class Test_Demo1_C4:
def test_04(self):
print("hello world!4")
test_demo5.py
class Test_Demo1_C4:
def test_05(self):
print("hello world!5")
test_demo7.py
import time
class Test_Demo1_C6:
def test_06(self):
time.sleep(5)
print("hello world!6")
class Test_Demo1_C7:
def test_07(self):
time.sleep(5)
print("hello world!7")
test_demo8.py
import time
class Test_Demo1_C8:
def test_08(self):
time.sleep(5)
print("hello world!8")
test_demo9.py
class Test_Demo1_C9:
def test_09(self):
print("hello world!9")
def test_10(self):
print("hello world!10")
def test_11(self):
print("hello world11")
assert 1 != 1
def test_12(self):
print("hello world12")
1、主函数模式
运行所有
import pytest
if __name__ == '__main__':
pytest.main()
指定包运行
import pytest
if __name__ == '__main__':
pytest.main(["./pytest-demo"]) # 运行指定包
指定模块运行
import pytest
if __name__ == '__main__':
pytest.main(["./pytest-demo1/test_demo3.py"]) # 运行指定模块
pytest.main(["./pytest-demo1/test_demo3.py","./pytest-demo1/test_demo4.py"])
指定nodeid运行
import pytest
if __name__ == '__main__':
pytest.main(["./pytest-demo1/test_demo5.py::Test_Demo1_C5::test_05"]) # 运行指定nodeid
2、命令行模式
运行所有
pytest
指定包运行
pytest ./pytest-demo
指定模块运行
pytest ./pytest-demo/test_demo3.py
pytest ./pytest-demo/test_demo3.py ./pytest-demo1/test_demo4.py
指定nodeid运行
pytest ./pytest-demo1/test_demo5.py::Test_Demo1_C5::test_05
4、参数详解
-s:输出调试信息,包括print打印的信息
-v:详细的信息
-vs:详细的信息,输出调试信息,包括print打印的信息
-n:多线程(在命令行中-n参数分割符为空格,主函数中-n参数分隔符为=)
–reruns:失败重试(在命令行中–reruns参数分割符为空格,主函数中–reruns参数分隔符为=)
-k:运行带指定关键字的