一、pytest_ini 文件
1、通过 pytest.ini配置文件运行的规则
2、位置 : pytest.ini文件一般放在项目的跟目录
3、编码方式必须是 ANSI 可以使用 nodepade++修改编码方式(或者在pychaem右下角将文件格式改为GBK)
4、作用 可以修改pytest的默认的行为规则
5、运行规则: 不管是主函数的模式运行,还是命令行的模式运行,都会去读取这个配置文件
文件内容:
[pytest]
#m命令行参数
addopts = -vs -m 'smoke or sign'
#指定测试用例的文件夹
testpaths = ./vip_pytest_one/testcases/
#改变默认的模块规则
python_files = test_*.py
#改变默认的类规则
python_classes = Test*
#改变默认的用例规则
python_functions = test_*
#改变默认的基础路径
#pytest_base_url = ""
#用例标记分组定义标记
markers =
smoke:冒烟测试
product_manager:商品管理
user_manager:用户管理
sign:注册
二、如果通过pytest进行冒烟测试
如何分组执行(冒烟、分模块执行)
smoke :冒烟用例 分布在各个模块里面
1、需要在用例上面标记 @pytest.mark.smoke
2、需要在pytest.ini中 添加配置 markers 标记
markers =
smoke:冒烟测试
product_manager:商品管理
user_manager:用户管理
sign:注册
3、在测试用例中去用@pytest.mark.XXX去调用这个标记(注意先标记才能使用)
最好间一个文件夹 testcases/ 在下面存放测试用例的各个模块(test_api.py)
pytest规定模块名必须test_ 开头
import pytest
class Testapi:
#使用标记之前必须到先在pytest.ini文件中定义标记
@pytest.mark.smoke
def test_01_login(self):
print("登录")
@pytest.mark.sign
def test_02_singn(self):
print("注册")
4、添加冒烟测试或者分模块执行,怎么运行,在pytest.ini中配置命令行参数 -m 多个标记执行用 or 分开
[pytest]
#m命令行参数
addopts = -vs -m 'smoke or sign'
也可以在命令行中直接执行被标记的
pytest -vs -m “smoke”
pytest -vs -m “usermanage”
pytest -vs -m “smoke or usermanage”
5、运行,通过主函数来执行
建一个 run.py文件放在根目录下面,敲入一下代码,会先调用 pytest.ini配置文件,从而判断执行那些测试用例,或者模块, 以及执行的参数, 执行的顺序, 冒烟测试 等等
import pytest
if __name__ == '__main__':
pytest.main()
三、、pytest执行测试用例的顺序
unittest : asccil
pytest : 从上到下执行
(1)如果在pytest不想从上倒在执行怎么办?
通过添加标记装饰器去执行: 在每一个用例(函数test_)的上一行 添加
@pytest.mark.run(order=num)
(2)pytest跳过测试用例
1、无条件跳过
@pytest.mark.skip(reason="XXX")
2、有条件跳过
@pytest.mark.skipif(age>=18,reason='已成年')
import pytest
class Testapi:
def test_01_login(self):
print("登录2")
#标记执行的顺序
@pytest.mark.run(order=1)
def test_02_sign(self):
print("注册2")
四、pytest测试用例胡前后置(夹具)
pytest框架实现的一些前后置(固件,夹具)的处理,常用三种
注意: 和unittest不同的是定义的前后置方法都是小写
def setup_class(self): //在每一个类执行之前的初始化工作 :比如创建日志,创建数据库对象
def setup(self): // 在执行每个测试用例之前的初始化的代码: 打开浏览器 加载网页
def test_01_baili(self)://用例
def teardown(self): //在执行测试用例之后的测试的收尾工作
def teardown_class(self) //在每个类执行之后的扫尾工作 ,比如销毁日志对象 ,销毁数据库链接
2、更灵活的实现前后置的方法:
使用@pytest.fixture()装饰器实现部分用例的前后置, 也可以实现全部用例的前后置
@pytest.fixture(scope=“”,params=“”,autouse=“”,name=“”)
(1)scope:表示的是被@pytest.fixture标记的方法的作用域 function(默认) ,class, module,package/session
(2)params :参数化 支持的数据格式: list dict tuple 字典列表【{},{},{}】 字典元组({},{})
(3)autouse=True :自动使用 默认Flase
(4)ids:当使用params参数化时候,给每一个值设置一个变量,意义不大
(5)name:表示的是给我们被标记的 @pytest.fixture 标记的方法取一个别名 ,如果定义了别名,调用的时候,原来定义的夹具方法名字就不再可用
实现参数化要注意: fixture:夹具
@pytest.fixture(scope='function',params=['1','2','3'])
def my_fixture(request):
print("前置")
yield
print("后置")
return request.param //注意在一个函数里面 yiled后置和 返回参数不能公用
以下写法ok
@pytest.fixture(scope='function',params=['1','2','3'])
def my_fixture(request):
print("前置")
return request.param
规则:参数列表传递个给 request、 每次执行返回一个参数 ,有几个参数则被执行几次
@pytest.fixture(scope='function',params=['1','2','3'])
def my_fixture(request):
print("前置")
yield request.param
print(“后置”)
规则:return 和yeield 都表示返回的意思,但是return 后面不能有代码,yield返回后可以接代码
3、conftest.py和@pytest.fixture() 结合使用实现全局的前置应用 (比如项目全局登录,模块的全局处理 )
1、conftest.py 文件是单独存放的一个夹具配置文件,名称是不能改的
2、用处是可以在不同的py文件中 使用同一个fixture函数
3、原则上 contest.py 需要和运行的用例放到同一层里面,并且不需要做任何的导入文件的操作
总结:
setup/teardown ,setup_class/teardown_class 他是作用域所有的用例和所有的类
@pytest.fixture() 他的作用不是既可以部分也可以全局后置
confest.py和 @pytest_fixture() 结合使用,作用于全局的前后置
五、断言不写笔记了
六、pytest结合allure-pytest插件生成allure测试报告
1、pytest-html
2、allure-pytes
allure-pytes 下载 ,解压 ,配置path路径
1、下载 : allure-2.13.7 zip 找到此报的bin的路径 配置到path路径下面
系统属性 高级 环境变量 系统变量 path 将bin路径配置到最前面
验证 : allure --version
doc验证
pycharm验证
问题 doc可以验证 但是pycharm验证失败 需要重启pycharm
2、生成 json格式的临时报告
在pytest.ini
[pytest]
addopts = -vs --alluredir ./temp
3、
3、生成allure报告
在all.py
if__name_=='__main__'
pytest.main()
os.system('allure generate ./temp -o ./report --clean') // ./temp 找到json临时报告 -o 表示ouput输出 --clean 表示生成报告之前先清空之前的报告