千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  IT问答库  >  零基础学软件测试

多个从0到自动化测试:我的逆袭路线图,每天只花2小时

发布:cli 2026-05-05 09:00

推荐答案

01 第多个:地基打不牢,后面全是坑

很多人学自动化测试,上来就啃Selenium、Postman。结果呢?一周后连断言是什么都搞不清。我犯过同样的错误,浪费了整整多个。

核心原则:先理解接口测试的本质,再动手。

接口测试到底在测什么?就3件事:

  • 请求发出去,服务器有没有返回正确的结果?
  • 参数变了,结果会不会跟着变?
  • 异常情况下,系统会不会崩?

第1周,我死磕了3个基础概念:

  • **HTTP协议**:GET和POST的区别、状态码200/404/500的含义
  • **JSON格式**:花2小时学完JSON的键值对、数组、嵌套结构
  • **API文档**:看懂请求地址、请求头、请求体、响应体

实战案例:我拿了一个公开的天气查询API练手。

```python

最简单的GET请求

import requests

url = "https://api.openweathermap.org/data/较高/weather"

params = {

"q": "Beijing",

"appid": "你的API密钥"

}

response = requests.get(url, params=params)

print(response.status_code) # 打印状态码

print(response.json()) # 打印响应数据

```

运行这段代码,我看到了返回的JSON数据。那一刻,我明白了:原来接口测试就是“发请求+看响应”。

第2周,我攻克了鉴权机制。没有鉴权,接口就是裸奔。我学了3种常见方式:

  • API Key:最简单,直接放在URL参数里
  • Token:先登录获取,再携带在请求头里
  • OAuth 较高:复杂但安全,企业级项目标配

实战案例:用Token调一个用户信息接口。

```python

import requests

先登录获取token

login_url = "https://api.example.com/login"

login_data = {"username": "test", "password": "123456"}

login_resp = requests.post(login_url, json=login_data)

token = login_resp.json()["token"]

用token请求用户信息

user_url = "https://api.example.com/user/profile"

headers = {"Authorization": f"Bearer {token}"}

user_resp = requests.get(user_url, headers=headers)

print(user_resp.json())

```

第3周,我学会了接口文档的“读心术”。一个合格的API文档会告诉你:

  • 请求方法(GET、POST、PUT、DELETE)
  • 必填参数和可选参数
  • 参数的数据类型(string、int、boolean)
  • 返回的字段含义

> 读不懂文档,接口测试就是瞎子摸象。

---

02 第多个:工具选对,效率翻10倍

工具不是越多越好,是越精越好。我踩过3个工具的坑,最后只留了2个。

工具1:Postman——接口调试的瑞士军刀

Postman是入门首选,没有之一。它解决了我3个痛点:

  • 不用写代码就能发请求
  • 可以保存测试用例,随时回放
  • 支持环境变量,切换开发/测试/生产环境

实战案例:用Postman测试一个“创建订单”接口。

  • 新建请求,选择POST方法
  • 输入URL:`https://api.example.com/orders`
  • 设置请求头:`Content-Type: application/json`
  • 填写请求体:

```json

{

"user_id": 123,

"product_id": 456,

"quantity": 2,

"total_price": 较高

}

```

  • 点击Send,查看响应状态码和返回数据
  • 添加断言:在Tests标签页写

```javascript

pm.test("状态码是201", function () {

pm.response.to.have.status(201);

});

pm.test("返回订单ID", function () {

var jsonData = pm.response.json();

pm.expect(jsonData.order_id).to.be.a('string');

});

```

工具2:Python + requests库——批量自动化的核武器

Postman适合手动调试,但一旦用例超过50个,就必须上脚本。我选了Python,因为:

  • 语法简单,10分钟就能上手
  • requests库封装了HTTP请求,代码量少
  • pytest框架天生支持参数化,数据驱动测试

实战案例:用pytest批量测试登录接口。

```python

import pytest

import requests

测试数据

test_cases = [

("admin", "admin123", True), # 正常用户

("admin", "wrongpass", False), # 错误密码

("", "admin123", False), # 空用户名

("admin@", "admin123", False), # 非法用户名

]

@pytest.mark.parametrize("username,password,expected", test_cases)

def test_login(username, password, expected):

url = "https://api.example.com/login"

data = {"username": username, "password": password}

response = requests.post(url, json=data)

if expected:

assert response.status_code == 200

assert "token" in response.json()

else:

assert response.status_code == 401

```

