pytest-基础

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

1.模块名字必须已test_开头或者_test结尾

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

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

示例代码 test_001.py

python 复制代码
import pytest
class TestCase:
    def test_case(self):
        print("执行测试用例")

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

主函数模式:

运行所有:pytest.main()

运行指定的模块:pytest.main(['-vs',模块名.py])

运行指定目录:mytest.main(['-vs','目录路径'])

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

·类外的用例通过pytest.main(['-vs','模块路径::方法名'])

·类内的用例:pytest.main('-vs','模块路径::类名::方法名')

命令行模式:

·运行所有:pytest

·运行指定模块:pytest -vs 目录路径

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

·类外的用例:pytest -vs 模块名::方法名

·类内的用例:pytest -vs 模块路径::类名::方法名

pytest.ini配置文件模式

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

位置:必须放在项目的根目录

编码格式,必须使用ANSI格式,可用notepad++等工具修改、

作用:改变pytest默认的行为

运行的规则:主函数模式和命令行模式都会读取这个配置文件

配置文件实例:

python 复制代码
[pytest]
#命令行参数,用空格分割
addopts = -vs
#测试用例文件,可以自己配置,...../testcase为上已成的testcase文件夹
testpaths = ../testcase
#配置测试搜索的模块文件名称
pytest_files = test*.py
#配置测试搜索的测试类名
pytest_classes = Test*
#配置测试搜索的测试函数名
pytest_funtions = test

以上为示例代码,用的时候需要把中文去掉,使用ANSI编码格式保存

参数详解:

·-s:输出调试信息,包括print打印的信息

·-v:显示更多详细的信息

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

·主函数模式:pytest.main('-vs','模块名.py','-n=2')--->调用两个线程执行

命令行模式:pytest -vs 模块名.py -n 2

如果有5条用例用两个线程

线程一:1,3,5

线程二:2,4条

·--reruns:失败用例重跑

主函数模式:pytest.main(['-vs','模块名.py','-n=2','--reruns=2'])

命令行模式:pytest -vs 模块名.py -n = 2 --reruns=2

失败后重跑两次

·-x:遇到报错测试用例则立即停止测试

·--mafail:遇到指定个数用例失败就停止测试

主函数模式:pytest.main(['-vs','模块名.py','--maxfail=2'])

命令行模式:pytest -vs 模块名.py --mafail=2

· -k:根据测试用例名称内的部分字符串指定执行测试用例

主函数模式:pytest.main(['-vs','模块名.py','-k=xx'])

命令行模式:pytest -vs 模块名.py -k= 'xx'

·--html:生成原生html测试的报告

主函数模式:pytest.main(['-vs','模块名.py','--html=报告路径'])

命令模式:pytest -vs 模块名.py --html '报告路径'

·-vs:综合 -s,-v功能

分布式

使用pytest-xdist分布式测试执行测试用例

参数-n auto :可以自动检测系统的CPU核数

注意:使用auto等于利用了所有CPU来跑用例,此时CPU占用率会特别高。如果指定核数可将auto替换为具体的数字

分布式执行在根目录下输入执行命令:pytest -s -v -n auto,

三、pytest的测试执行循序

·unittest的执行顺序:默认按照ASCII表的顺序执行测试用例

·pytest的执行顺序:默认按照从上到下的顺序执行测试用例

改变pytest的默认执行循序:使用mark中装饰器

python 复制代码
@pytest.mark,run(order=3)

四、如何分组执行(冒烟,分模块执行,分接口或者ui执行)

smoke:莫言用例,分布在各个模块里面

步骤一:在pytest.ini配置文件内添加配置信息:markers

python 复制代码
[pytest]
addopts = -vs
testpaths = ../testcase
python_files = test*.py
python_classes = Test*
python_functions = test
markers =
smoke:冒烟
g1:组一
g2:组二

步骤二:给测试函数添加装饰器@pytest.mark.smoke

步骤三:执行测试用例:

主函数模式:pytest.main(['-vs','模块名.py','-m=smoke'])

命令行模式:pytest -vs -m 'smoke'

注意:此处的smoke不是固定的,可以自己定义标记名称

如果想执行多个标记的用例:pytest -vs -m '标记1' or '标记2'

五、pytest跳过测试用例

无条件跳过:

添加装饰器:@pytest.mark,skip(reason = "跳过原因")

有条件跳过:

添加装饰器:@pytest.mark.skipif(表达式,reason = '跳过原因')

注意:此处的表达式得到的应该是一个布尔类型,表达式成立则跳过,否则执行测试用例

六、断言

在pytest框架中使用assert进行断言

示例代码

python 复制代码
class TestCase:
# 测试用例
def test_case(self):
print("执行测试用例")
# 断言:语法assert 表达式
assert 1 == 2

注意:assert后面的表达式需要返回布尔值类型,True为测试用例通过,False为用例失败

相关推荐
小码哥说测试2 天前
Selenium+Pytest自动化测试框架 ------ 禅道实战
自动化测试·软件测试·selenium·测试工具·单元测试·pytest·接口测试
m0_371356152 天前
【测试框架篇】单元测试框架pytest(2):用例编写
单元测试·pytest
m0_371356152 天前
【测试框架篇】单元测试框架pytest(3):用例执行参数详解
单元测试·pytest
linda_06073 天前
【Allure】mac下环境配置
pytest
七灵微3 天前
【测试】【Debug】vscode pytest 找不到测试用例测试文件 行号部位没有绿色箭头
pytest
防御塔策略4 天前
pytest简单使用
python·单元测试·pytest·hook·fixture·mark
MJH8275 天前
Pytest参数详解 — 基于命令行模式!
自动化测试·软件测试·经验分享·python·职场和发展·pytest·postman
可遇_不可求5 天前
pytest插件精选:提升测试效率与质量
pytest
七灵微5 天前
【测试】【Debug】pytest运行后print没有输出
pytest
qq_433716957 天前
测试分层:减少对全链路回归依赖的探索!
自动化测试·软件测试·功能测试·测试工具·回归·pytest·postman