python 之 pytest框架

一、pytest 单元测试框架

1、什么是单元测试,针对软件的最小单位(函数,方法,接口)进行正确性的检查测试。

 

2、单元测试框架(按语言分)

java : junit 和testing

python : unittest 和 pytest

 

3、单元测试主要是做什么呢?

(1)、测试发现:从多个文件里面去找到测试用例

(2)、测试执行:按照一定的顺序和规则去执行。并生成结果

(3)、测试判断:通过断言判断预期结果和实际结果的差异

(4)、测试报告:测试统计进度,耗时,通过率,生成测试报告

 

二、pytest简介

1、pytest是一个非常成熟的python的单元框架,比unittest更灵活,容易上手。

2、pytest可以和selenium,requests,applum结合实现web自动化,接口自动化,app自动化

3、pytest可以实现测试用例的跳过以及reruns失败用例重试

4、pytest可以和allure生成非常美观的测试报告

5、pytest可以和Jenkins持续集成

6、pytest有很多强大的插件,并且这些插件能够实现很多的使用的操作

例如:

pytest

pytest-xdist                -- 测试用例分布式执行,多CPU分发

pytest-ordering          -- 用于改变测试用例的执行顺序

pytest-rerunfailures   -- 用例失败后重跑

pytest-html                -- 生成html格式的自动化测试报告

allure-pytest              -- 用于生成美观的测试报告

 

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

1、模块名必须以test_开头或者_test结尾

2、测试类必须以Test开头,并且不能用init方法

3、测试方法必须以test开头

 

四、pytest 测试用例的运行方式

1、主函数模式

(1)运行所有:pytest.main()

(2)指定模块:pytest.main(['-vs','test_login.py'])

(3)指定目录:pytest.main(['-vs','/interface'])

(4)通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成

pytest.main(['-vs','/interface/test_login.py:test_01'])

 

2、命令行模式

(1)运行所有:pytest

(2)指定模块:pytest -vs test_login.py

(3)指定目录:pytest -vs /interface

参数详解:

-s:表示输出调试信息,包含print打印的信息

-v:显示更多的信息

-vs:上面两个参数一起用

-n:支持多线程或者分布式运行测试用例

例:pytest -vs /interface/test_login.py -n 2 (分两个线程)

--reruns num:失败用例重跑(num重跑次数)

-x:表示只要一个用例报错,测试停止

--maxfail=2 出现两个用例失败停止

-k:根据测试用例的部分字符串指定测试用例

例:pytest -vs 。/interface -k "ao"

--html ./interface/interface.html:在interface目录下生成html的测试报告

 

3、通过读取pytest.ini配置文件运行

pytest.ini文件是pytest单元测试框架的核心配置文件

(1)、位置:一般在项目的根目录

(2)、编码:必须是ANSI,可以使用notpad++修改编码格式

(3)、作用:改变pytest默认的行为

(4)、运行的规则:不管是主函数模式运行,命令行模式也能行,都会去读取这个配置文件

例:

[pytest]
addopts = -vs --html ./report.html -- 参数
testpaths = ./web -- 测试用例路径
python_files = test_*.py -- 模块名的规则
python_classes = Test* -- 类名的规则
pythonn_functions = test -- 方法名规则
markers = -- 标记用例
smoke:冒烟测试


五、pytest 用例的执行顺序是怎么样的?
unittest 以ASCLL的大小来执行
pytest默认从上到下
改变默认执行顺序,就用mark标记
例:@pytest.mark.run(order = 3)


六、如何分组执行(冒烟,分模块执行,分接口和web执行)
smoke:猫眼用力,分布在各个模块
pytest -m "smoke"                -- 就会执行带有smoke标记的模块
pytest -m "smlke or smoke ir smoke2"     -- 执行多个


七、pytest跳过测试用例
1、无条件跳过
  @pytest.mark.skip(reason = "单纯想跳过")
2、有条件跳过
@pytest.mark.skip(age>18,reason = "跳过年纪大于18的")














posted @ 2024-08-16 14:07  进步的桃白白  阅读(31)  评论(0编辑  收藏  举报