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
这样执行后就只会执行被指定的测试方法,执行后的结果信息如下:
在实际的企业里面,一般执行的方式都是以包的执行方式,很少使用类执行方式或者是具体的某个函数作为执行方式,这是因为在企业级里面,需要思考的是批量执行,这样以包的方式来进行执行,就能够达到需要的策略与目标。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!