如何搭建接口自动化框架(二)--pytest初识

2022-08-24957

首先来大概了解一下pytest一些好处啊,就为什么我们要选择pytest来做而不是unittest 简单灵活,容易上手; 支持参数化;【当然unittest其实也支持参数化,只不过方式不如pytest灵活】 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium、接口自动化测试); pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium、pytest-html、pytest-rerunfailures(; 可以很好的和jenkins集成; report框架allure 也支持了pytest;当然这跟地方可以用其他的第三方的报告哈;比如柠檬班木森老师的 unittestreport;也是可以支持pytest的哈。 啥也别说了,这么好用,直接去搞起来 安装一下
pip install pytest 搞定 不放心就验证一下 pytest --version 测试用例 那首先我们要去收集测试用例对吧,在pytest里面,需要按照它规定的格式去写用例的类、函数名,所有的单测文件名都需要满足test_.py格式或_test.py格式。测试类以Test开头,并且不能带有 init 方法(注意:定义class时,需要以T开头,不然pytest是不会去运行该class的) 在单测类中,可以包含一个或多个test_开头的函数。 此时,在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。 Fixture夹具的使用 text Fixture函数的目的是为测试的重复执行提供一个可靠的固定基线。Fixture函数比经典的xUnit setUp/tearDown方法有着显着的改进:

Fixture函数具有明确的名称,在测试用例/类/模块或整个项目中通过声明使用的Fixture函数名称来使用。 Fixture函数以模块化方式实现,因为每个Fixture名称都会触发调用Fixture函数,该fixture函数本身可以使用其它的Fixture函数。 从简单的单元测试到复杂的函数测试,Fixture函数的管理允许根据配置和组件选项对Fixture函数和测试用例进行参数化,或者在测试用例/类/模块或整个测试会话范围内重复使用该Fixture函数。 它还可以作为函数参数来使用 测试用例可以通过在其参数中使用Fixture函数名称来接收Fixture函数。 每个fixture参数名称所对应的函数,可以通过使用@pytest.fixture注册成为一个fixture函数,来为测试用例提供一个Fixture函数。 让我们看一个只包含一个fixture和一个使用它的测试用例的简单独立测试模块:

import pytest @pytest.fixture def smtp_connection(): import smtplib return smtplib.SMTP("smtp.gmail.com",587,timeout=5)

def test_ehlo(smtp_connection): response,msg = smtp_connection.ehlo() assert response == 200 另外夹具提供的优先级执行,按照会话、模块、类、函数等级别划分 当fixture超出范围时,通过使用yield语句而不是return,pytest支持fixture执行特定的teardown代码。yield语句之后的所有代码都视为teardown代码: import smtplib import pytest

@pytest.fixture(scope="class") def smtp_connection(): smtp_connection = smtplib.SMTP("smtp.gmail.com",587,timeout=5) yield smtp_connection # provide the fixture value print("teardown smtp") smtp_connection.close() scope参数就规定了优化及以类优先。 当我们使用了这个参数之后,我们脚本就会按照我们设置的优先级去执行及脚本,执行完成之后会再次回调teardown当然它还支持对用例进行标记,效果与pytest.mark.parametrize一样。 skip跳过测试用例 版本2.9中的新函数。 跳过测试用例的最简单方法是使用skip装饰器标记它,可以传递一个可选的原因reason参数: @pytest.mark.skip(reason="目前没办法测试该用例") def test_the_unknown(): 或者,也可以在测试执行或setup期间,通过调用pytest.skip(reason)函数强制跳过该用例: def test_function(): if not valid_config(): pytest.skip("不支持该配置") 当在导入时间内无法评估跳过条件时,这种在用例跳过的方法非常有用。

也可以在模块级别跳过整个模块:pytest.skip(reason,allow_module_level=True)

import sys import pytest if not sys.platform.startswith("win"): pytest.skip("跳过只支持Windows平台的用意",allow_module_level=True)

然后就是有失败重运行机制,今天先写到这里,下次我们重点细讲一下参数化。

分享
点赞1
打赏
上一篇:Docker常用命令笔记(一)
下一篇:NOTE|IDEA-JRebel 热启动