1. 环境(pytest 和allure 环境)
1. pip intall pytest------ pip show pytest
2. pip install pytest-sugar --命令行运行更好看
3. pip install pytest-html 原生态报告模板
4. pip install allure-pytest
5. allure的压缩包解压后配置环境变量-----能够执行allure命令

1. pytest 框架
用例编写规则:三test
“三test“ : test**.py Test***类 test***方法
用例运行
两种运行模式(在setting—tools—python Intergrated Tools)
1.Pytest运行模式:
点击小箭头即可运行、右键run运行也可以(pytest模式下不会执行到mian下的代码)

unitest运行模式:
- 可以执行到main下的代码,通过pytest.main来收集用例并执行,并生成报告
- pytest.main([__file__]) # __file__ 表示当前目录
- pytest.main(['test_***.py', '-s' ]) # -s为打印信息,如有print就会打印出来
- pytest.main(['test_***','-s','--alluredir', '../report/tmp']) # 生成报告 + 报告路径
- pytest.main(['test_login.py','-s','--alluredir','../report/tmp','--clean-alluredir']) # 清空之前的报告 +再生成报告
- pytest.main(['test_***','-s','--alluredir', '../report/tmp']) # 生成报告 + 报告路径
- pytest.main(['test_***.py', '-s' ]) # -s为打印信息,如有print就会打印出来
- pytest.main([__file__]) # __file__ 表示当前目录
除了使用 --clean-alluredir 参数清空之前的报告文件,还可以使用如下笨方法

打开报告的两种方法
打开报告方式1:启动allure服务
allure serve “报告路径” (推荐)

打开报告方式2:生成html文件等报告文件
allure generate “报告路径” –o“生成html的路径” –-clean (clean表示清除之前html)
方式2的好处,通过浏览器看报告时,路径时没有变化的。但也只能看最新的。

24年8月4日, --clean的参数需要改成下面这样才能生效了,而且可以不指定路径,他好像是自己在当前目录建了一个 allure-report的文件


os.system(f'allure generate {report_path} "--clean" "-o" {allure_html_path}')
命令行运行
命令行运行的参数和unittests模式下main中的写法类似,参数是一样的
pytest test_***.py –s

命令行运行,做一个bat用例文件
或者直接这么写,也能删除
cd ./testCase
pytest -s --alluredir ../outFiles/report/tmp --clean-alluredir
allure serve ../outFiles/report/tmp
用例运行筛选
用例筛选执行 -m
装饰器的 跳过 ,skip
在回归测试里面,开发修改了一个业务的bug,需要对部分接口做业务测试,就可以筛选出对应的业务模块的接口
mark标签
- 模块、类、方法都可以加上标签
- 定义:@pytest.mark.shop_list
- 运行时 pytest -s -m 标签名 pytest,main(['---.py','-m','标签名'])

给测试类,方法打标签,执行标签运行deselected表示未选中的用例数
打了标签之后,会出现一些警告,pytest不认识这些标签
- 工程目录下,新建pytest.ini
- 插件下载 setting plugins 搜索 ini (安装后才有图标)

pyttest.ini中定义标签,让pytest认识标签,解除警告
-m的其他用法

-k(推荐)
-k, -v

如果想在接口下,再筛选具体的用例,利用读取excle来筛选
pass-50期
补充,根据allure的级别来运行
但要先提前指定,用@allure.serverity('') 来指定

skip装饰器跳过
pytest中的跳过用例---------记录在面试题回答里
命令行中,运行时 -s,改成 rs,会更好的展示原因(命令窗口中)
在自动化测试过程中,会遇到功能阻塞,功能未实现,就可以用跳过 skip 用例,这样可以IBU用注释掉 或者删除掉, 特别是在ui自动化中,执行一个用例需要几十秒时间
并且设置跳过 在allure报告中是可以看见的,是置灰的
无条件的跳过
@pytest.mark .skip(renson='列出接口后端没有实现,暂时不运行')
有条件的跳过
@pytest.mark .ifskip(2>1,renson='列出接口后端没有实现')
前面是表达式,如果为真,就跳过
工作中,可以把装饰器定义成变量,其他地方可以快速写

