Python Pytest自动化测试 fixture与fixture互相调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Pytest自动化测试 fixture与fixture互相调用相关的知识,希望对你有一定的参考价值。

参考技术A

一个用例可以传多个 fixture 参数,如果 fixture 之间用依赖关系,也可以互相调用。

如果用例需要用到多个 fixture 的返回数据, fixture 也可以 return 一个元组、list 或字典,然后从里面取出对应数据。

当然也可以分开定义成多个 fixture ,然后 test_ 用例传多个 fixture 参数。

fixture 与 fixture 直接也能互相调用的。

好啦,以上内容就到这里,如果你对Python自动化软件测试、实例练习题、面试题感兴趣可以加入我们一起学习175317069。有各项学习资源,更有行业深潜多年的技术人分析讲解。

最后希望看到这里的你终会成为一名极具竞争力的高级测试工程师。

pytest自动化测试框架详解+mark标记+fixture夹具

介绍

pytest是python的一种单元测试框架,同自带unittest框架类似,功能,效率更强大

特点:

1. 非常容易上手,入门简单,丰富的文档
2. 支持参数化
3. 执行测试用例的过程中,跳过某些用例,标记失败的用例
4. 支持重复执行失败的用例
5. 便于管理用例,方便和持续集成工具一起集成,便于生成测试报告
6. 有很多的第三方插件,并且可以随意自动以扩展

一,pytest详解及常用的插件的安装

pytest-html(生成html报告)

pytest-xdist(多线程运行)

pytest-ordering(控制用例的执行顺序)

pytest-rerunfailures(失败用例重跑)

allure-pytest(生成allure报告)

pytest-base-url(管理基础路径)

pytest(框架本身)

首先会在项目线面新建一个:requirements.txt 文件

把以上插件配置放在文件当中

输入安装命令:

pip install - r requirements.txt

二,pytest默认的测试用例的规则

1,模块名(文件名py)必须要以test开头或者test结尾

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

3,测试用例必须也要以test开头

三,pytest三种执行方式

1,命令行执行:pytest

2,使用主函数执行:新建一个run文件

```python
import pytest

if __name__ == '__main__':
    pytest.main()
```

3,通过pytest.ini全局配置文件执行

```python
[pytest]
# 输出格式内容
addopts = -vs
# 指定测试用例的文件夹
testpaths = ./testcases
# 指定的模块规则
python_files = test_*.py demo_*.py
# 修改默认的类规则
python_classes = Test* Demo*
# 修改默认的测试用例规则
python_functions = test_* demo_*
```

**注意事项:如果全局配置文件写入了中文,那么记得右下角修改编码格式(utf-8改成gbk)**

四,pytest标记跳过测试用例

无条件跳过

```python
@pytest.mark.skip(reason="版本原因")
def test_02(self):
    print("这是第2条登录测试用例")
```

有条件跳过

```python
@pytest.mark.skipif(2>10,reason="反例跳过")
def test_03(self):
    print("这是第3条登录测试用例")
```

注意:条件成立跳过,条件不成立就执行

五,pytest控制测试用例的执行顺序

默认情况是按照文件名,测试时用力的从上到下的顺序执行

如果需要改变执行顺序:pytest-ordering插件可以改变默认的用例执行顺序

```python
@pytest.mark.run(order=2)
def test_02(self):
    print("这是第2条登录测试用例")
```

六,pytest标记失败的测试用例

标记预期会出现的异常,只有出现异常才对,不出现异常反而不对

```python
@pytest.mark.xfail(reason="0不能当做被除数")
def test_03(self):
    # print(1/0)
    print("这是第3条登录测试用例")
```

七,pytest支持标记参数化

对于相似的过程,但数据不一样的时候,可以使用参数化

```python
@pytest.mark.parametrize(["a", "b"], [(1, 2), (3, 4), (5, 6), (9, 8), (7, 66)])
def test_04(self, a, b):
    assert a * b > 100
```

八,pytest前后置(固件,夹具)

类夹具,方法夹具,函数夹具,模块夹具

```python
def setup_class(self):
    print("类执行之前")

def teardown_class(self):
    print("类执行之后")

def setup(self):
    print("方法(用例)夹具执行之前")

def teardown(self):
    print("方法(用例)夹具执行之后")
# 方法夹具更新之后的用法
def setup_method(self):
    print("方法(用例)夹具执行之前")

def teardown_method(self):
    print("方法(用例)夹具执行之后")
```

九,部分前后置Fixture固件

fixture的语法:

1,方法夹具

```python
@pytest.fixture(scope="function",autouse=True)
def exe_sql():
    print("执行sql语句")
    yield
    print("关闭数据库")
```

2,类夹具需要手痛调用自定义夹具

```python
# 核心:自定义夹具
@pytest.fixture(scope="class", autouse=True)
def exe_sql():
    print("执行sql语句")
    yield
    print("关闭数据库")


@pytest.mark.usefixtures("exe_sql")
class Testlogin:
```

3,模块级别

```python
@pytest.fixture(scope="module", autouse=True)
def exe_sql():
    print("执行sql语句")
    yield
    print("关闭数据库")


@pytest.mark.usefixtures("exe_sql")
class Testlogin:
```

4,session会话级别

```python
@pytest.fixture(scope="session", autouse=True)
```

十,fixture结合conftest.py文件使用

整个文件是专门用来存放fixture夹具的代码内容,名字是固定的

不需要做任何导包,不管是在根目录,还是在用例目录,还在模块目录,都会被自动调用

执行顺序:从最里面内层执行,从上道下,如果是同一个conftest那么按照,夹具的ASCII编码先后执行

做为一名自动化软件测试,接下来我想分享一下这些年来,我对于技术一些归纳和总结,和自己对作为一名高级测试者需要掌握那些技能的笔记分享,希望能帮助到有心在技术这条道路上一路走到黑的朋友!

1、想学习却无从下手,该如何学习?
这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。

2、软件测试/自动化测试【全家桶装】学习中的工具、安装包、插件....

​ 3、有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看

最后送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!

 

以上是关于Python Pytest自动化测试 fixture与fixture互相调用的主要内容,如果未能解决你的问题,请参考以下文章

Python测试框架pytest(23)插件 - pytest-pickedpytest-lazy-fixture

python接口自动化12-pytest前后置与fixture

iOS自动化探索自动化测试框架pytest - fixtures

pytest自动化测试框架详解+mark标记+fixture夹具

pytest自动化测试框架详解+mark标记+fixture夹具

pytest接口自动化测试框架 | fixture调用fixture