Pytest为什么会成为目前最火的测试框架?
Pytest为什么现在被更多的测试工程师所依赖广泛使用,我们从以下几个方面一一解析:
1.pytest身为一个第三方库集成了很多功能安装起来十分简单
使用pip install pytest 或者在pychram中搜索安装也是可以的
2.安装好pytest之后,在使用之前我们首先要了解这个库的使用规则,既然我们使用了pytest,那么它是如何在你的框架目录中发现你写的测试用例呢?
- 你的测试文件是要以test_开头命名或者_test命令结尾都可以
- 你的测试类的类名也是要以Test_开头类里面不要有init方法
- 你的测试用例的命名也是要以test_开头
这样的话pytest这个框架会自动在你的这些命名中去搜寻你写的测试用例去执行
关于断言:在unittest中我们的断言基本是self.assertEqual(预期结果,实际结果)这样去进行断言的,而在pytest中只需要使用assert即可
写好用例之后,如何去运行用例?pytest提供了很多参数供我们去定制化的执行我们的用例
- 直接pytest 意思是只要符合用例的命名规则那么我全都执行
- 使用pytest -v 可以打印出详细的运行日志
- 使用pytest -s 可以打印出你在代码中的print的输出
- 使用pytest -k ”类名“ 除了这个类下面的用例其他都执行
- 使用pytest -k ”函数名“ 除了这个函数名下面的用例其他都执行
- 使用pytest -x 只要用例执行失败脚本立即停止后面的用例不再运行
- 使用pytest --maxfail = [数量] 当用例执行失败的个数到达你设定的数量脚本停止不再运行
- 使用pytest -m 运行所有@pytest.mark.[标记名] 标记的用例其他的用例不运行
怎么样?有了这些参数你是不是可以定制化去执行你的用例,对用例的管理及使用场景是十分方便的
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】
3.不管是测试平台或者是unittest框架基本上都是支持前置条件,后置条件,但对于pytest而言,对于这种前置条件,后置条件是更加的灵活。因为更细化了,大致可分为以下几类:
- setup_module/teardown_module 在模块中使用,在模块的始末进行调用
- setup_class/teardown_class 在类里面使用,在类的始末进行调用
- setup_function/teardown_function 在函数里面使用,在函数的始末进行调用
- setup/teardown 在方法里面使用,在方法的始末进行调用
举例
首先在你的文件目录中创建conftest文件
import pytest
@pytest.fixture(scope='session',autouse=True)
def session():
print("作用在session之前执行")
yield
print("作用在session之后执行")
@pytest.fixture(scope='module',autouse=True)
def module():
print("作用在module之前执行")
yield
print("作用在module之后执行")
@pytest.fixture(scope='class',autouse=True)
def classdemmo():
print("作用在class之前执行")
yield
print("作用在class之后执行")
@pytest.fixture(scope='function',autouse=True)
def func():
print("作用在func之前执行")
yield
print("作用在func之后执行")
4. fixture(脚手架的使用)如果一个测试用例中你有一个参数是需要复杂的计算过程才能得到,那么fixture就很好的可以使用
import pytest
@pytest.fixture()
def bea():
return "123"
def test_aa(bea): @Eleven11
assert bea == "123"
if __name__ == '__main__':
pytest.main(['test_one.py'])
看到没有~在测试用例中如果想用一个参数用pytest中的fixture是不是很方便?
5.unittest框架中是使用ddt进行数据驱动的那么在pytest中是怎么进行用例驱动呢?那不得不用到pytest.mark.parametrize
拿账号密码登录举例
import pytest
@pytest.mark.parametrize('username,password',[('admin',123),('',123),('admin',"")])
def test_login(username,password):
print("我的账号是%s我的密码是%s"%(username,password))
if __name__ == '__main__':
pytest.main(['test_mydat.py'])
执行结果:
platform win32 -- Python 3.8.8, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:\Users\连志勇\PycharmProjects\pytestdemo\testdata
plugins: Faker-8.2.1
collected 3 items
test_mydat.py ... [100%]
============================== 3 passed in 0.14s ==============================
执行了三条用例是不是很叼?
6.fixture与parametrize联合起来如何使用?
废话不多说直接上代码
import pytest
@pytest.fixture
def my_order():
return 10
@pytest.mark.parametrize('order', [10, 11, 12, 13, ])
def test_login(my_order, order):
assert my_order > order
if __name__ == '__main__':
pytest.main(['test_mydat.py'])
执行结果:
=========================== short test summary info ===========================
FAILED test_mydat.py::test_login[10] - assert 10 > 10
FAILED test_mydat.py::test_login[11] - assert 10 > 11
FAILED test_mydat.py::test_login[12] - assert 10 > 12
FAILED test_mydat.py::test_login[13] - assert 10 > 13
============================== 4 failed in 0.20s ==============================
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!?
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!