Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python自动化测试一文详解

python自动化测试一文详解

原创
作者头像
fanstuck
发布于 2024-10-29 09:19:24
发布于 2024-10-29 09:19:24
81200
代码可运行
举报
运行总次数:0
代码可运行

Python 作为一种高效、易读的编程语言,凭借其丰富的库和框架,成为自动化测试领域的热门选择。无论是Web应用、API,还是移动应用,Python 都能提供强大的支持,使得测试人员能够快速编写和维护测试用例。

本文将深入探讨 Python 在自动化测试中的应用,涵盖各种测试框架、工具和最佳实践。通过理解自动化测试的基本概念和实际案例,读者将能够掌握如何有效地利用 Python 提高测试效率,论你是自动化测试的新手还是有经验的工程师,本文都将为你提供有价值的见解和实用的建议。

Python 自动化测试的基础知识

在深入自动化测试之前,了解其基础知识是至关重要的。

1. 什么是自动化测试?

自动化测试是使用软件工具自动执行测试用例的过程。与手动测试相比,自动化测试通过脚本或程序来执行测试,提高了测试的效率和可靠性。自动化测试的主要目的是发现软件中的缺陷并验证功能是否符合预期。

假设我们有一个登录系统,手动测试可能需要多次输入不同的用户名和密码来验证其有效性,而自动化测试则可以通过编写一个脚本来批量执行这些输入,节省时间。

2. 自动化测试的目的

自动化测试有多种目的,主要包括:

  • 提高效率:自动执行重复的测试用例,节省时间。
  • 减少人为错误:减少手动操作可能带来的错误,提高测试的可靠性。
  • 支持回归测试:随着软件的迭代,自动化测试能快速验证之前功能是否仍然正常。
  • 加速发布周期:更快的测试反馈帮助团队更快地发布高质量的软件。

3. 常见的自动化测试类型

自动化测试可以分为多种类型,主要包括:

3.1单元测试

单元测试是对软件中最小可测试单元的验证,通常是函数或方法。在 Python 中,使用 unittestpytest 等框架可以轻松编写单元测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import unittest
​
def add(a, b):
    return a + b
​
class TestAddFunction(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(1, 2), 3)
​
    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2)if __name__ == '__main__':
    unittest.main()

3.2集成测试

集成测试检查不同模块之间的交互,确它们能够协同工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_user_data(user_id):
    # 假设这是一个调用外部API的函数
    pass
​
def process_user(user_id):
    data = get_user_data(user_id)
    # 处理数据的逻辑
    return data
​
def test_process_user(mocker):
    mocker.patch('module.get_user_data', return_value={'name': 'John'})
    assert process_user(1) == {'name': 'John'}

3.3功能测试

功能测试验证系统的特定功能是否符合要求。Selenium 是执行功能测试的流行工具,尤其用于 Web 应用程序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium import webdriver
​
driver = webdriver.Chrome()
driver.get("http://example.com/login")
​
username = driver.find_element_by_name("username")
password = driver.find_element_by_name("password")
submit = driver.find_element_by_name("submit")
​
username.send_keys("testuser")
password.send_keys("password")
submit.click()
​
assert "Welcome" in driver.page_source
driver.quit()

3.4性能测试

性能测试用于评估系统在负载下的表现。工具如 Locust 可以用 Python 编写负载测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from locust import HttpUser, task
​
class UserBehavior(HttpUser):
    @task
    def index(self):
        self.client.get("/")
​
    @task(2)
    def about(self):
        self.client.get("/about")

4.Python 测试框架概述:深入 pytest

在众多的 Python 测试框架中,pytest 因其简洁易用和强大的功能而广受欢迎。它不仅支持简单的测试用例编写,还能够扩展到复杂的测试需求。

4.1安装 pytest

首先,确保你已经安装了 pytest。可以使用以下命令通过 pip 安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install pytest

4.2编写测试用例

我们将创建一个简单的数学库,并为其编写测试用例。假设我们的库包含加法和减法两个函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# math_operations.py
def add(a, b):
    return a + b
​
def subtract(a, b):
    return a - b
​

编写测试用例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# test_math_operations.py
from math_operations import add, subtract
​
def test_add():
    assert add(1, 2) == 3
    assert add(-1, 1) == 0
    assert add(0, 0) == 0
