首页
Preview

松勤-Python测试开发项目实战视频课程

t016fcb5002376c7b1d_副本 - 副本.jpg

在软件行业,“点点点”的手工测试时代正在逐渐远去。随着 DevOps、自动化测试和持续集成的普及,企业对测试开发工程师的需求日益迫切。从功能测试向测试开发的转型,不仅是一次职位的跃迁,更是思维方式的彻底革新。

本文将基于“测试开发”的核心技能体系,深度解析 Python 自动化进阶之路,并提供实战代码,带你理解高阶测试工程师的技术底蕴。

一、 进阶基石:面向对象的测试代码设计 初级测试工程师写脚本往往是“面条代码”,从头写到尾,复用性极差。进阶的第一步是学会面向对象编程(OOP),将测试页面、测试步骤、断言逻辑封装成类。

核心理念:Page Object Model (POM) 模式 POM 是 Web 自动化测试的最佳实践,它将页面定位与业务逻辑分离。

代码实战:基于 Selenium 的 POM 封装

from selenium import webdriver from selenium.webdriver.common.by import By import time

1. 基础页面封装:封装通用的浏览器操作

class BasePage: def init(self, driver): self.driver = driver

def find_element(self, *loc):
    """
    封装查找元素,增加显式等待和异常处理
    loc: 定位器元组,例如 (By.ID, "kw")
    """
    try:
        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.support import expected_conditions as EC
        element = WebDriverWait(self.driver, 10).until(
            EC.presence_of_element_located(loc)
        )
        return element
    except Exception as e:
        print(f"元素未找到: {loc}, 错误: {e}")
        return None

def send_keys(self, text, *loc):
    element = self.find_element(*loc)
    if element:
        element.clear()
        element.send_keys(text)

def click(self, *loc):
    element = self.find_element(*loc)
    if element:
        element.click()

2. 具体页面封装:登录页

class LoginPage(BasePage): # 定位器 username_loc = (By.ID, "user") password_loc = (By.ID, "pwd") login_btn_loc = (By.ID, "login-btn")

def login_action(self, username, password):
    """业务逻辑封装"""
    self.send_keys(username, *self.username_loc)
    self.send_keys(password, *self.password_loc)
    self.click(*self.login_btn)

3. 测试用例执行

if name == "main": driver = webdriver.Chrome() driver.get("https://example.com/login")

login_page = LoginPage(driver)
login_page.login_action("admin", "123456")

time.sleep(2) # 观察效果
driver.quit()

解析:这种写法的好处是,如果页面的 ID 变了,你只需要修改 LoginPage 中的 loc 变量,而不需要修改测试用例的逻辑。

二、 接口自动化:Requests + Pytest 组合拳 接口测试是测试开发的必修课。Python 的 Requests 库让 HTTP 请求变得像浏览网页一样简单,而 Pytest 则是当前最流行的测试框架。

核心技巧:接口关联与 Session 管理 在实际业务中,很多接口需要登录后才能访问(需要 Cookie 或 Token)。

代码实战:优雅的接口测试封装

import requests import pytest

class APIClient: def init(self, base_url): self.base_url = base_url # 使用 session 自动管理 cookie,避免每次请求都传 token self.session = requests.Session()

def login(self, username, password):
    """登录接口,获取鉴权信息"""
    url = f"{self.base_url}/api/login"
    payload = {"user": username, "pwd": password}
    # post 请求
    res = self.session.post(url, json=payload)
    # 断言登录成功
    assert res.status_code == 200
    assert res.json()['code'] == 0
    print("登录成功,Session 已更新 Cookie")

def get_user_info(self):
    """获取用户信息接口(依赖登录)"""
    url = f"{self.base_url}/api/user/info"
    # 因为用了 session,这里不需要手动带 cookie
    res = self.session.get(url)
    return res.json()

Pytest 测试用例

def test_user_flow(): # 初始化客户端 client = APIClient("https://httpbin.org") # 使用 httpbin 做演示

# 注意:httpbin 逻辑不同,这里仅演示结构
# 实际场景:
# client.login("admin", "123456")
# data = client.get_user_info()
# assert data['username'] == "admin"
print("接口测试逻辑执行完毕")

if name == "main": pytest.main(["-v", "s"]) # -v 显示详情, -s 打印输出 解析:requests.Session() 对象是进阶的关键,它相当于一个模拟的浏览器,会自动处理服务器返回的 Set-Cookie,并在后续请求中带上,解决了接口依赖的痛点。

三、 效率神器:Python 脚本处理测试数据 测试开发不仅是写自动化脚本,更包括造数据和测环境维护。利用 Python 的 Pandas 或 Faker 库,可以快速生成海量测试数据。

代码实战:批量生成随机用户数据

import csv import random from faker import Faker

fake = Faker('zh_CN') # 生成中文数据

def generate_test_data(num_rows): """ 生成测试用的 CSV 文件 """ data = [] for _ in range(num_rows): username = fake.user_name() email = fake.email() phone = fake.phone_number() # 随机生成状态码 status = random.choice([0, 1]) data.append([username, email, phone, status])

filename = "test_users.csv"
with open(filename, mode='w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['username', 'email', 'phone', 'status']) # 写表头
    writer.writerows(data) # 批量写入

print(f"成功生成 {num_rows} 条数据到 {filename}")

if name == "main": generate_test_data(100) 四、 进阶终点:持续集成(CI/CD)思维 测试开发的最终价值不是在本地跑通脚本,而是将代码集成到流水线中。这要求你不仅要会写 Python,还要懂 Shell 脚本和 Jenkins/GitLab CI 配置。

虽然无法在这里演示完整的 Jenkins 配置,但作为 Python 测试开发,你的代码必须具备可退出性和报告生成能力。

代码实战:优雅的测试报告与退出码

import sys import unittest

class TestStringMethods(unittest.TestCase):

def test_upper(self):
    self.assertEqual('foo'.upper(), 'FOO')

def test_isupper(self):
    self.assertTrue('FOO'.isupper())
    self.assertFalse('Foo'.isupper())

if name == 'main': # 运行测试 suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods) runner = unittest.TextTestRunner(verbosity=2) result = runner.run(suite)

# 关键点:根据测试结果设置退出码
# 0 代表成功,1 代表失败。CI/CD 工具会根据这个码判断流水线是否通过
exit_code = 0 if result.wasSuccessful() else 1
sys.exit(exit_code)

总结 从手工测试转型到 Python 测试开发,是一条充满挑战但回报丰厚的道路。

基础:熟练掌握 Python 语法与数据结构。 核心:精通 Selenium (UI 自动化) 和 Requests (接口自动化)。 设计:掌握 POM 模式、封装思想、设计模式。 拓展:涉足 CI/CD、Docker 容器化以及 Linux 运维脚本。 真正的测试开发工程师,不仅能发现 Bug,更能通过代码预防 Bug,通过自动化提升交付效率。希望这篇文章能为你的进阶之路点亮一盏明灯。

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
n0PBvtQpx9
暂无描述

评论(0)

添加评论