怎样使用pytest框架做自动化接口测试?

2024-11-19 阅读 11
更新于 2024年11月21日
pytest作为Python技术栈下最主流的测试框架,功能极为强大和灵活。其中Fixture夹具是它的核心。而且pytest中对Fixture的作用范围也做了不同区分,能为我们利用fixture带来很好地灵活性。
下面我们就来了解下这里不同scope的作用
fixture的scope定义首先根据官网的说明,Pytest中fixture的作用范围支持5种设定,分别是function(默认值), classs, module, package, session
作用范围说明function默认值,对每个测试方法(函数)生效,生命周期在测试方法级别class对测试类生效,生命周期在测试类级别module对测试模块生效,生命周期在模块(文件)级别package对测试包生效,生命周期在测试包(目录)级别session对测试会话生效,生命周期在会话(一次pytest运行)级别下面结合代码来说明,假设目前有这样的代码结构
run_params是被测方法
def deal_params(p): print(f"input :{p}") if type(p) is int: return p*10 if type(p) is str: return p*3 if type(p) in (tuple, list): return "_".join(p) else: raise TypeError
test_ch_param, test_fixture_scope中分别定义了参数化和在测试类中的不同测试方法
import pytest@pytest.mark.parametrize("param",[10, "城下秋草", "软件测试", ("示例", "代码")]) def test_params_mark(param): print(deal_params(param))
import pytest class TestFixtureScope1: def test_int(self): assert deal_params(2) == 20 def test_str(self): assert deal_params("秋草") == "秋草秋草秋草" class TestFixtureScope2: def test_list(self): assert deal_params(["城下","秋草"]) == "城下_秋草" def test_dict(self): with pytest.raises(TypeError): deal_params({"name": "秋草"})
在公共方法文件conftest.py中定义fixture: prepare, 设置了autouse=True,即会根据fixture的设置范围自动应用