​
def test_subtract():
    assert subtract(2, 1) == 1
    assert subtract(-1, -1) == 0
    assert subtract(0, 1) == -1

在命令行中,切换到包含测试文件的目录,运行以下命令来执行测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pytest

pytest 将自动发现以 test_ 开头的测试函数并执行它们。运行结果会显示哪些测试通过,哪些测试失败。

4.3. 详细的测试报告

可以使用 -v 选项获取更详细的测试输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pytest -v

4.4. 使用 Fixture

pytest 还支持 fixture,这是一个强大的特性,用于提供测试所需的上下文。比如,我们可以创建一个测试数据库连接的 fixture:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pytest
​
@pytest.fixture
def sample_data():
    return [1, 2, 3, 4, 5]
​
def test_sample_data(sample_data):
    assert len(sample_data) == 5
    assert sum(sample_data) == 15

4.5. 参数化测试

pytest 还支持参数化测试,允许在一个测试函数中使用不同的输入值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pytest
​
@pytest.mark.parametrize("a, b, expected", [
    (1, 2, 3),
    (4, 5, 9),
    (-1, 1, 0)
])
def test_add(a, b, expected):
    assert add(a, b) == expected
​

在测试中,如果你希望检查某个代码块是否抛出了特定的异常,可以使用 pytest.raises

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test_subtract_negative():
    with pytest.raises(ValueError):
        subtract(1, 2)

5.深入 Selenium

Selenium 是一个广泛使用的开源工具,用于自动化 Web 应用程序的测试。它支持多种浏览器和操作系统,能够模拟用户在浏览器中的操作,验证应用程序的功能和性能。

它支持多种编程语言,包括 Python、Java、C# 等,使得开发者可以使用他们熟悉的语言来编写测试脚本。Selenium 的核心组件包括:

  • Selenium WebDriver:用于与浏览器交互,发送用户操作和获取网页内容。
  • Selenium IDE:一个简单的浏览器插件,用于记录和回放测试。
  • Selenium Grid:用于并行测试,可以在多个环境中同时执行测试。

5.1安装 Selenium

在使用 Selenium 之前,需要确保安装了相关库和浏览器驱动。可以通过以下命令安装 Selenium:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install selenium
​

同时,还需要下载相应的浏览器驱动,例如 ChromeDriver,用于 Google Chrome。下载完成后,确保将其路径添加到系统的环境变量中。

编写一个简单的测试用例,模拟用户在一个网页上进行操作。假设我们要测试一个登录页面。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
​
# 创建一个新的 Chrome 浏览器实例
driver = webdriver.Chrome()try:
    # 访问目标网站
    driver.get("http://example.com/login")
​
    # 找到用户名和密码输入框,并输入内容
    username = driver.find_element(By.NAME, "username")
    password = driver.find_element(By.NAME, "password")
​
    username.send_keys("testuser")
    password.send_keys("password")
​
    # 找到登录按钮并点击
    login_button = driver.find_element(By.NAME, "submit")
    login_button.click()
​
    # 等待页面加载
    time.sleep(3)
​
    # 验证登录是否成功
    assert "Welcome" in driver.page_source
​
finally:
    # 关闭浏览器
    driver.quit()

5.2关键操作与定位元素

Selenium 提供了多种方法来定位网页元素,以下是常用的定位方式:

通过 ID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
element = driver.find_element(By.ID, "element_id")

通过类名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
element = driver.find_element(By.CLASS_NAME, "class_name")

通过 CSS 选择器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
element = driver.find_element(By.CSS_SELECTOR, "css.selector")

通过 XPath

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
element = driver.find_element(By.XPATH, "//tag[@attribute='value']")

5.3. 处理页面交互

Selenium 可以模拟多种用户交互操作,如点击、输入、下拉菜单等。以下是一些常用操作示例:

点击按钮

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
button = driver.find_element(By.ID, "submit")
button.click()

输入文本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input_field = driver.find_element(By.NAME, "input")
input_field.send_keys("Sample text")

处理下拉菜单

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium.webdriver.support.ui import Select
​
select = Select(driver.find_element(By.NAME, "dropdown"))
select.select_by_visible_text("Option 1")

5.4等待策略

