资讯详情

资讯详情

Windows下搭建Python接口自动化测试环境

很多刚开始接触接口自动化的朋友第一个拦路虎往往不是怎么写用例而是连一个能稳定跑起来的本地环境都搞不定。我在带新人或者帮同事排查环境问题时见过太多因为Python版本不对、依赖装不上、Path没配好而卡在第一步的情况。这篇内容不扯高深理论就聚焦在Windows环境上从零开始一步步把Python、pytest、requests这套接口自动化最常用的组合搭建起来并且确保你跑通第一个真正发请求、做断言的测试用例。把这套环境搞利索后面写脚本、跑CI、出报告才谈得上效率和稳定。1. 整体思路拆解为什么是Python、pytest和requests工欲善其事必先利其器但选器更重要。做接口自动化语言和框架的选择五花八门Java有RestAssuredPython有requests甚至Postman、JMeter这类工具也能做。那为什么我们入门选择Python pytest requests这套组合是老牌且经过大量项目验证的方案不炫技但极其稳。1.1 Python生态在接口测试里的统治力接口自动化的本质就是模拟HTTP请求然后对返回的响应做校验。Python的requests库几乎是这一领域的标准库API设计简洁代码可读性极高。你用十行Python代码能写清楚的请求逻辑用Java可能要二十行而且Python是解释型语言写完了直接跑不需要编译这对快速调试接口脚本是非常大的效率提升。再加上pytest这个测试框架用例编写、断言、执行、固件管理、数据驱动、报告生成全链路都有成熟方案社区里随便搜一个问题基本都有现成答案。1.2 pytest与unittest的取舍有人会问Python自带的unittest不也能做测试吗为什么非要用pytest我的看法是unittest更像是一个规范约束写起来比较繁琐类和方法的结构对于纯接口测试来说有点重。pytest则灵活得多你甚至可以不写类直接写函数级别的用例用assert原生断言就行入门成本极低。更重要的是pytest海量的插件比如pytest-html生成报告、pytest-xdist并行执行、pytest-assume多重断言这些都是unittest实现起来比较费劲或者没有官方方案的能力。既然选择了接口自动化这条路直接用pytest起步可以少走很多弯路。1.3 环境隔离意识学习阶段就要打好底子初学者最容易忽略的是Python环境的隔离问题。很多人图省事把所有依赖包一股脑装到系统Python里今天装个django明天装个pytest后天发现某个库的版本冲突了一升级老的脚本全崩了。在入门阶段使用Python自带的venv虚拟环境把当前项目的依赖隔离起来是一个应该养成的肌肉记忆。虚拟环境就像给每个项目开一个独立的小房间房间里装什么软件怎么折腾都不会影响其他房间这就是环境隔离的价值。后面文章里所有依赖安装都建议在虚拟环境下进行。1.4 版本选择怎么选稳稳当当的Python版本版本选择上建议直接上3.11或者3.12的稳定版。有些老项目还在用2.7但那是历史遗留问题新入门的绝对不要再碰。requests、pytest这些库对3.12的支持已经很完善不用担心兼容性。还有一点安装时记得勾选Add Python to PATH这是无数新手踩过的坑不勾选的话后续在命令行里敲python会直接提示找不到命令。2. 基础环境安装Python和依赖库的准备思路理清了我们开始动手。这一部分会把安装Python、弄好虚拟环境、装VSCode这个过程完整走一遍每个步骤我都会说明操作意图和踩坑点。2.1 安装Python解释器与验证打开Python官网python.org在Downloads页面找到Windows installer (64-bit)。发行版本直接挑Downloads里最新的稳定版本就行注意看官网给的上方高亮版本。双击安装包之后重点来了第一个页面最下方的Add python.exe to PATH一定要记得勾选。这个选项如果漏掉后面在CMD或者PowerShell里运行python命令就会报“python 不是内部或外部命令”安装完发现用不了十有八九就是这个原因。然后点击Install Now等待安装完成。验证是否安装成功按WinR输入cmd在命令行窗口里执行python --version正常会输出类似 Python 3.12.x 的版本号。如果输出了版本号说明Python安装成功且环境变量生效。如果提示找不到命令大概率是PATH没配好可以卸载重装也可以手动去系统环境变量里检查是否添加了Python安装目录。2.2 使用venv创建虚拟环境我们选择一个工作目录这里以D:\auto_api为例。目录建立好之后在文件夹地址栏输入cmd快捷打开命令行。在项目管理里这一步就是在项目根目录初始化环境python -m venv venv这行命令会在当前目录下创建一个名为venv的文件夹里面放着一个独立的Python解释器环境。激活虚拟环境Windows下执行venv\Scripts\activate激活成功之后命令行前面会出现一个(venv)前缀比如(venv) D:\auto_api一看就知道现在是在隔离环境里操作装什么都只影响当前项目。提示退出虚拟环境用deactivate命令。这个独立环境后续安装的所有依赖包都会放在venv\Lib\site-packages下面不会污染全局Python。2.3 升级pip与配置镜像源pip是Python的包管理工具装第三方库全靠它。刚创建完虚拟环境pip版本可能不是最新的先升级一下python -m pip install --upgrade pip这里有一个我强烈建议的实用操作就是配置国内镜像源。直接下载外网的包资源速度极慢而且经常超时配置镜像之后安装依赖基本秒下。根据你的网络条件可以选择清华、阿里云、豆瓣等镜像。以清华源为例在命令行执行pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这个命令等同于把默认的PyPI下载源切换成国内镜像后续所有的pip install命令都会自动走镜像极大的提升下载速度。这个操作属于“环境搭建里的看不见的细节”配置好之后后面装包明显顺畅很多。2.4 安装requests、pytest、pytest-html、allure-pytest环境激活好源也换好了现在安装核心依赖。pip install requests pytest pytest-html allure-pytest这里一并装了几个常用的包逐个说明用途requests发送HTTP请求的库做接口测试几乎每个脚本都会用到核心中的核心。pytest测试框架负责用例的发现、执行、断言和各种前置后置操作相当于整个测试流程的调度器。pytest-htmlpytest的插件运行用例后可以生成一个HTML格式的测试报告界面比命令行直观得多适合给团队评审或者自己留存归档。allure-pytestallure报告框架的pytest适配器allure报告相比pytest-html要专业很多有历史记录、分类、步骤层级展示适合后期项目做大之后看趋势分析。这是较为完整的报告方案如果觉得入门初次配置太多可以先跳过但我建议早些接触。如果安装过程中出现下载慢或timeout说明上面配置的镜像源没生效可以检查一下C:\Users\你的用户名\pip\pip.ini这个配置文件是否存在且有内容。安装完成后可以快速验证一下能否正常导入这些库python -c import requests, pytest; print(ok)输出ok说明所有库已经顺利导入环境的基础部分就准备好了。2.5 安装VSCode与Python插件用记事本写代码不是不行但效率太低。VSCode现在是写Python的主流编辑器免费、轻量、插件生态强大。安装时一路默认即可有几个细节勾选“添加到PATH”这个选项方便后续在任意目录直接用code命令打开编辑器。安装完成后打开Extensions面板CtrlShiftX搜索“Python”官方插件安装微软出的那个版本。这是Python开发的体验核心提供代码高亮、智能提示、调试等功能。如果有用到allure报告可以再装一个“Allure”插件用来看局域网内生成的测试报告文件比较方便。打开VSCode按下CtrlShiftP输入Python: Select Interpreter选择我们刚才创建的虚拟环境D:\auto_api\venv。这一步非常关键如果选错解释器代码里明明安装了库编辑器却依然报ModuleNotFoundError这种情况经常会让人误以为是环境没搭好其实只是VSCode没指向正确环境。3. 实操搭建一个小而全的接口自动化项目环境只是地基真正验证环境是否可用的是跑通一条完整的链路从项目初始化到写出请求代码再到用例执行和报告输出。这一节把最简却功能完整的项目结构走一遍。3.1 创建项目结构与配置文件我们围绕D:\auto_api创建一个接口项目。结构可以后面慢慢优化初学阶段这样分D:\auto_api ├── venv # 虚拟环境 ├── test_cases # 测试用例目录 │ └── test_login.py ├── reports # 测试报告目录 └── requirements.txt # 依赖清单这个分层思路是比较直观的test_cases专门放用例reports放生成的报告requirements.txt记录项目依赖。这么做的好处是项目换一台电脑或者交给同事只需要在项目根目录执行一条pip install -r requirements.txt就能把依赖全部装回来。在requirements.txt里写入requests2.31.0 pytest8.1.1 pytest-html4.1.0 allure-pytest2.13.2固定版本号看着麻烦但实际很有必要尤其是团队协作时避免有人擅自升级包版本导致行为不一致。3.2 编写第一个接口测试用例这里用一个公开的测试接口或其他稳定可用的httpbin接口举例地址https://httpbin.org/get这是一个专门用来测试HTTP请求的测试接口只要发一个GET它就会把请求参数原样返回。非常适合验证环境。在test_cases目录下创建test_httpbin.py写入import requests def test_get_request(): url https://httpbin.org/get params {name: test, age: 18} response requests.get(url, paramsparams, timeout10) # 断言HTTP状态码 assert response.status_code 200 # 断言接口返回的字段与请求参数一致 resp_json response.json() assert resp_json[args][name] test assert resp_json[args][age] 18说明一下思路。requests.get发送了一个带查询参数的GET请求timeout10是设置10秒超时防止接口无响应时请求一直卡死。断言部分一个是response.status_code这是接口最基本的健康状况指标另一个是响应体内容response.json()把返回的JSON字符串解析成字典然后取值与预期数据对比。这就是接口自动化最核心的三个动作发请求、看状态、查内容。3.3 运行用例与生成HTML报告在项目根目录D:\auto_api下执行命令python -m pytest test_cases\test_httpbin.py -v --htmlreports/report.html --self-contained-html参数说明-v显示用例执行的详细结果会列出每个用例的通过/失败状态。--htmlreports/report.html指定生成的HTML报告路径。--self-contained-html把CSS、JS等资源嵌入进单个HTML文件方便发给别人查看时不存在资源引用丢失问题。执行成功的话终端会输出像这样的一句话1 passed in 2.31s这就是一次成功的接口自动化执行回显。打开reports目录下的report.html就能在浏览器里看到规整的测试报告包含用例名、状态、运行时长等信息。3.4 引入allure报告基于常见实践的补充pytest-html足够入门但到了项目中期我强烈推荐升级到allure报告。它最大的优势是能将每个请求和响应过程清晰整理成用例步骤的展示。环境好配两步走先下载allure命令行工具。大多数人会选择通过包管理器install allure例如使用Windows下通过包管理器安装或者直接下载ZIP包解压后把bin目录添加到PATH。如果安装起来觉得繁琐也可以直接用基于pytest-html的方案先适应后面熟练了再切allure。然后在代码里配合使用让报告更精细import requests import allure allure.title(验证GET请求参数回显功能) allure.description(发送查询参数到httpbin验证返回结果是否一致) def test_get_request(): with allure.step(发送GET请求): url https://httpbin.org/get params {name: test, age: 18} response requests.get(url, paramsparams, timeout10) with allure.step(校验响应结果): assert response.status_code 200 resp_json response.json() assert resp_json[args][name] test执行时命令换成pytest test_cases\test_httpbin.py --alluredirreports\allure-results然后生成网页报告allure serve reports\allure-results这个命令会自动启动本地服务并在浏览器打开报告页面整个过程会自动生成临时HTML报告可以看到更专业的用例分层展示。做这一步是环境搭建的一次进阶为后续工作做了很好的铺垫。4. 环境搭建中的常见问题与排错就算照着教程一步步做还是免不了遇到意外。这里把我平时被问到最多的环境类问题整理成一个速查表每个问题都有具体的排查思路。4.1 pip安装依赖超时或下载速度慢现象执行pip install安装包时进度条长时间不动随后提示“Read timed out”或Retrying。原因很简单默认PyPI源在海外国内访问不稳定。解决办法是配置镜像源pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple如果已经配置了还是慢可以临时换源再试一次pip install requests -i https://mirrors.aliyun.com/pypi/simple/还有一种情况是公司内网限制对外访问那得在pip配置里设置代理或者使用内网镜像这个要根据实际网络环境再定。4.2 VSCode中import requests报错现象命令行执行脚本没问题但在VSCode的编辑器里打开文件import requests标着红波浪线提示ModuleNotFoundError: No module named requests。多数原因是VSCode选择的解释器不是项目里的虚拟环境。命令行用的是venv里的Python而VSCode当前绑定的是全局Python或者别的环境两边环境不一致导致。解决办法右下角状态栏点击Python版本号或者按CtrlShiftP输入Python: Select Interpreter选择D:\auto_api\venv\Scripts\python.exe。选对了之后红波浪线就会消失。如果选了还是有问题检查venv\Lib\site-packages里是否真的有requests这个文件夹。没有的话在虚拟环境激活状态下手动装一遍。4.3 接口请求超时与SSL报错现象执行脚本时卡住不动或者直接报requests.exceptions.ConnectTimeout还有可能报SSLError证书验证失败。超时原因可能是访问的目标接口网络不稳定先检查网络能否直接访问该接口地址浏览器访问试试。如果浏览器能打开但脚本报错检查是不是需要代理才能访问外网。遇到这种情况requests请求可以增加一个参数proxies {http: http://127.0.0.1:7890, https: http://127.0.0.1:7890} requests.get(url, proxiesproxies, timeout10)SSL证书报错一般是自签名证书或者测试环境证书未通过验证。测试环境下可以暂时跳过但要清楚这是不安全的操作仅限本地联调用requests.get(url, verifyFalse)不过这个做法在生产环境绝不能用。同理关于网络代理配置这块需要根据实际工作情况决定是否生效不建议代码里硬编码代理。4.4 测试用例执行后中文乱码现象HTML报告标题或者print输出的中文显示成乱码命令行里显示的也是方框或者问号。这类问题的根源一般是控制台和文件的编码不一致。在脚本开头加上# -*- coding: utf-8 -*-并且在pytest配置里忽略掉一些编码相关的warning。如果是在Windows命令行里执行可以在运行前执行chcp 65001这条命令把当前命令行窗口切换为UTF-8编码直接解决中文显示乱码的问题。比较省心的做法是在项目根目录创建pytest.ini配置文件声明测试工程配置[pytest] testpaths test_cases这样项目执行时pytest只扫描test_cases目录并且相关配置统一在此管理避免以后几个测试目录导致用例重复发现的坑。4.5 venv目录被误删或环境错乱现象之前项目运行还好好的某天突然报告No module named pytest检查发现venv目录空了或者被删除了。如果venv出现异常处理方式就是重新创建不用怕deactivate rmdir /s venv python -m venv venv venv\Scripts\activate pip install -r requirements.txt把venv删掉重建是完全无损且常规的做法因为venv里只有依赖包真正的代码都在test_cases里。养成将依赖写进requirements.txt的习惯重建成本会很低。5. 环境验证与后续扩展环境搭建完成后最好做一次全面的验证确认整条链路是通的。这一步可以避免日后在写代码的时候才发现环境配置的问题。验证清单如下python --version输出正常pip --version输出正常虚拟环境激活后用pip list能看到requests、pytest等包VSCode解释器指向venv代码无红波浪线运行pytest test_cases\test_httpbin.py能显示1 passed查看reports/report.html能看到完整的测试报告这些点全部确认通过就可以放心大胆地开始写更多测试用例了。在这个基础环境之上后面还有很多方向可以展开。比如引入yaml或者json文件做测试数据分离让用例参数化比如封装一个统一的request_handler给所有用例调用再比如结合Jenkins定时执行用例把生成的报告存档以及引入pytest依赖的fixture做接口前置状态预置和后置数据清理。这些都是在整个环境跑通之后可以往里填充的内容。按照这个顺序从环境搭建到用例执行、报告输出整个流程就跑通了。这个过程踏踏实实走下来你会发现“接口自动化”并没有那么玄乎环境干净了脚本写起来就是水到渠成的事。最后分享一个小技巧把venv建在项目根目录下面然后git提交时在.gitignore里把这个venv目录排除掉。这样哪怕换电脑、换人协作仓库里也不会带着一堆几千个文件的依赖有requirements.txt就足够了哪个环境需要就现场pip install -r装一遍干净又稳定。这套环境配置实测下来在Windows 10/11上面都是通走无阻的。你要是卡在某一步过不去多半是哪个细节没对上回头检查一下勾选和路径大概率就能解决。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →