pytest-简单使用

单元测试框架和自动化测试框架有什么区别

  • 什么是自动化测试框架及作用
    • 提高测试效率,降低维护成本
    • 减少人工干预,提高测试的准确性,增加代码的重要性
    • 核心思想是让不懂代码的人也能够通过这个框架去实现自动化测试
  • pytest单元测试框架和自动化测试框架的关系
    • 单元测试框架:只是自动化测试框架中的组成部分职之一
    • pom设计模式:只是自动化测试框架中的组成部分之一
    • 数据驱动
    • 关键字驱动
    • 全局配置文件的封装
    • 日志监控
    • selenium,requests二次封装
    • 断言
    • 报告邮件
    • 更多。。。。

putest简介

  • pytest是一个非常成熟的python的单元测试框架,比unittest更灵活,更容易上手
  • pytest可以和selenium,appium,requests,结合实现web自动化,接口自动化,app自动化
  • pytest可以实现测试用例的跳过以及reruns失败用例重试
  • pytest可以和allure生成非常美观的测试报告
  • pytest可以和jenkins持续集成
  • pytest有很多非常实用的插件
pytest
pytest-html			生成html格式的测试报告
pytest-xdist			测试用例分布式执行,多CPU分发
pytest-ordering		用于改变测试用例的执行顺序
pytest-rerunfailures  	用例失败后重试
allure-pytest			用于生成美观的测试报告

依赖包名,写入requirements.txt中 通过 pip instail -r requirements.txt #导入所需要的插件

pip instail -r  requirements.txt
pytest --version #验证是否安装成功

使用pytest,默认的测试用例的规则以及基础应用

  • 模块名必须test_开头或者_test结尾
  • 测试类必须以Test开头,不能有__init__方法
  • 测试方法必须以test开头

pytest测试用例的运行方式

主函数模式

  • 运行所有用例
if __name__ == '__main__':
    pytest.main()
  • 指定模块
    在main方法中传同一目录下文件名称,
if __name__ == '__main__':
    pytest.main(["-vs","test_01.py"])
  • 指定目录
    在工程目录下创建all.py,main方法,要不找不到路径
if __name__ == '__main__':
    pytest.main(["-vs","./test"])
  • 通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成
if __name__ == '__main__':
    pytest.main(["-vs","./test/test_01.py::Test001::test_01"])

命令行模式

//运行所有
pytest   
//指定模块
pytest -vs  test_01.py 
//指定目录
pytest -vs ./test 
//通过nodeid指定用例运行
pytest -vs ./test/test_01.py::Test001::test_01 

参数详解

  • -s : 表示输出调试信息,包括print打印的信息
  • -v : 显示更详细的信息
  • -vs : 这两个参数可以一起使用
  • -n : 支持多线程或者分布式运行测试用例
    • 如:
      命令行模式:pytest -vs pytest.mian -vs ./test/test01.py -n 2
      主函数模式:pytest.mian(["-vs","./test/test01.py::函数名","-n=2"])
  • --reruns NUM : 失败用例重跑
    • 如:
      命令行模式:pytest -vs pytest.mian -vs ./test/test01.py --reruns 2
      主函数模式:pytest.mian(["-vs","./test/test01.py ::函数名","--reruns=2"])
  • -x : 表示只要一个用例报错,那么测试停止。
  • --maxfail=失败个数 : 出现用例失败个数与设置值相等就停止
  • -k : 根据测试用例的部分字符串指定测试用例
    • 如:pytest -vs ./interface_testcase -k "ao"
  • --html : --html ./report/report.html : 生成html的测试报告

通过pytest.ini配置文件运行

  • pytest.ini : 这个文件它是pytest单元测试框架的核心配置文件
    • 位置:一般放在项目的根目录
    • 编码:必须是ANSI,可以使用notpad++修改编码格式
    • 作用:改变pytest默认的行为
    • 运行的规则:不管是主函数的模式运行,命令行运模式运行,都会去读取这个配置文件
[pytest]
#命令行参数,这里--alluredir ./temp表示生成allure报告的临时目录文件夹,-s表示显示
addopts= -vs --html ./report/report.html				#命令行的参数,用空格分隔
testpaths= ./testcase		#测试用例的路径
pyhon_fies= test_*.py		#模块名的规则
python_classes = Test*		#类名的规则
pyhon_functions =test		#方法名的规则
markers = 				#表示分组
    smoke:冒烟测试		#mark装饰器分组名称
    usermanage:用户管理模块

pytest执行测试用例的顺序是怎么样的呢?

uinttest :ascll码的大小来绝对执行用例的顺序
pytest:默认从上到下
改变默认的执行顺序,使用marik装饰器
@pytest.mark.run(order=3)

如何分组执行(冒烟,分模块执行,分接口的web执行)

smoke:冒烟用例,分布在各个模块里面
pytest -vs -m "smoke"
pytest -vs -m "smoke or usermanage"

pytest跳过测试用例

  • 无条件跳过
@pytest.mark.skip(reason="")
  • 有条件跳过
@pytest.mark.skipif(age>18,reason="")