在测试中,等待是非常重要的,Selenium 提供了两种主要的等待策略:

  • 显式等待:等待特定条件成立(如元素可见)再继续执行。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECWebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "element_id")))
  • 隐式等待:全局等待,设置后会在每次查找元素时生效。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.implicitly_wait(10)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AI+自动化测试:如何让测试编写效率提升10倍?
软件开发中,自动化测试是保障质量的重要环节,但编写测试用例不仅费时费力,还很难确保覆盖到所有关键场景。AI 的加入正在改变这一现状,让测试用例的生成更加智能化,帮助开发者更高效地完成测试工作。本文将结合实际开发中的痛点,探讨如何利用 AI 进行单元测试、集成测试和 UI 测试,并提供可运行的示例代码,帮助团队提升测试效率和覆盖率。
网罗开发
2025/04/03
3660
AI+自动化测试:如何让测试编写效率提升10倍?
web自动化测试进阶篇03 ———自动化并发测试应用
web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”,通常都会作为广大测试从业者的首选学习对象,相较于C/S架构的自动化来说,B/S有着其无法忽视的诸多优势,从行业发展趋、研发模式特点、测试工具支持,其整体的完整生态已经远远超过了C/S架构方面的测试价值。
Austin_zhai
2023/07/25
5540
web自动化测试进阶篇03 ———自动化并发测试应用
WebUI 自动化测试的经典设计模式:PO
先来看下未使用 PO(PageObject) 设计模式下的代码,以网页版百度登录为例来说明。
Wu_Candy
2022/07/04
1.1K0
Selenium Web自动化测试——基于unittest框架的PO设计模式
  前面一直在讲接口自动化测试框架与案例分享,很少讲Selenium这个Web自动化测试神器。它主要用来做UI自动化测试,大家都知道UI自动化测试成本相当高,一般的Web自动化测试我是一直不建议做的。
全栈测试开发日记
2023/02/02
1.2K0
Selenium Web自动化测试——基于unittest框架的PO设计模式
《一头扎进》系列之Python+Selenium框架设计篇2- 价值好几K的框架,不看白不看,看了还想看
  上一篇介绍了自动化框架的架构,今天宏哥就带领小伙伴或者童鞋们开始开工往这个框架里开始添砖加瓦。主要是介绍一个框架unittest单元测试框架和一种设计思想POM。
