Pytest测试实战|执行方式

Pytest测试实战

The pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries. 这段话很好地阐述了Pytest的设计思想与强大的特性。在之前阐述了Pytest编写测试用例规范与搜索规则,本文章详细地阐述下Pytest测试框架执行方式特性。

Pytest执行方式

从研发规范与统一性角度而言,建议把所有的测试用例都存储在test的包下,这样在一个包下面就会有很多的测试模块,测试模块中可以编写测试函数(测试方法)。在Pytest测试框架中,针对执行的方式主要有按包执行方式、按模块执行方式、按类执行方式、按函数(方法)执行方式。下面结合案例详细地阐述下这四种执行的方式。以登录接口为案例进行演示这部分的实际应用。在test包下创建test_login.py的模块,整体目录结构如下所示。

图片

测试模块中的源码具体如下:


import pytest

import requests


def test_login():

r=requests.post(

url='http://0.0.0.0:8000/login/auth/',

json={"username":"13484545195","password":"asd888"},

headers={'Content-Type':"application/json"})

assert r.status_code==200

assert r.json()['user']['telephone']=='13484545195'

如果按包的执行方式,就会执行包下所有测试模块里面所有符合执行条件的测试函数(测试方法),执行的命令具体如下:

 pytest -s -v test/

执行后的结果信息如下所示。

如果是使用模块执行的方式,就需要指定包下具体需要执行的测试模块,执行的命令如下:

pytest -s -v test/test_login.py

如果是按照测试函数的执行方式,就需要指定测试模块下具体的测试函数,执行的命令为:

pytest -s -v test/test_login.py::test_login

执行测试模块里面的不管是测试函数还是测试类,都需要在测试模块后面加::的模式。对代码进行改造下,增加测试类,完善后的测试代码如下:

 

import pytest

import requests


def test_login():

r=requests.post(

url='http://0.0.0.0:8000/login/auth/',

json={"username":"13484545195","password":"asd888"},

headers={'Content-Type':"application/json"})

assert r.status_code==200

assert r.json()['user']['telephone']=='13484545195'



class TestPlatform():

def test_login(self):

r = requests.post(

url='http://0.0.0.0:8000/login/auth/',

json={"username": "13484545195", "password": "asd888"},

headers={'Content-Type': "application/json"})

assert r.status_code == 200

assert r.json()['user']['telephone'] == '13484545195'


@pytest.fixture()

def login(self):

r = requests.post(

url='http://0.0.0.0:8000/login/auth/',

json={"username": "13484545195", "password": "asd888"},

headers={'Content-Type': "application/json"})

return r.json()['token']


def test_index(self,login):

r=requests.get(

url='http://0.0.0.0:8000/interface/index',

headers={'Authorization':'JWT {login}'.format(login=login)})

assert r.status_code==200

下来演示下按类的方式来执行测试用例,执行的命令具体如下:

pytest -s -v test/test_login.py::TestPlatform

这样执行后,就会执行测试类中所有的测试用例,执行后的结果信息如下:

图片

但是如果只想执行测试类中某一个测试方法,那么执行的命令为:

pytest -s -v test/test_login.py::TestPlatform::test_index

这样执行后就只会执行被指定的测试方法,执行后的结果信息如下:

在实际的企业里面,一般执行的方式都是以包的执行方式,很少使用类执行方式或者是具体的某个函数作为执行方式,这是因为在企业级里面,需要思考的是批量执行,这样以包的方式来进行执行,就能够达到需要的策略与目标。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

### 回答1: 好的,下面是一个简单的 pytest 测试实战: 假设我们有一个函数,接收两个数字参数并返回它们的乘积: ```python def multiply(a, b): return a * b ``` 我们可以使用 pytest 来编写测试用例,确保函数的行为符合预期。首先,我们需要创建一个名为 `test_multiply.py` 的文件,在其中编写测试用例。 ```python # test_multiply.py from multiply import multiply def test_multiply_positive_numbers(): result = multiply(2, 3) assert result == 6 def test_multiply_negative_numbers(): result = multiply(-2, -3) assert result == 6 def test_multiply_zero(): result = multiply(0, 5) assert result == 0 result = multiply(5, 0) assert result == 0 ``` 在这个测试用例中,我们创建了三个测试函数,分别测试两个正数相乘、两个负数相乘以及其中一个数为零的情况。使用 `assert` 关键字来断言函数的返回值是否符合预期。 运行测试用例,可以使用以下命令: ``` pytest test_multiply.py ``` 如果所有测试用例都通过,pytest 将输出以下内容: ``` ============================= test session starts ============================= platform linux -- Python 3.8.5, pytest-6.2.1, py-1.10.0, pluggy-0.13.1 rootdir: /path/to/test_directory plugins: anyio-2.2.0 collected 3 items test_multiply.py ... [100%] ============================== 3 passed in 0.01s ============================== ``` 如果有任何测试用例失败,pytest 将输出详细的错误信息,帮助您快速定位问题。 这就是一个简单的 pytest 测试实战,它可以帮助您编写可靠的测试用例以确保代码的正确性。 ### 回答2: pytest是一种Python的测试框架,它提供了一系列的方法和工具来编写和执行测试用例。pytest测试实战是指在实际项目中使用pytest进行测试的过程。 首先,我们可以使用pytest编写测试脚本。测试脚本可以包含多个测试用例,每个测试用例是一个以test_开头的函数。我们可以使用assert语句来断言测试的结果是否符合预期。pytest提供了丰富的断言方法,可以方便地进行各种断言操作。 其次,我们可以使用pytest的fixture功能来创建和管理测试的前置条件。fixture可以用来模拟测试环境和数据,使测试用例的编写更加简洁和灵活。我们可以在测试用例中使用fixture来获取测试数据或者创建测试环境,从而减少重复的代码。 另外,pytest还提供了参数化测试的功能,可以通过参数化的方式运行同一个测试用例的多组测试数据。这样可以提高测试覆盖率,减少测试代码的编写量。 pytest还支持多线程和分布式测试,可以实现并发执行测试用例,提高测试效率。同时,pytest还提供了详细的测试报告和日志功能,方便我们查看和分析测试结果。 最后,使用pytest进行测试实战时,我们可以根据项目的需要进行自定义的插件开发。pytest提供了丰富的插件接口,可以轻松扩展pytest的功能和特性。 总而言之,pytest测试实战是指在实际项目中使用pytest进行测试的过程。通过使用pytest,我们可以简洁高效地编写和执行测试用例,提高测试效率,并且可以根据项目的需要进行自定义的插件开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值