吐血整理,最全Pytest自动化测试框架快速上手(超详细)

目录:导读


前言

pytest框架

pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:

简单灵活,容易上手;

支持参数化;

能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);

pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等

测试用例的skip和xfail处理;

可以很好的和jenkins集成;

report框架----allure 也支持了pytest;

1、安装

bash 复制代码
pip install pytest

2、验证安装

bash 复制代码
pytest --version # 会展示当前已安装版本

3、pytest文档

官方文档:https://docs.pytest.org/en/latest/contents.html

在pytest框架中,有如下约束:

所有的单测文件名都需要满足test_.py格式或_test.py格式。

在单测文件中,测试类以Test开头,并且不能带有 init 方法(注意:定义class时,需要以T开头,不然pytest是不会去运行该class的)

在单测类中,可以包含一个或多个test_开头的函数。

此时,在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。

4、创建测试用例

创建test_开头的文件,测试文件以 test_xx.py 命名需要以 test_开头(或_test 结尾)

若是新建类,测试类需要以 Test_开头,并且不能带有 init 方法(Test开头的类,这个类也叫做测试套件,类下面的是函数才是测试用例)

测试用例(方法)需要以 test_开头

python 复制代码
import pytest  #导入pytest模块


def test_beifan():  #测试用例
    pass
    
class TestBaili:  #测试套件
    def test_a(self): #测试用例,第一个测试方法
        pass
        
    def test_b(self):  #测试用例,第二个测试方法
        pass

在用例中使用断言

Pytest 最常用的断言一般有以下五种:

python 复制代码
assert xx:判断 xx 为真
assert not xx:判断 xx 不为真
assert a in b:判断 b 包含 a
assert a == b:判断 a 等于 b
assert a !=b:判断 a 不等于 b

添加断言在对应的方法里面,做判断测试用例结果是否满足预期,示例如下:

优化断言

如果想要在失败的时候看到更详细的信息,可以在断言上添加说明,示例如下:

执行结果如下图,可以看到失败时断言的说明信息:

5、执行测试用例

使用命令行执行

cmd 窗口,然后执行 pytest 文件路径/测试文件名例如 pytest ./test_tt.py

如果当前路径已经是放测试用例文件的文件夹下,想要测试文件,则直接可以输入pytest 测试文件名 即可:

如果只输入 pytest,则会默认执行当前文件夹下所有以 test_开头(或_test 结尾)的文件。

执行指定文件指定方法

命令行编写方式

pytest路径/文件名::类名::方法名例如

带参数执行

常用的 pytest 带参数执行:列举几种,其余扩展可以自行百度

Pytest -v 输出用例更加详细的执行信息,比如用例所在文件和用例名称

pytest -k 执行用例中包含'关键字'的用例

pytest -s 输出用例中的调试信息,比如 print 打印信息,如果不加参数则不输出待执行的用例

pytest -m执行'标记'的内容,执行特定的测试用例,执行有相同标记的测试用例,添加标记的方法如下

pytest -x执行失败则停止执行,后面的用例不会被执行

pytest --maxfail=n执行失败 n 次之后停止执行,n 是执行失败的次数

pytest --count=n 执行用例 n 次,n=2 就是执行两次

pytest --lf (last failed)重新运行上次失败的用例,若没有失败的会全部跑

pytest --ff (failed first)重新运行所有用例,但首先运行上次失败的用例

6、读懂测试结果

python 复制代码
.代表一个测试用例通过,...代表两个测试用例通过,以此类推;
s,即Skip,代表用例跳过执行;
F,即Failure,一般是断言发生错误;
E,即Error,一般是用例执行过程中报错。

7、pytest的fixures

fixtures(夹具)可以在测试用例执行之前,执行之后,自动执行一些代码

在不同用例中,相同的代码进行复用

在不同用例中,实现依赖管理

1)创建fixtures

pytest的夹具,本质是"函数",加上fixtures装饰器。

夹具=函数+fixtures装饰器

创建一个conftest.py文件

python 复制代码
import pytest  #导入pytest模块


def test_beifan():  #测试用例
    pass
    
class TestBaili:  #测试套件
    def test_a(self,driver): #测试用例,第一个测试方法
        pass
        
    def test_b(self,driver):  #测试用例,第二个测试方法
        pass

这样就会打开自动两次浏览器了。

有个要求:两个测试用例,只启动一次浏览器

100个测试用例,但是只启动1次浏览器

2)fixture的范围

创建夹具,可以指定夹具的共享范围,在共享范围内的用例,会共享同一个夹具。

pytest的夹具共享范围有5个:

function(默认,最小,自己和自己共享,不和其他用例共享)

class(同一个类中)

module(文件)

package(文件夹)

session(会话,最大,全局)

python 复制代码
@pytest.fixture(scope='function')
def driver():
    d = webdriver.Chrome()
    d.get("http://101.34.221.219:8010/")  # 控制浏览器,访问百度
    d.quit()
    return d

在fixture这个装饰器中传递一个范围参数,用来说明用例在什么范围中是相互共享的。

|-------------------------------------|
| 下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |

一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战

四、App自动化项目实战

五、一线大厂简历

六、测试开发DevOps体系

七、常用自动化测试工具

八、JMeter性能测试

九、总结(尾部小惊喜)

拥抱每一个挑战,超越自我,勇敢向前。不要畏惧失败,它是成功的跳板;不要停歇奋斗,只有坚持才能收获辉煌。相信自己,你就是改变世界的力量。

生活的旅途永远不会一帆风顺,但只要你充满信心、坚持努力,就一定能够越过重重难关,最终携手迎接胜利的曙光。相信自己,你的努力没有白费,未来的道路由你开创。

只有在面对困难和挑战的时候,才能真正展现出你内在的潜力和实力。坚持不懈,百折不挠,你一定能够最终实现自己的梦想。相信自己,永不放弃。

相关推荐
美团测试工程师21 分钟前
九大高效的前端测试工具与框架
软件测试·测试工具·jmeter
天天要nx29 分钟前
D102【python 接口自动化学习】- pytest进阶之fixture用法
python·pytest
程序猿000001号2 小时前
探索Python的pytest库:简化单元测试的艺术
python·单元测试·pytest
测试者家园7 小时前
ChatGPT生成接口文档的方法与实践
软件测试·chatgpt·测试用例·接口测试·接口文档·ai赋能·用chatgpt做软件测试
Heaven6459 小时前
6.8 Newman自动化运行Postman测试集
软件测试·自动化·接口测试·postman·newman
测试老哥14 小时前
Python自动化测试图片比对算法
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例
测试者家园21 小时前
ChatGPT接口测试用例生成的流程
软件测试·chatgpt·测试用例·接口测试·测试图书·质量效能·用chatgpt做测试
互联网杂货铺1 天前
几个常见的Jmeter压测问题
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试
测试者家园1 天前
ChatGPT与接口测试工具的协作
软件测试·测试工具·chatgpt·接口测试·ai赋能·用chatgpt做软件测试·测试图书
爱学测试的雨果1 天前
分布式测试插件 pytest-xdist 使用详解
分布式·pytest