ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VS Code Python测试入门:从零开始的完全图解教程(含TaoToken统一Key配置)

VS Code Python测试入门:从零开始的完全图解教程(含TaoToken统一Key配置) 1. 为什么在 VS Code 里跑 Python 测试总卡在第一步很多人第一次在 VS Code 里写 Python 测试卡住的地方往往不是 unittest 语法而是环境没串起来测试视图点开是空的绿色运行按钮不出现覆盖率按钮灰着终端里python -m unittest又报ModuleNotFoundError。我自己刚开始也是这样代码明明写对了就是跑不起来。这篇要解决的就是这条链路VS Code Python 测试从零起步装扩展、写 unittest 用例、跑单个和全部测试、调试断点、生成覆盖率报告最后把模型调用相关的 Key 统一收口到 TaoToken避免项目里到处散落不同厂商的 Key。适合刚接触 Python 测试、或者测试能跑但覆盖率一直看不到的人。核心检索词先明确VS Code Python 测试、unittest 用例、覆盖率分析。这三件事在 VS Code 里其实是一套流程测试视图负责发现用例unittest 负责执行断言coverage 负责统计行覆盖。只要配置对了一次后面加用例就是复制粘贴的事。我试过把测试配置写进settings.json之后团队里新拉下来的项目打开就能直接跑不用每个人再点一遍「配置测试」。下面按可跟做的顺序来每一步都有可复制的配置和验证动作。2. TaoToken 统一 Key 配置让测试里的模型调用不再乱写测试时经常会遇到一种情况被测代码里调用了大模型接口比如一个函数内部请求了某个模型的 chat completions。这时候测试要么 mock 掉要么真的发请求。mock 当然更干净但有时候你想做一次集成冒烟测试确认 Key、Base URL、模型 ID 这条链路是通的。问题在于不同项目、不同人机器上Key 的来源五花八门有的写在.env有的硬编码在config.py有的用系统环境变量。测试一跑就 401排查半天发现是环境变量没加载。我的做法是把模型访问统一收口到 TaoToken一个 Key 管多个模型测试环境也走同一套 Base URL。TaoToken 在这里的角色是统一模型接入层官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。注意 API 地址不带 UTM 参数配置里就写这个。你需要准备三件套缺一不可Base URLhttps://taotoken.net/apiAPI Key在控制台创建形如sk-...Model ID比如claude-sonnet-4-5或你在模型列表里选定的那个这三件套在后面的settings.json、.env、以及测试用的conftest风格配置里都会出现。先把它们记下来或者写进项目根目录的.env# .env 文件不要提交到 git TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_API_KEYsk-你的key TAOTOKEN_MODEL_IDclaude-sonnet-4-5然后在.gitignore里加上.env。这一步很关键我见过有人把 Key 提交上去第二天就收到额度异常提醒。如果你用的是 Claude Code 这类编码工具它的配置里同样需要 Base URL、Key、Model ID 三件套指向 TaoToken 的 API 地址即可。控制台创建 Key 的入口在 https://taotoken.net/console 模型对话调试在 https://taotoken.net/models 接入文档在 https://taotoken.net/doc 。测试阶段建议先用模型对话页面确认 Key 能用再写进代码。为什么要在测试入门文章里讲 Key 配置因为覆盖率分析跑的是真实代码路径如果被测函数里有模型调用你不把 Key 配好测试要么失败要么被 skip覆盖率数字就不好看。统一 Key 之后本地、CI、同事机器上行为一致排障成本大幅下降。3. 可复制配置settings.json 与 launch.json 完整片段这一节是全文最核心的部分配置直接复制就能用。VS Code 的 Python 测试依赖两个文件工作区级的.vscode/settings.json和.vscode/launch.json。前者告诉扩展用哪个测试框架、测试文件在哪后者负责调试测试时的启动参数。先看settings.json。路径是项目根目录下的.vscode/settings.json如果目录不存在就手动建一个{ python.testing.unittestEnabled: true, python.testing.pytestEnabled: false, python.testing.unittestArgs: [ -v, -s, ./tests, -p, test_*.py ], python.testing.autoTestDiscoverOnSaveEnabled: true, python.testing.cwd: ${workspaceFolder}, python.envFile: ${workspaceFolder}/.env, python.analysis.extraPaths: [ ${workspaceFolder}/src ] }逐项说明一下这些参数我踩过坑unittestEnabled设为 truepytestEnabled设为 false。两个都开会导致测试视图里用例重复出现或者发现行为混乱。如果你项目用 pytest就把这两个值对调unittestArgs换成pytestArgs。unittestArgs里的-s ./tests指定测试根目录-p test_*.py指定文件匹配模式。注意这里的-s是 start directory不是文件路径。如果你的测试文件和源码平铺在同一层就写-s .。autoTestDiscoverOnSaveEnabled设为 true保存文件时自动重新发现用例。这个功能很省事但大项目里如果测试文件特别多可以关掉改成手动刷新。python.envFile指向.env这样测试进程启动时会自动加载里面的TAOTOKEN_BASE_URL等变量。这是让测试读到统一 Key 的关键一行。python.analysis.extraPaths加上src解决import找不到模块的问题。很多人的ModuleNotFoundError就是源码目录没进 Python 路径。再看launch.json路径是.vscode/launch.json{ version: 0.2.0, configurations: [ { name: Debug unittest 当前文件, type: debugpy, request: launch, module: unittest, args: [ -v, ${file} ], console: integratedTerminal, cwd: ${workspaceFolder}, envFile: ${workspaceFolder}/.env, justMyCode: false }, { name: Debug unittest 全部测试, type: debugpy, request: launch, module: unittest, args: [ discover, -v, -s, ./tests, -p, test_*.py ], console: integratedTerminal, cwd: ${workspaceFolder}, envFile: ${workspaceFolder}/.env, justMyCode: false } ] }type用debugpy这是现在 Python 扩展推荐的调试器类型老的python类型已经逐步弃用。module设为unittestargs里传discover就是发现并运行全部测试。envFile同样指向.env保证调试时也能读到 TaoToken 的 Key。justMyCode设为 false调试时可以步入第三方库和标准库排查测试框架内部行为时有用。平时可以设 true 减少干扰。配置写完后按CtrlShiftP打开命令面板输入Python: Configure Tests确认一次框架选择。然后打开测试视图左侧试管图标应该能看到用例列表。如果还是空的看第 5 节的排障。4. 从写用例到覆盖率报告逐步验证动作配置就绪后开始写第一个测试。项目结构建议这样myproject/ ├── .vscode/ │ ├── settings.json │ └── launch.json ├── .env ├── src/ │ └── inc_dec.py └── tests/ └── test_inc_dec.pysrc/inc_dec.py内容def increment(x): return x 1 def decrement(x): return x - 1tests/test_inc_dec.py内容import unittest from src import inc_dec class TestIncrementDecrement(unittest.TestCase): def test_increment_positive(self): self.assertEqual(inc_dec.increment(3), 4) def test_increment_zero(self): self.assertEqual(inc_dec.increment(0), 1) def test_decrement_positive(self): self.assertEqual(inc_dec.decrement(3), 2) def test_decrement_zero(self): self.assertEqual(inc_dec.decrement(0), -1) def test_invalid_input(self): with self.assertRaises(TypeError): inc_dec.increment(a) if __name__ __main__: unittest.main()保存后测试视图里应该出现 5 个用例。点击单个用例旁边的绿色三角运行单个测试点击顶部工具栏的运行全部按钮跑整个套件。终端会输出类似test_decrement_positive (tests.test_inc_dec.TestIncrementDecrement) ... ok test_increment_positive (tests.test_inc_dec.TestIncrementDecrement) ... ok ... Ran 5 tests in 0.002s OK接下来是覆盖率。先安装 coveragepip install coverage用命令行跑一次确认数据能生成coverage run -m unittest discover -s ./tests -p test_*.py coverage report -mcoverage report -m会输出每个文件的覆盖率百分比和未覆盖行号。再生成 HTML 报告coverage html打开htmlcov/index.html能看到逐行标色的源码绿色是覆盖红色是未覆盖。回到 VS Code测试视图顶部有一个「Run Test with Coverage」按钮试管加对勾的图标。点击后编辑器里被覆盖的行会显示绿色背景未覆盖行显示红色背景测试视图下方出现覆盖率百分比。这一步能成功说明整条链路通了。如果被测代码里有模型调用比如一个函数内部用requests请求 TaoToken 的 API测试时可以先用 mock 隔离也可以做一次真实冒烟。真实冒烟时确保.env里的TAOTOKEN_BASE_URL和TAOTOKEN_API_KEY已加载否则会 401。模型 ID 也要对上写错模型名会返回模型不存在的错误。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节按真实报错来对照都是我在测试和接入过程中遇到过的。401 Unauthorized。测试里发模型请求返回 401九成是 Key 没加载或写错。检查三处.env里TAOTOKEN_API_KEY是否以sk-开头settings.json的python.envFile是否指向了正确的.env路径测试代码里读取环境变量用的名字是否和.env一致。如果用的是os.getenv(TAOTOKEN_API_KEY)名字必须完全匹配。还有一种情况是 Key 被撤销了去控制台重新创建一个。local proxy failed。这个报错通常出现在请求根本没发出去的时候比如 Base URL 写成了https://taotoken.net而漏了/api或者本地网络配置有问题。先确认 Base URL 是https://taotoken.net/api然后用curl单独验证一次curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:claude-sonnet-4-5,messages:[{role:user,content:ping}]}如果 curl 通而测试不通问题在测试代码或环境变量加载如果 curl 也不通检查 Key 和模型 ID。reading choices 相关报错。这类错误一般是响应结构解析失败常见原因是模型 ID 写错返回了错误对象而不是正常的 choices 数组。确认TAOTOKEN_MODEL_ID和控制台模型列表里的一致。另外如果测试里 mock 了响应mock 的 JSON 结构要和真实响应对齐否则解析会炸。OAuth 相关报错。如果你用 Claude Code 或其他编码工具接入配置里需要 Base URL、Key、Model ID 三件套。OAuth 报错通常是因为工具尝试走默认的登录流程而你要的是 API Key 模式。在工具的配置里显式指定 API Key 和 Base URL指向 TaoToken 的 API 地址不要让它走 OAuth 授权。Claude Code 的配置文档在 https://taotoken.net/doc 里有说明Coding Plan 相关在 https://taotoken.net/coding-plan 。测试视图用例不显示。检查unittestArgs的-s目录是否存在-p模式是否匹配文件名。文件名必须是test_*.py或*_test.pytests目录下要有__init__.py某些 Python 版本需要。改完配置后按CtrlShiftP运行Python: Refresh Tests。覆盖率按钮灰色。确认coverage已安装且当前 Python 解释器就是装了 coverage 的那个。VS Code 右下角可以切换解释器选错解释器是常见原因。6. 把 Key 和测试配置固化下来走到这里你应该已经能在 VS Code 里跑通第一个 unittest 用例看到覆盖率报告并且知道 401 和 local proxy failed 怎么排查。最后说一个实用习惯把.env模板化。在项目里放一个.env.example内容只有变量名和占位符TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_API_KEYsk-your-key-here TAOTOKEN_MODEL_IDclaude-sonnet-4-5新同事拉下代码后复制成.env填自己的 Key测试配置和 Key 来源就统一了。测试代码里读环境变量不硬编码CI 里用 secrets 注入同样的变量名。这样本地、CI、同事机器三处行为一致覆盖率数字才有可比性。如果你还没创建 Key去 https://taotoken.net/api-keys 建一个然后在 https://taotoken.net/models 用模型对话页面发一条消息确认可用。接入细节看 https://taotoken.net/doc 长期做编码和 Agent 任务可以了解 https://taotoken.net/coding-plan 。测试跑通之后下一步就是把覆盖率阈值加进 CI让低于阈值的提交直接失败这个可以下次再展开。
返回列表