skipif的用法:


用例筛选工作中实际用法,使用run文件跑部分业务
比如要运行单个某个业务模块(商铺)
1. 可以写 一个run.py文件 ,运行时,用 python run.py
(1) 每次运行时改配置文件
cd 到这个testCase
pytest -s -m shop_list
2. 写个bat文件 (每次运行都需要改文件)

初始化和清除
使用介绍
自动化用例尽量保证用例和用例之间没有关系,都能单独运行,所有要设置初始化和清除
方式1:setup 和 teardown (方法级别、类级别、模块级别)

方式2:@pytest.fixture() 装饰器,更加灵活,可以设置范围,可以部分用例使用
注:
1. scope有function(默认) class module(一个.py) package/session
(1) module , package/session 都是写在conftest.py中的
(2) package代表包 seesion代表能共享conftest的所有文件,和package差不多
2. 方式2的优先级优先于方式1,如下面的例子中方式2的function范围可以看出
3. 当方式2,不是自动调用时autouse=Flase 默认的,有两种调用方式,如下图
4. 当初始化有返回值时,不能用@pytest.mark.usefixtures("**") 方式
5. conftest.py 中的方式2 优先于 用例中的方式2
6. 把方式2的初始化和清除写在conftest.py中,(共享的初始化清除)
yield区分是初始化还是清除,并且可以用来返回值


1.手动调用pytest的fixture两种方式(autouse为False的时候)

方式1:可以使用usefixtures装饰器
方式2:也可以直接把 初始化函数名当成参数传个用例(适用有返回值的)(如下图)

2.pytest的fixture (默认是function)更优先unittest的 setup和teardown
autouse 参数的用法

conftest特点
优先级:conftest中的fixture优先于py文件中的fixture

作用域:conftest文件是有作用域的,内层的用例能调到外层的fixture

以前的使用场景
不同项目下,都有个conftest,写了module前置登录自己项目,然后存token等

也可以利用 setup_class(self): 初始化实现登录,可做特殊账号的登录

针对用例做的初始化,一般设置为function范围,自己调用

pytest自带的数据驱动(参数化)
使用介绍
可以将数据,传入用函数中
格式: [[],[],[]] 或者 [(),(),()]

使用过的场景
可以获取excle中的每行用例,然后一个数据得到一个字典,传给用例


重复执行查看稳定性
@pytest.mark.repeat(2) # pip install pytest-repeat #
pytest的断言
使用pytest.assume(a == b)断言,断言失败后后续代码还能继续跑 pip install pytest-assume
写法2: with pytest.assume:
3. allure库及jinkens的allure插件的应用
环境:
1.下载allure.zip ,解压,把\bin目录添加到环境变量path---能使用allure 命令
2.pip install allure-pytest
(1) allure的装饰器介绍
1.@allure.description_html 可以添加html标签

2.@allure.description() 这种,直接加字符串
3.allure.attach()
a.可用来在报告中显示执行结果: 两个方式,推荐下面的方式
allure.attach( "{0}".format(res),"用例结果")
allure.attach(f"{res}", "其他变量或字符串", allure.attachment_type.TEXT)


b.展示图片、mp4等
allure.attach(file,"附件名字",allure.attachment_type.JPG)


4.标题层级
@allure.epic("电子证照")
@allure.feature("电子驾驶证")
@allure.story("车辆选择列表")
@allure.title("{inData[testPoint]}") 双引号中用 大括号
其中@allure.title 可以用变量,其他暂时没发现可以, 可以用另一个方式在方法中写
allure.dynamic.title(title)
如:以上inData是一个字典,注:[]中不要写引号
5.with allure.step("支付"): 可以给步骤取名字,可以对一些流程用例的

也可以在某个方法上面写 装饰器 (这样可以展示参数)


补充,但不怎么用,
写allure.dynamic.severity("minor") 设置标签,不设置是normal
或者装饰漆@allure.serverity()
应用


pytest结合allure来用例进行过滤

309

被折叠的 条评论
为什么被折叠?



