
一接口自动化测试1.1 认识接口自动化接口自动化是通过对接口进行测试和模拟以确保软件系统内部的各个组件能够正确地相互通信和交换数据。接口自动化测试可以显著提高测试效率和准确性。因为接口测试专注于测试系统内部的逻辑和数据传输而不是像UI测试那样关注用户的操作和交互。同时由于接口测试直接针对系统内部的结构和功能可以更容易地发现和定位问题减少测试成本和时间。1.2 接口自动化流程接口自动化测试有一套完整的流程从需求分析到最终生成测试报告每一步都有明确的目标和产出。下面我们逐一展开说明。1.2.1 需求分析需求分析是整个接口自动化测试的起点也是至关重要的一步。在这一阶段我们需要从两个维度去梳理接口信息分析请求明确接口的URL、请求方法如get、post、PUT、DELETE等、请求头、请求参数和请求体等信息。只有把这些基础信息弄清楚后续编写脚本时才能有的放矢。分析响应确定接口返回的数据格式、状态码以及可能的错误信息。了解响应结构有助于我们设计合理的断言逻辑判断接口是否符合预期。1.2.2 挑选自动化接口并不是所有接口都适合做自动化测试我们需要根据项目的时间、人员安排和接口的复杂度挑选适合自动化测试的接口。通常优先选择核心业务接口、频繁使用的接口以及容易出错的接口进行自动化测试。具体可以从以下几个维度来考量功能复杂度优先选择功能复杂、逻辑分支多的接口进行自动化测试。例如涉及多种支付方式、多种订单状态转换的订单管理接口手动测试难以全面覆盖所有场景自动化测试可以更高效地进行测试。高风险功能选择对业务影响大、风险高的接口进行自动化测试确保其稳定性和可靠性。例如涉及资金操作的支付接口一旦出现问题可能导致严重的经济损失因此需要进行充分的自动化测试。重复性高对于需要频繁执行的测试任务如回归测试中的接口测试自动化测试可以避免重复手动测试的繁琐和低效提高测试效率。1.2.3 设计自动化测试用例如果在功能测试阶段已经设计了测试用例可以直接拿来使用。根据接口需求和功能设计正向测试用例正常场景和反向测试用例异常场景包括边界值测试、参数组合测试等。正向用例用于验证接口在正常输入下能否返回正确结果反向用例则用于验证接口对异常输入的容错能力。1.2.4 搭建自动化测试环境选择合适的编程语言如Python、Java等和开发环境如PyCharm、IntelliJ IDEA等来实现自动化测试。以Python为例需要安装必要的依赖库如requests用于发送HTTP请求pytest用于测试框架。环境的搭建要保证与生产环境的一致性避免因环境差异导致测试结果失真。1.2.5 设计自动化执行框架设计一个框架来执行测试用例包括报告生成、参数化处理和用例执行逻辑。一个好的框架应该具备可扩展性、可维护性和可读性让团队成员能够方便地添加新的测试用例同时保证测试结果的清晰可读。1.2.6 编写代码根据设计好的测试用例和框架编写自动化测试脚本。编写过程中要注意代码的规范性和可读性合理封装公共方法避免重复代码。同时要保证脚本的稳定性处理好各种异常情况。1.2.7 执行用例使用测试框架如unittest、pytest来执行编写的测试用例。执行过程中要关注用例的运行状态及时处理失败的用例分析失败原因并修复问题。可以设置定时任务让测试用例在指定时间自动运行。1.2.8 生成测试报告测试完成后生成测试报告。可以使用工具如HtmlTestRunner或Allure来生成易于阅读的报告。测试报告应包含用例执行总数、通过率、失败用例详情等信息方便团队成员了解测试结果为后续优化提供依据。二第一个简单的接口自动化举个栗子//对百度接口发起请求 import requests rrequests.get(http://www.baidu.com) print(r)运行展示三requests模块3.1 安装命令行通过pip工具进行安装pip install requests2.13.0//这里的版本号大家可以自行选择本人觉得老版本稳定性可能会更好所以选择这个pip list//可通过这句查看所有的安装包3.2 requests介绍requests库是⼀个非常流行的HTTP客户端库用于发送HTTP请求。requests.get 方法用于发送⼀个HTTPget请求到指定的URL 。requests.get 方法返回⼀个Response对象这个对象包含了服务器返回的所有信息。如Response 对象提供的属性/方法介绍属性/方法描述r.status_code响应状态码r.content字节方式的响应体会自动解码gzip和deflate压缩r.headers以字典对象存储服务响应头若键不存在则返回Noner.json( )Request中内置的JSON解析方法将响应体解析为JSON格式r.url获取实际请求的urlr.encoding编码格式根据响应头部的字符编码确定r.cookies获取服务器设置的cookiesr.raw返回原始响应体不进行任何处理r.text字符串方式的响应体会自动根据响应头部的字符编码进行解码r.raise_for_status( 失败请求非200响应抛出异常3.3 常见请求方法//发起get请求 def get(url,paramsNone,**kwargs) //发起post请求 def post(url,dataNone,jsonNone,**kwargs) //支持不同请求方式methon指定请求方法 //支持get options head post put patch delete def requests(methon,url,**kwargs)示例3.4 添加请求信息get( )post( )底层都是调用request( )方法因此这三个方法在发送请求时传参无太大区别。可传递的参数展示如下参数名描述url请求的接口headers一个字典包含要发送的http头cookies⼀个字典、列表或者RequestsCookieJar对象包含要发送的cookiesfiles⼀个字典包含要上传的⽂件data⼀个字典、列表或者字节串包含要发送的请求体数据json⼀个字典将被转换为JSON格式并发送params⼀个字典、列表或者字节串将作为查询字符串附加到URL上auth⼀个元组包含⽤⼾名和密码⽤于HTTP认证timeout⼀个浮点数或元组指定请求的超时时间proxies⼀个字典包含代理服务器的信息verify⼀个布尔值或字符串指定是否验证SSL证书上传参数选择paramsjson还是dataparams用于在URL中传递查询参数Query Parameters通常用于GET请求但也可以用于其他类型的请求json 用于在请求体Body中传递JSON格式的数据通常用于POST或PUT请求data用于在请求体Body中传递表单数据通常用于POST或PUT请求有了requests库可以实现对接口发起http请求然而自动化测试中我们需要编写⼤量的测试⽤例这些⽤例的组织、执⾏和管理也需要使用其他更强⼤的框架⸺pytest框架。requests 库专注于HTTP请求的发送⽽ pytest 框架则提供了测试的组织、执行和管理功能四自动化框架pytest4.1 pytest介绍pytest官方文档https://docs.pytest.org/en/stable/getting-started.html为什么用pytestpytest 是目前 Python 生态中最流行的测试框架之一它上手简单、功能强大非常适合接口自动化测试场景。相比 unittest 等传统框架pytest 在以下几个方面有明显优势简洁易用无需继承测试类也不需要编写繁琐的样板代码用普通的函数或类方法即可定义测试用例学习成本低。自动发现用例pytest 会自动扫描符合命名规则的文件和函数省去手动注册用例的麻烦让用例组织更加灵活。丰富的断言直接使用 Python 原生的 assert 语句即可完成断言配合 pytest 的失败信息展示定位问题更加直观。强大的插件生态支持参数化、fixture 夹具、失败重跑、生成 HTML 报告等众多扩展能力可以满足不同项目的测试需求。与 requests 无缝配合在接口自动化中pytest 负责用例的组织、执行和结果汇总requests 负责发送 HTTP 请求两者结合可以搭建出结构清晰、易于维护的自动化测试体系。4.2 安装pip install pytest8.3.2安装完成展示依旧是显示successfully为成功4.3 用例运行规则1. 文件名必须以test_开头或者_test结尾2.测试类必须以Test开头并且不能有__init__方法3.测试方法必须以test开头展示这里还可以通过观察是否有出现开始符号判断pytest是否安装成功当完成以上步骤后可直接通过命令行参数pytest运行符号条件的用例注意python类中不可以添加init方法class Test(): def __init__(self): print(-----init-------) def test_a(self): print(-----test_a----)结果展示由于pytest的测试收集机制测试类中不可以定义__init__ 方法。pytest采⽤自动发现机制来收集测试用例。它会自动实例化测试类并调用其所有以 test结尾的方法作为测试用例。如果测试 类中定义了 __init__ 方法那么当pytest实例化该类时__init__ 方法会被调⽤这可能会掩盖测试类的实际测试逻辑并引入额外的副作用影响测试结果的准确性。如果测试类中存在初始化操作应该采取什么方案呢为了避免使用 __init__ 方法建议在 pytest 中使⽤其他替代方案如使用setUp() 和tearDown() 方法、使用类属性、使用fixture 函数具体使用后续会讲解4.4 pytest命令参数pytest提供了丰富的命令行选项来控制测试的执行。以下是⼀些常⽤的pytest命令⾏参数及其使⽤说明。命令描述备注pytest在当前目录及其子目录中搜索并运行测试pytest -v增加输出的详细程度pytest -s显示测试中的print语句pytest test_module.py运⾏指定的测试模块pytest test_dir/运⾏指定⽬录下的所有测试pytest -k keyword只运⾏测试名包含指定关键字的测试pytest -m marker只运⾏标记为指定标记的测试pytest -q减少输出的详细程度pytest --htmlreport.html⽣成 HTML 格式的测试报告需要安装pytest-html插件pytest --cov测量测试覆盖率需要 安装pytest-cov插件示例一运行符合运行规则的用例执行代码pytest//这⾥不会输出测试⽤例中printf内容示例二详细打印并输出print内容执行代码pytest -s -v或者pytest -sv可以连写示例三指定文件/测试用例执行代码指定文件pytest 包名/文件名指定测试用例pytest 包名/文件名类名方法名提问当我们既要详细输出又要指定文件命令就会又臭又长而且每次运行都需要手动输入命令怎么解决呢这个时候就需要将相关配置参数统一放到pytest配合文件中详细内容我们下期再见五小结这周又混混噩噩但也不算吧定好了方向。后面我就要猛猛发力了预计九月15提离职然后准备秋招。好烦不想上学不想和不喜欢的人呆一块哦no