工具3:JMeter——性能测试的压舱石

第8周,我开始接触性能测试。JMeter虽然界面丑,但功能暴力:

  • 支持多线程并发,模拟1000个用户同时请求
  • 可以监控响应时间、吞吐量、错误率
  • 生成可视化报告,柱状图、折线图一目了然

实战案例:用JMeter压测登录接口。

  • 添加线程组:设置100个线程,循环10次
  • 添加HTTP请求:配置URL、方法、参数
  • 添加监听器:聚合报告、图形结果
  • 运行后看结果:平均响应时间<500ms,错误率<较高

> 工具是刀,思路是刀法。刀好不如刀法好。

---

03 第多个:从手动到自动,我只做了3件事

前多个,我还在手工点Postman。第多个,我开始写自动化脚本。转变的催化剂是多个。

项目1:电商系统接口自动化

这个系统有20个接口,包括用户注册、商品搜索、下单、支付、退款。我用了pytest + requests + Allure报告。

核心代码:参数化测试商品搜索功能。

```python

import pytest

import requests

import allure

base_url = "https://api.ecommerce.com"

search_data = [

("手机", 1, 20, 200), # 正常搜索

("", 1, 20, 400), # 空关键词

("xyz", 1, 20, 200), # 无结果搜索

("手机", -1, 20, 400), # 页码非法

]

@allure.story("商品搜索")

@pytest.mark.parametrize("keyword,page,size,expected_code", search_data)

def test_search_product(keyword, page, size, expected_code):

url = f"{base_url}/products/search"

params = {"keyword": keyword, "page": page, "size": size}

response = requests.get(url, params=params)

assert response.status_code == expected_code

if expected_code == 200:

data = response.json()

assert "total" in data

assert len(data["items"]) <= size

```

项目2:微信小程序接口测试

小程序接口特殊在:需要先获取access_token,而且token有2小时有效期。我写了一个自动获取并缓存token的模块。

```python

import requests

import time

from functools import lru_cache

class WeChatAPI:

def __init__(self, appid, secret):

self.appid = appid

self.secret = secret

self.token = None

self.token_expire_time = 0

def get_token(self):

if time.time() < self.token_expire_time:

return self.token

url = "https://api.weixin.qq.com/cgi-bin/token"

params = {

"grant_type": "client_credential",

"appid": self.appid,

"secret": self.secret

}

response = requests.get(url, params=params)

data = response.json()

self.token = data["access_token"]

self.token_expire_time = time.time() + data["expires_in"] - 60

return self.token

def send_template_msg(self, openid, template_id, data):

token = self.get_token()

url = f"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={token}"

body = {

"touser": openid,

"template_id": template_id,

"data": data

}

response = requests.post(url, json=body)

return response.json()

使用

wechat = WeChatAPI("your_appid", "your_secret")

result = wechat.send_template_msg("user_openid", "template_id", {"name": "测试"})

print(result)

```

项目3:定时任务 + 邮件报告

自动化测试的价值在于持续运行。我用了Linux的crontab,每天凌晨2点跑一次全量用例,跑完自动发邮件。

```python

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import subprocess

import time

def run_tests():

"""运行pytest并生成报告"""

result = subprocess.run(

["pytest", "--alluredir=./reports", "--html=report.html"],

capture_output=True, text=True

)

return result.returncode == 0

def send_email(success, report_path):

"""发送测试报告邮件"""

msg = MIMEMultipart()

msg["From"] = "tester@company.com"

msg["To"] = "team@company.com"

msg["Subject"] = f"接口自动化测试报告 - {'通过' if success else '失败'}"

with open(report_path, "r") as f:

html_content = f.read()

msg.attach(MIMEText(html_content, "html"))

with smtplib.SMTP("smtp.company.com", 587) as server:

server.starttls()

server.login("tester@company.com", "password")

server.send_message(msg)

主流程

if __name__ == "__main__":

start_time = time.time()

is_success = run_tests()

elapsed = time.time() - start_time

send_email(is_success, "report.html")

print(f"测试用时{elapsed:.2f}秒,结果:{'成功' if is_success else '失败'}")

```

> 自动化不是写一次脚本,而是让脚本替你干活。

---

04 时间规划:每天2小时,多个足够

很多人觉得多个太短。我用数据说话:每天2小时,多个就是180小时。180小时足够掌握任意一门技能。

周计划模板:

