个人技术博客——自动化测试技术

222200422郑理煜 2024-12-20 23:46:42
这个作业属于哪个课程FZU_SE_teacherW_4
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标总结个人技术
其他参考文献《构建之法》

目录

  • 1. 技术概述
  • 2. 技术详述
  • 1.1 技术框架选择
  • 1.2 测试脚本编写
  • 1.3 测试流程管理
  • 3. 技术使用中遇到的问题和解决过程
  • 3.1 问题1:测试脚本不稳定
  • 3.2 问题 2:页面元素定位困难
  • 3.3 问题 3:测试环境不一致
  • 3.4 问题 4:测试用例执行速度慢
  • 3.5 问题 5:报告生成不一致
  • 4. 总结

1. 技术概述

自动化测试技术用于模拟用户操作进行程序测试,提高测试效率与质量。学习该技术因需应对复杂测试场景,难点在于脚本编写与测试覆盖率优化。

2. 技术详述

1.1 技术框架选择
  • Selenium框架:Selenium是一个强大的Web自动化测试工具,支持多种浏览器(如Chrome、Firefox等)和编程语言(如Python、Java等)。选择Selenium是因为其广泛的浏览器兼容性和强大的DOM操作功能。Selenium提供了丰富的API,可以方便地模拟用户的各种操作,如点击、输入、拖拽等。此外,Selenium还支持与各种测试框架(如unittest、pytest等)集成,方便进行单元测试、集成测试等。
  • Python语言:Python语法简洁,拥有丰富的库和社区支持,非常适合编写自动化测试脚本。Python的语法设计使得代码更加易读易写,减少了出错的可能性。同时,Python拥有丰富的第三方库,如requests、unittest、pytest等,这些库可以方便地用于编写HTTP请求、进行断言和测试报告生成等。
1.2 测试脚本编写
  • 登录测试:编写一个测试用例来模拟用户登录。首先,打开登录页面,然后输入用户名和密码,最后点击登录按钮并验证登录是否成功。在编写登录测试脚本时,需要注意处理各种异常情况,如用户名或密码错误、网络超时等。可以使用try-except语句来捕获异常,并输出相应的错误信息。
    import unittest
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    class TestLogin(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Chrome()
            self.driver.get("https://www.example.com/login")  # 假设这是登录页面的URL

        def test_valid_login(self):
            try:
                username_input = WebDriverWait(self.driver, 10).until(
                    EC.presence_of_element_located((By.ID, "username"))
                )
                password_input = WebDriverWait(self.driver, 10).until(
                    EC.presence_of_element_located((By.ID, "password"))
                )
                login_button = WebDriverWait(self.driver, 10).until(
                    EC.element_to_be_clickable((By.ID, "login-button"))
                   )

                username_input.send_keys("testuser")
                password_input.send_keys("testpassword")
                login_button.click()

                # 验证是否成功登录
                success_message = WebDriverWait(self.driver, 10).until(
                    EC.presence_of_element_located((By.CSS_SELECTOR, ".success-message"))
                )
                self.assertIn("Login successful", success_message.text)
            except Exception as e:
                self.fail(f"Login test failed: {e}")

        def tearDown(self):
            self.driver.quit()

    if _name_ == "_main_":
        unittest.main()
  • 菜品浏览与下单测试:编写测试用例来模拟用户浏览菜品并下单。这包括打开菜单页面,选择菜品,添加到购物车,然后结账。在编写这些测试脚本时,需要注意处理页面的动态加载和异步请求。可以使用Selenium的显式等待和隐式等待来等待页面元素加载完成。
1.3 测试流程管理
  • Jenkins配置:使用Jenkins进行持续集成,自动运行测试脚本并生成报告。首先,在Jenkins上创建一个新的Job,并配置源代码管理(如Git)。然后,设置触发器,以便在代码提交后自动运行测试。Jenkins可以与Git、GitLab等代码托管平台集成,通过Webhook或Polling等方式触发构建。在构建过程中,Jenkins会拉取最新的代码,并执行配置的测试脚本。测试完成后,Jenkins会生成测试报告,并通过邮件、Slack等方式通知相关人员。
  • 测试报告生成:使用Selenium的测试报告生成工具(如Allure)来生成详细的测试报告,包括测试成功、失败和跳过的用例。Allure是一个开源的测试报告框架,可以与Selenium、JUnit、TestNG等测试框架集成。使用Allure可以生成美观、易读的测试报告,方便相关人员查看测试结果和分析问题。

流程:

 代码提交 -> Git触发Jenkins Job -> Jenkins拉取最新代码 -> Selenium执行测试脚本 -> 生成测试报告(Allure)-> 邮件通知测试结果

3. 技术使用中遇到的问题和解决过程

3.1 问题1:测试脚本不稳定
  • 描述:在某些情况下,测试脚本会因为页面加载延迟或元素未找到而失败。这通常发生在网络延迟或页面动态加载时。
  • 解决
    • 显式等待:使用Selenium的显式等待功能,等待特定条件成立后再执行操作。例如,等待某个元素可见后再进行点击。
      wait = WebDriverWait(self.driver, 10)  # 等待最多10秒
      element = wait.until(EC.visibility_of_element_located((By.ID, "dynamic-element")))
      element.click()
      
    • 增加重试机制:对于可能失败的操作(如点击按钮),增加重试机制,如果失败则尝试重新执行。
3.2 问题 2:页面元素定位困难
  • 描述:在自动化测试中,动态生成的页面元素(如AJAX加载的内容)可能导致元素定位失败,导致测试用例无法执行。
  • 解决:为了解决这个问题,我们同样可以使用Selenium的显式等待(WebDriverWait)来等待元素的出现。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def test_dynamic_element(driver):
    driver.get('https://www.example.com')
    
    # 使用显式等待
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'dynamic-element'))
    )
    element.click()
