当前位置: 首页 > news >正文

Python+pytest接口自动化之测试函数、测试类/测试方法的封装

🍅点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

今天呢,笔者想和大家聊聊python+pytest接口自动化中将代码进行封装,只有将测试代码进行封装,才能被测试框架识别执行。

例如单个接口的请求代码如下:

import requests headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36" } url = "https://mp.toutiao.com/profile_v4/" res = requests.get(url=h_url, headers=headers)

假设我们需要将上面这段代码编写成测试框架能执行的测试用例,仅仅只是这样写代码显然是不够的,还需要进行如下补充:

  • 需要将代码封装成单元测试框架 (pytest或unittest) 能识别的测试函数或测试类,否则将不会被识别执行。
  • 需要加上断言,即结果与期望之间的对比,单元测试框架才能判定该用例执行结果是否通过,结果==期望则说明通过,否则失败。

python中函数以及类的封装这里不做过多说明,这篇文章的目的是让大家明白在接口自动化测试中一般怎样封装测试代码。

一、测试用例封装的一般规则

测试用例的封装有两种,测试函数和测试类,封装的一般规则如下:

  • 一个测试函数对应一条测试用例。
  • 测试类中可定义多个测试方法,一个测试方法对应一条测试用例,测试类可以看作是一个测试用例集。
  • pytest中测试函数或测试方法的命名必须以test开头,测试类名必须以Test开头。具体命名规则可以参考我之前的文章pytest(3)-测试命名规则。
  • 对于单接口的测试校验,一个单接口的测试用例只包含一个接口请求,即将一个接口请求封装成一个测试函数或测试方法。
  • 对于场景(多接口) 的测试校验,一条场景测试用例需请求多个接口,因此需要将多个接口请求封装在同一个测试函数或方法中。
  • 一般封装一个接口的正向校验、异常校验封装成不同的方法,并封装在同一个测试类中。如定义一个登陆的测试类,正确用户名、密码请求封装成一个方法 (即一条测试用例),正确用户名、错误密码请求封装成另一个方法 (即另一条测试用例)。
  • 也可以将某个功能点或功能相关联的接口用例封装在同一个测试类中。比如个人中心涉及到的接口,可以封装在同一个测试类中

二、测试函数的封装

一般而言,一个测试函数对应一条用例。上面的代码编写成一条测试用例,示例如下:

强调,pytest中测试函数命名必须以test开头,如test_get_home。

三、测试类/方法的封装

一个测试类相当于一个测试用例集,类中的每个方法对应一条测试用例。以登录接口为例,封装成测试类,示例如下:

强调,pytest中测试类命名需要以Test开头,如TestLogin,且测试类中不能有init方法。测试类中测试方法必须以test开头,如test_login_normal。

四、示例代码

pytest中可以使用命令行或者使用代码方式即 pytest.main() 执行用例,具体可参考文章pytest(1)-简介。

完整的示例代码如下:

import requests import pytest import json def test_get_home(): ''' 请求首页接口 :return: ''' headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36" } url = "https://www.cnblogs.com/lfr0123/" res = requests.get(url=url, headers=headers) # 断言,判断返回结果的code是否等于200,当然实际接口测试中一般返回结果中还会有别的字段需要断言 assert res.status_code == 200 class TestLogin: ''' 登录接口校验 ''' url = "http://127.0.0.1:5000/login" headers = {"Content-Type": "application/json;charset=utf8"} def test_login_normal(self): '''正确用户名、正确密码登录''' data = { "username": "AndyLiu", "password": "123456" } res = requests.post(url=self.url, json=data, headers=self.headers) # 断言 assert res.status_code == 200 assert json.loads(res.text)["token"] def test_login_error(self): '''正确用户名、错误密码登录''' data = { "username": "AndyLiu", "password": "111111" } res = requests.post(url=self.url, json=data, headers=self.headers) # 断言 assert res.status_code == 200 assert not json.loads(res.text)["token"] if __name__ == '__main__': pytest.main()

五、总结

  • 测试函数、测试类/测试方法的封装,其实不管是什么单元测试框架,遵循的方式都一样。
  • 而在命名方式上各有自己的要求,比如pytest与unittest中测试命名方法有一定的区别。
  • 把一个有自己断言的函数或方法看成是一条测试用例,那么测试类其实就是一个含有一条或者多条测试用例的测试用例集,类中的每个方法对应一条测试用例。
  • 一个测试类中放置哪些测试方法,换句话说一个测试用例集中应该包含哪些测试用例,这个可以按照项目自身情况而定,也可按照测试人员自己的想法而定,主旨就是要清晰明了

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

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

http://www.cnnetsun.cn/news/1277964.html

相关文章:

  • 解决 cosyvoice failed to load library libonnxruntime_providers_cuda.so 错误的实战指南
  • 搭建虚拟机
  • LobeChat语音合成实测:让AI助手开口说话,打造沉浸式对话体验
  • Gemma-3-12b-it流式生成体验优化:逐字输出+加载动画「▌」实现原理
  • BiLSTM锂电池剩余寿命预测,NASA数据集(5号电池训练6号电池测试),MATLAB代码
  • TKDE-2023《Self-Supervised Discriminative Feature Learning for Deep Multi-View Clustering (SDMVC)》
  • 突破Windows文件管理瓶颈:QTTabBar实现效率提升的终极方案
  • Gemma-3-12b-it效果惊艳集锦:12B参数下媲美云端多模态模型的表现
  • Super Resolution处理结果保存:输出路径与命名规则说明
  • AI辅助开发新体验:描述需求,让快马AI生成带安全验证的智能管理界面
  • 基于TI电赛开发板的L298N电机驱动模块PWM调速移植实战
  • PP-DocLayoutV3企业级应用:审计底稿结构化——自动定位审计意见/财务数据/附注
  • 2026年市场活动海报返工后,我复盘了筛选组图的三个步骤
  • 香港的区块链公司中,有哪些是最受投资者青睐的?
  • 2025年全国行业职业技能竞赛第四届全国数据安全职业技能竞赛暨第四届安防行业职业技能竞赛“美亚柏科杯“数据安全管理员样题
  • Windows系统本地LLM部署难题:llama-cpp-python零基础解决方案
  • Neeshck-Z-lmage_LYX_v2实战体验:一键切换LoRA风格,轻松生成精美画作
  • 2026美业会所亲测:业绩翻倍新实践
  • 国际RPA厂商vs国产厂商,财务场景下到底该怎么选?不吹不黑,纯干货对比
  • Z-Image-Turbo-rinaiqiao-huiyewunv从零开始:本地化文生图工具搭建与提示词调优指南
  • Django毕业设计新手实战:从零搭建可部署的Web应用避坑指南
  • AudioSeal部署案例:在线会议平台AI实时字幕+语音水印双重内容保障
  • Guohua Diffusion 虚拟角色设计:从文本描述到三视图的完整流程
  • AI赋能开发:让快马AI分析GitHub镜像代码并智能生成优化版本
  • Phi-3-mini-128k-instruct行业应用:医疗问诊摘要、患者教育材料生成实践
  • 7步构建Windows SSL自动管理体系:从入门到企业级优化
  • GD32嵌入式NES游戏机硬件设计与低功耗电源管理
  • CiteSpace关键词聚类图实战指南:从数据预处理到可视化分析
  • 教育资源高效获取新方案:突破限制的智能解析工具全攻略
  • 数据库课程设计案例:构建万象熔炉·丹青幻境作品管理与推荐系统