| 时间段 | 学习内容 | 实战任务 |

|--------|----------|----------|

| 第1周 | HTTP协议、JSON | 用requests调通一个API |

| 第2周 | 鉴权机制、Postman | 用Postman完成登录接口测试 |

| 第3周 | API文档解读 | 独立读通一个企业级API文档 |

| 第4周 | Python基础+requests | 写10个接口测试脚本 |

| 第5周 | pytest框架 | 参数化测试登录接口 |

| 第6周 | 断言+数据驱动 | 完成商品模块接口测试 |

| 第7周 | JMeter入门 | 压测登录接口 |

| 第8周 | 性能指标分析 | 输出性能测试报告 |

| 第9周 | 项目实战1 | 电商系统接口自动化 |

| 第10周 | 项目实战2 | 小程序接口测试 |

| 第11周 | CI/CD集成 | 把脚本挂到Jenkins |

| 第12周 | 总结+面试准备 | 输出作品集 |

每日时间分配:

  • 30分钟:看视频/文档(B站、官方文档)
  • 1小时:写代码+调试(遇到报错不要慌,先看错误信息)
  • 30分钟:复盘+记录(写学习笔记,哪怕只有3行)

避坑指南:

  • 不要同时学3个工具,先死磕1个
  • 不要看完视频再动手,边看边敲
  • 不要追求完美,先跑通再优化

> 每天2小时,多个后,你比较高的人强。

---

05 面试通关:把实战项目讲成故事

学完技术,最后一步是求职。面试官不看你会多少理论,只看你做过什么。

必问问题1:描述一个你做的接口自动化项目。

标准回答结构:

  • 项目背景:测试什么系统,有多少接口
  • 技术选型:为什么选Python+pytest,不选Java+TestNG
  • 核心难点:鉴权怎么处理、数据怎么准备
  • 最终成果:测试覆盖了多少接口,发现了多少bug

实战话术:

“我做过一个电商系统的接口自动化项目,覆盖了20个核心接口。技术栈选了Python+pytest,因为Python生态好,requests库写起来快。较大的难点是订单状态转换——创建订单后要支付,支付后要发货,状态环环相扣。我用了pytest的fixture机制,把每个状态的前置条件抽出来复用。最终测试覆盖率达到较高,上线前提前发现了3个支付接口的bug。”

必问问题2:接口测试和UI测试的区别是什么?

一句话答案:接口测试测的是“功能正确性”,UI测试测的是“用户交互体验”。

延伸回答:

  • 接口测试:速度快(毫秒级响应),稳定性高,适合做CI
  • UI测试:速度慢(秒级响应),容易受环境干扰,适合做冒烟测试
  • 实际工作中:接口测试占较高,UI测试占较高

必问问题3:怎么处理接口依赖?

经典解法:用pytest的`request` fixture传递数据。

```python

import pytest

@pytest.fixture

def create_order():

"""创建订单,返回订单ID"""

url = "https://api.example.com/orders"

data = {"user_id": 123, "product_id": 456, "quantity": 1}

response = requests.post(url, json=data)

return response.json()["order_id"]

def test_pay_order(create_order):

"""支付订单,依赖create_order返回的订单ID"""

order_id = create_order

url = f"https://api.example.com/orders/{order_id}/pay"

response = requests.post(url)

assert response.status_code == 200

```

> 面试不是背答案,是讲你踩过的坑和填坑的方法。

---

多个前,我连接口是什么都不知道。现在,我每天用脚本自动跑完所有用例。你只差一个开始。

最新问答资讯

01 unity用什么编程语言?unity学习难度大吗

学习 unity 语言
6020 人关注

02 python容易学吗?学好python有什么好处?

学习 python 工作 培训
5389 人关注

03 html是什么语言?html学习难吗?

学习 html 语言 可以
5062 人关注

04 c语言难学吗?c语言学好要多久?

语言 技术 学习
4733 人关注

06 学好平面设计要多久?报速成班靠谱吗?

平面 设计 学习 时间
4238 人关注

相关问题

多个从0到自动化测试:我的逆袭路线图,每天只花2小时

北京软件测试培训机构TOP10评测

北京软件测试培训机构评测

JMeter vs LoadRunner:性能测试工具选型,90%的人选错了

从传统到敏捷,你的测试团队为什么慢人一步?

3步搭建Cypress测试框架,前端回归效率提升80%

测一测
你知道多少IT梗