本文共 1525 字,大约阅读时间需要 5 分钟。
Pytest测试框架中的Conftest.py特性实战
Pytest测试框架中的Conftest.py文件是一个强大的功能,能够帮助测试工程师在多个测试模块间共享公共Fixture函数。传统的Fixture函数在每个测试模块中都需要重复编写,这种做法不仅效率低下,还容易导致代码冗余和维护困难。Conftest.py的出现有效解决了这一问题。
Conftest.py文件的主要作用是将Fixture函数集中管理和共享。在一个测试项目中,所有需要共享的Fixture函数都可以放置在Conftest.py中。这样,多个测试模块可以共同使用这些共享Fixture,提升代码的复用性和维护性。
登录授权的Fixture函数是一个典型的案例。假设我们有多个测试模块需要进行登录授权操作,每个模块都需要获取授权TOKEN。将登录Fixture函数放置在Conftest.py中,可以使所有模块共享同一个获取TOKEN的逻辑。以下是Conftest.py中可能的实现代码:
import pytestimport requests@pytest.fixture()def login(): response = requests.post( url='http://0.0.0.0:8000/login/auth/', json={"username":"13484545195","password":"asd888"}, headers={'content-type':'application/json'} ) return response.json()['token']@pytest.fixture()def headers(login): return {'Authorization':'JWT {token}'.format(token=login)} 在各个测试模块中,我们可以通过从Conftest.py导入共享Fixture函数来实现共享。例如,test_index.py和test_platform.py可能的实现如下:
def test_case_index(headers): response = requests.get( url='http://0.0.0.0:8000/interface/index', headers=headers ) assert response.status_code == 200def test_case_query(headers): response = requests.get( url='http://0.0.0.0:8000/interface/products?name=XX课堂', headers=headers ) assert response.status_code == 200
通过这种方式,多个测试模块可以共享同一个登录授权Fixture,从而减少代码冗余,提升测试效率。
在实际使用中,需要注意以下几点:
Conftest.py文件不能作为普通模块导入,通常存放在测试项目的根目录下。
不是所有Fixture函数都需要放入Conftest.py中。如果某个Fixture仅供特定模块使用,直接定义在该模块中即可。
避免在Conftest.py中放置过多专门的Fixture函数,否则可能导致维护成本增加。
通过合理使用Conftest.py,测试工程师可以显著提升代码复用性,简化测试代码的管理和维护。
转载地址:http://bnafk.baihongyu.com/