北京-宏哥
2019/12/20
1.4K0
《一头扎进》系列之Python+Selenium框架设计篇2- 价值好几K的框架,不看白不看,看了还想看
软件测试/人工智能|如何使用ChatGPT帮我们写自动化测试脚本
当今软件开发中,自动化测试脚本的编写是确保软件质量和稳定性的重要步骤。随着人工智能和自然语言处理技术的进步,像ChatGPT这样的语言模型已经成为编写自动化测试脚本的有力工具。ChatGPT可以根据给定的指令和条件生成代码,简化了测试流程并提高了效率。
霍格沃兹测试开发Muller老师
2023/11/23
4870
Python自动化测试面试:unittest、pytest与Selenium详解
在Python自动化测试的面试过程中,对unittest、pytest与Selenium这三个核心工具的理解和应用能力是面试官重点关注的对象。本文将深入浅出地剖析这三个框架,探讨面试中常见的问题、易错点及应对策略,并通过代码示例进一步加深理解。
Jimaks
2024/04/22
8040
自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码[通俗易懂]
1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。
全栈程序员站长
2022/09/01
7530
UnitTest测试框架全栈详解
从软件架构的⻆度来说,测试最重要的步骤是在软件开发的时候界入比较好,所以在早期测试的界入,从软件经济学的⻆度上来说,发现的问题解决成本低,投入的资源比较少。因此,对一个测试的系统,开始最佳的测试就是源代码级别的测试,也就是单元测试阶段,这个过程也被成为白盒测试。单元测试是最基本也是最底层的测试类型,单元测试应用于最基本的软件代码,如类,函数。方法等,单元测试通过可执行的断言检查被测单元的输出是否满足预期结果。在测试金字塔的理论上来说,越往下的测试投入资源越高,得到的回报率越大,⻅测试金字塔模型:
无涯WuYa
2021/11/16
7700
UnitTest测试框架全栈详解
Python、Pytest、Allure、Selenium和Jenkins实现自动化测试集成实例
本文将介绍如何使用Python、Pytest、Allure、Selenium和Jenkins实现测试自动化集成。通过将这些工具结合使用,可以实现自动化测试、测试结果报告、持续集成等功能,提高测试效率和质量。
苦叶子
2023/06/09
1K0
Python、Pytest、Allure、Selenium和Jenkins实现自动化测试集成实例
WEB-UI自动化测试-干货
少年读书,如隙中窥月;中年读书,如庭中望月;老年读书,如台上玩月。皆以阅历之深浅,为所得之深浅耳。
测试小兵
2019/11/20
1.8K0
自动化测试——unittest框架
1、是一个代码文件,在代码文件中来书写真正的用例代码 (里面的print均是模拟测试用例)
全栈程序员站长
2022/11/04
1.1K0
Selenium3框架详解
自从17年开始就不再怎么关注UI自动化测试了,也就很少关注Selenium的知识体系,在当时的背景和环境下有很多的思考和选择点,基于UI的自动化测试并不是所有的场合下都使用它合适,任何一个技术,要把它应用在合适的场景下才能够显示出它的最大的价值。今天这里就简单的对Page Objects做一个介绍。
无涯WuYa
2019/04/25
8050
Selenium3框架详解
《手把手教你》系列练习篇之9-python+ selenium自动化测试 -番外篇 - 最后一波
本来上一篇就是练习篇的最后一篇文章了,但是有的小伙伴私下反映说是做了那么多练习,没有一个比较综合的demo练练手。因此宏哥在这里又补存了一些常见的知识点进行练习,在文章最后也通过实例给小伙伴们或者童鞋们进行了一个登录模块的自动化测试的实例,其他的你可以照猫画虎地轻松的搞定和实现。
北京-宏哥
2019/12/12
1.5K0
Selenium3框架详解
自从17年开始就不再怎么关注UI自动化测试了,也就很少关注Selenium的知识体系,在当时的背景和环境下有很多的思考和选择点,基于UI的自动化测试并不是所有的场合下都使用它合适,任何一个技术,要把它应用在合适的场景下才能够显示出它的最大的价值。今天这里就简单的对Page Objects做一个介绍。
测试小兵
2019/10/12
9510
Selenium3框架详解
对自动化测试的几点思考(三)
在前面的两个文章中关于接口测试,自动化测试聊了很多,那今天就说下在自动化测试中的断言,在自动化测试中,没有断言的测试用例是无效的,这是我一直的想法,那么怎么样的断言是正确的,一个自动化测试用例增加了断言就可以完全的放心了吗?在自动化测试中,我感觉最可怕的不是测试用例的维护,以及它的编写,最可怕的是功能存在问题,而自动化测试用例执行后,结果竟然是PASS,这会导致很严重的后果和质疑。
无涯WuYa
2018/10/25
4640
测试高级工程师系统养成-高薪就业技能实战
高级测试工程师(Senior Test Engineer)通常负责软件测试的设计、实施和管理,确保产品质量。
sou百课优
2024/09/10
1800
Java自动化测试(web自动化测试框架 28)
http://120.78.128.25:8765/Admin/Index/login.html
zx钟
2020/09/14
2.5K0
Python Selenium全栈指南:从自动化入门到企业级实战
这篇文章全面解析了Python Selenium库的核心技术与应用实践,从环境配置、元素定位(涵盖ID、CSS、XPath等八种方法)、表单操作及文件上传等基础操作入手,逐步深入至显式等待策略、Page Object设计模式、数据驱动测试等高级应用,并探讨了企业级场景下的分布式测试集群搭建、云平台集成及验证码处理方案。通过性能优化技巧(如无头模式、网络监控)和移动端与AI结合的扩展生态,展示了Selenium的多样化潜力,同时总结了十大最佳实践与常见问题解决方案,为读者提供了从入门到精通的系统化学习路径和进阶资源,助力实现高效、稳定的Web自动化测试与开发。
Lethehong
2025/03/01
5350
Python Selenium全栈指南:从自动化入门到企业级实战
Appium移动端自动化测试--测试用例改造
可见下面的两个框架的脚本,略有不同,setup和setUp,teardown和tearDown。
软测小生
2020/02/13
1.1K0
Appium移动端自动化测试--测试用例改造
推荐阅读
相关推荐
AI+自动化测试:如何让测试编写效率提升10倍?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验