数据驱动测试
数据文件,驱动用例执行数量、内容
1 | a,b,c |
1 |
|
夹具fixture
夹具:在用例执行之前、执行之后,自动运行代码
场景:
- 之前:加密参数 / 之后:解密结果
- 之前:启动浏览器 / 之后:关闭浏览器
- 之前:注册、登陆账号 / 之后:删除账号
1.创建fixture
1 |
|
- 创建函数
- 添加装饰器
- 添加
yield
关键字
2. 使用fixture
- 在用例的参数列表中,加入fixture名字即可
- 给用例加上
usefixture
标记
1 | def test_1(f): |
3. 高级用法
自动使用
1
2
3
4
5
6
7
8
9
10
11
12
13
def f():
print(datetime.now(), '用例开始执行')
# yield以上的内容为执行用例的前置操作
yield # 开始执行用例
# yield以下的内容为执行用例的后置操作
print(datetime.now(), '用例执行完毕')
def test_1():
pass
def test_2():
pass依赖使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def ff():
print("我也是fixture,但是被fixture使用")
def f(ff):
print(datetime.now(), '用例开始执行')
# yield以上的内容为执行用例的前置操作
yield # 开始执行用例
# yield以下的内容为执行用例的后置操作
print(datetime.now(), '用例执行完毕')
def test_1():
pass
def test_2():
pass返回内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def ff():
print("我也是fixture,但是被fixture使用")
def f(ff):
print(datetime.now(), '用例开始执行')
# yield以上的内容为执行用例的前置操作
yield 1234 # 开始执行用例
# yield以下的内容为执行用例的后置操作
print(datetime.now(), '用例执行完毕')
# 从python的语法看,函数中可以有多个yield,但是pytest框架中只能有一个,后续的将被丢弃
def test_1(f):
print('收到fixture传递的数据', f)
def test_2():
pass范围共享
当做web自动化时,打开浏览器需要3~6秒的时间,如果有上千条用例需要打开浏览器这一步操作,重复使用会导致不必要的时间浪费,因此把第一条用例打开的浏览器共享给后者则显得尤为重要。
默认范围:function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def ff():
print("我也是fixture,但是被fixture使用")
def f(ff):
print(datetime.now(), '用例开始执行')
# yield以上的内容为执行用例的前置操作
yield 1234 # 开始执行用例
# yield以下的内容为执行用例的后置操作
print(datetime.now(), '用例执行完毕')
# 从python的语法看,函数中可以有多个yield,但是pytest框架中只能有一个,后续的将被丢弃
def test_1(f):
print('收到fixture传递的数据', f)
def test_2():
pass全局范围:session
- 让不同文件可以共享夹具可以使用
conftest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# conftest.py
def ff():
print("我也是fixture,但是被fixture使用")
def f(ff):
print(datetime.now(), '用例开始执行')
# yield以上的内容为执行用例的前置操作
yield 1234 # 开始执行用例
# yield以下的内容为执行用例的后置操作
print(datetime.now(), '用例执行完毕')
# 从python的语法看,函数中可以有多个yield,但是pytest框架中只能有一个,后续的将被丢弃
def test_1(f):
print('收到fixture传递的数据', f)
def test_2():
pass- 让不同文件可以共享夹具可以使用
插件管理
插件分成两类:
- 不需要安装:内置插件
- 需要安装:第三方插件
插件的启用管理:
- 启用:
-p abc
- 禁用:
-p no:abc
插件的使用方式:
- 参数
- 配置文件
- fixture
- mark
常用第三方插件
1. pytest-html
用途:生成HTML测试报告
安装:
1 | pip install pytest-html |
使用:
1 | pytest --html=report.html --self-contained-html |
可以在pytest.ini文件中添加如下参数
注意:在终端执行时的路径需要能够发现pytest.ini文件
:
1 | [pytest] |
2. pytest-xdist
用途:分布式执行
安装:
1 | pip install pytest-xdist |
使用:
1 | -n N |
只有在任务本身耗时较长,超出调度成本很多的时候才有意义。
分布式执行,有并发问题:资源竞争、乱序
3. pytest-rerunfailures
用途:用例失败之后重新执行(网络不通、UI渲染等场景)
安装:
1 | pip install pytest-rerunfailures |
使用:
1 | --rerurns 6 --reruns-delay 2 |
4. pytest-result-log
用途:把用例执行结果记录到日志文件中
安装:
1 | pip install pytest-result-log |
使用(报错编码问题请删除注释):
1 | log_file = ./logs/pytest.log_file |
企业级测试报告
allure是一个测试报告的框架
安装:
1 | pip install allure-pytest |
配置:
1 | addopts = --alluredir=temps --clean-alluredir |
生成报告:
1 | allure generate -o report -c temps |
一键执行:
1 | #main.py |
allure支持对用例分组和关联(敏捷开发术语)
1 | @allure.epic 史诗 项目 |
使用相同装饰器的用例,自动并入一组
1 |
|