pytest各固件的优先级

本文介绍了在测试框架中,fixture的优先级顺序,从高到低依次是session级别、class级别、setup_class级别、function级别和setup。这有助于理解在执行测试时fixture如何生效和组织测试逻辑。

会话:fixture的session级别优先级最高

类:然后是fixture的class级别;

类:再后是setup_class级别;

函数:fixture的function级别;

函数:再后是setup级别;

<think>嗯,用户需要复习pytest、Allure、requests以及接口自动化框架的相关知识,涉及的内容挺多的。首先,我得理清每个部分的重点,确保覆盖所有提到的主题。用户可能是在准备面试或者考试,需要系统的复习资料,所以结构要清晰,分点讲解比较好。 第一部分是关于pytest的插件、运行规则、配置、跳过用例、执行顺序和夹具。pytest的插件很多,比如pytest-html生成报告,pytest-xdist并行执行,这些需要简要介绍。运行规则方面,得说明默认的测试发现规则,比如以test_开头的文件和函数。参数部分,常用的-v、-s、-k、-m这些参数需要解释清楚。pytest.ini的配置示例,如何修改默认配置,比如添加标记或者更改测试目录。跳过用例可以用@pytest.mark.skip或者条件跳过,用例执行顺序默认是按文件名和函数名,但可以用插件调整。夹具部分,fixture的作用域和用法,还有conftest.py的共享机制。 接下来是Fixture固件,contest.py应该是conftest.py的笔误,需要纠正。断言部分,pytest的断言比unittest更灵活,因为用的是Python自带的assert,但需要说明如何用断言辅助方法。Allure报告的生成步骤,安装插件,运行命令,生成报告。 第三部分Allure定制和参数化。定制包括添加标题、描述、步骤、优先级等,参数化使用@pytest.mark.parametrize,数据驱动测试的不同情况。这里需要给出具体的代码示例,说明如何将测试数据分离,提高可维护性。 第四部分requests模块,要详解常用方法如get、post,以及如何传递参数、headers。Cookie和Session的处理,特别是会话维持,比如使用Session对象来保持登录状态。关联处理可能是指多个接口之间的cookie传递,需要举例说明。 第五部分接口封装,统一请求封装可能是指将requests的方法封装成通用的函数,处理公共参数、头信息等。接口关联封装比如一个接口的响应提取出来,作为下一个接口的入参,可以用变量存储或者Fixture来实现。 第六部分框架封装,YAML测试用例的结构设计,如何读取和解析YAML,接口关联的改进,比如更灵活的提取方式,基础路径的封装,避免硬编码。可能需要提到使用配置文件或环境变量管理不同环境的基础路径。 第七部分热加载,可能是指在运行时动态加载模块或配置,比如使用importlib实现。断言封装则是将常用的断言逻辑封装成函数,比如检查状态码、响应体结构等,减少重复代码。 第八部分数据类型处理,比如处理JSON、XML,日期格式转换等。DDT数据驱动和参数化的区别,可能是指使用外部数据源如Excel、CSV来驱动测试,这里可以结合pytest的parametrize或者第三方库如ddt来实现。 用户的需求是实战复习,所以每个部分都需要有代码示例和实际应用场景。要确保内容准确,避免错误,比如conftest.py的正确用法,Fixture的参数传递,Allure的注解使用等。可能需要检查是否有遗漏的主题,比如pytest的标记机制、夹具的参数化、Allure的环境变量配置等。 另外,用户提到的接口自动化框架封装,可能涉及到设计模式,比如Page Object模式在接口测试的应用,或者工厂模式生成请求对象。这部分需要结合实际项目经验,给出最佳实践的建议。 最后,确保语言简洁明了,结构层次分明,方便用户逐步理解和复习。可能需要用代码块和列表来组织内容,突出重点,比如每个小标题下分步骤说明,并给出示例代码。同时注意用户提到的中文化回答,避免使用英文术语时不加解释,必要时给出中英对照。</think>我将以实战角度为您梳理这些测试开发核心知识点,并提供代码示例: 一、pytest 深度应用 1. pytest核心机制 ```python # 运行规则示例 pytest -v -s tests/ # 执行指定目录用例并输出详细信息 pytest -k "login" # 执行包含login关键字的用例 pytest -m smoke # 执行标记为smoke的用例 # pytest.ini配置示例 [pytest] addopts = -v --tb=short testpaths = testcases markers = smoke: smoke test cases regression: regression test cases ``` 2. 用例控制技巧 ```python # 跳过用例示例 @pytest.mark.skip(reason="功能暂未实现") def test_old_feature(): ... # 条件跳过 @pytest.mark.skipif(sys.version_info < (3, 8), reason="需要Python3.8+") # 执行顺序控制 @pytest.mark.run(order=2) def test_second_case(): ... ``` 3. Fixture高级应用 ```python # conftest.py @pytest.fixture(scope="module") def db_connection(): conn = create_db_conn() yield conn conn.close() # 参数化夹具 @pytest.fixture(params=["chrome", "firefox"]) def browser(request): return init_browser(request.param) ``` 二、Allure 报告数据驱动 1. 报告定制实战 ```python def test_payment(): """支付业务流程验证""" with allure.step("登录系统"): login() with allure.step("创建订单"): order_id = create_order() allure.attach.file('./screenshots/payment.png', name='支付截图') allure.dynamic.title(f"支付验证-订单{order_id}") ``` 2. 参数化驱动 ```python # 数据驱动示例 test_data = [ ("admin", "123456", 200), ("test", "wrong_pwd", 401) ] @pytest.mark.parametrize("username,password,expected", test_data) def test_login(username, password, expected): result = login(username, password) assert result.status_code == expected ``` 三、Requests 高级封装 1. 会话保持Cookie管理 ```python class APIClient: def __init__(self): self.session = requests.Session() def login(self): resp = self.session.post( "/login", json={"username": "admin", "password": "admin123"} ) resp.raise_for_status() return self def get_user_info(self): return self.session.get("/user/info") # 使用示例 client = APIClient().login() response = client.get_user_info() ``` 四、接口自动化框架设计 1. YAML测试用例规范 ```yaml - name: 创建用户接口 request: method: POST url: /api/v1/user headers: Content-Type: application/json json: username: testuser email: test@example.com validate: - eq: [status_code, 201] - contains: [content, id] ``` 2. 关联参数处理 ```python def test_create_and_query_user(): # 创建用户 create_res = requests.post("/users", json={"name": "John"}) user_id = create_res.json()["id"] # 使用关联ID查询 query_res = requests.get(f"/users/{user_id}") assert query_res.json()["name"] == "John" ``` 五、高级封装技巧 1. 热加载断言封装 ```python # 断言封装 def assert_response(response, expected_status=200, schema=None): assert response.status_code == expected_status if schema: jsonschema.validate(response.json(), schema) # 热加载示例 def load_config(): config = {} if os.path.exists("config.local.py"): import config.local as local_config config.update(vars(local_config)) return config ``` 六、数据驱动扩展 ```python # DDT封装示例 def load_testdata(file_path): with open(file_path) as f: return yaml.safe_load(f) @pytest.mark.parametrize("case", load_testdata("testcases/login.yaml")) def test_login_ddt(case): response = requests.post(case["url"], json=case["data"]) assert response.status_code == case["expected"]["code"] ``` 实战建议: 1. 搭建分层框架结构: - 基础层(请求封装、工具方法) - 数据层(YAML/JSON数据文件) - 用例层(测试逻辑) - 报告层(Allure定制) 2. 优化执行流程: ```bash pytest --alluredir=./report/allure-results allure serve ./report/allure-results ``` 3. 典型项目结构: ``` project/ ├─ config/ │ └─ pytest.ini ├─ testcases/ │ ├─ api/ │ └─ web/ ├─ utils/ │ ├─ client.py │ └─ assert.py ├─ conftest.py └─ requirements.txt ``` 这些实战要点覆盖了接口自动化测试的核心技术栈,建议结合具体项目需求进行扩展和优化,重点掌握封装思想框架设计原则。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值