3.3 问题 3:测试环境不一致
  • 描述:在不同的环境(如开发、测试、生产)中,应用的表现可能不一致,导致测试结果不可靠。
  • 解决:为了确保测试用例的可移植性和稳定性,我们采用了配置文件的方式来管理不同环境的参数。通过使用Python的配置文件库(如configparser),可以轻松切换不同的环境配置。

解决步骤

a. 创建配置文件:在项目根目录下创建一个名为config.ini的文件,内容如下:

[DEFAULT]
base_url = https://www.example.com

[development]
base_url = https://dev.example.com

[testing]
base_url = https://test.example.com

[production]
base_url = https://www.example.com

b. 读取配置文件:在测试用例中,根据当前环境读取相应的基础URL。

import configparser

config = configparser.ConfigParser()
config.read('config.ini')


current_env = 'testing'  # 示例:可以通过os.getenv获取
base_url = config[current_env]['base_url']

driver.get(base_url + '/login')

c. 使用环境变量:可以通过设置环境变量来动态选择配置,例如在Jenkins中配置构建参数,或者在本地开发时通过命令行参数传递。

3.4 问题 4:测试用例执行速度慢
  • 描述:随着测试用例数量的增加,测试执行时间可能显著增加,影响开发效率。为了解决这个问题,我们可以采用以下几种策略:
  • 解决:

解决步骤
a. 并行测试:使用 pytest 和 pytest-xdist 插件实现并行测试。

pip install pytest pytest-xdist

然后在执行测试时可以使用 -n 参数指定并行工作线程数:

pytest -n 4

b. 优化测试用例:分析每个测试用例的执行时间,找出性能瓶颈,合并相似的测试用例,减少不必要的页面加载。

c. 使用模拟服务:对于一些依赖后端服务的测试,可以使用 mock 库模拟后端接口,避免每次测试都真实调用外部服务。

from unittest.mock import patch

@patch('requests.get')
def test_api_call(mock_get):
    mock_get.return_value.status_code = 200
    response = requests.get('https://api.example.com/data')
    assert response.status_code == 200
3.5 问题 5:报告生成不一致
  • 描述:在执行自动化测试后,生成的测试报告可能不一致或者缺乏详细信息。我们使用 Allure 作为测试报告工具,并确保在每个测试用例中添加适当的注释和错误处理,以便在报告中呈现完整的信息。
  • 解决

解决步骤:
a. 安装Allure

pip install allure-pytest

b. 在测试用例中添加注释

import allure

@allure.feature('User Login Feature')
@allure.story('Successful login with valid credentials')
def test_user_login(driver):
    driver.get(base_url + '/login')
    with allure.step('Input username and password'):
        driver.find_element_by_id('username').send_keys('testuser')
        driver.find_element_by_id('password').send_keys('password123')
        
    driver.find_element_by_id('login-button').click()

    with allure.step('Verify login success'):
        assert "Welcome" in driver.page_source

c. 生成Allure报告
在测试执行完成后,生成Allure报告,并通过命令行查看:

allure serve <path_to_results>

4. 总结

自动化测试技术极大提升了测试效率与质量,但在实际使用中需注意脚本的稳定性、测试覆盖率和测试环境的一致性。通过合理配置和持续优化,可确保外卖小程序的高质量交付。

...全文
77 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

239

社区成员

发帖
与我相关
我的任务
社区管理员
  • FZU_SE_teacherW
  • 助教赖晋松
  • D's Honey
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