百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

【软测初级】软件测试基础练(软件测试0基础教学视频)

zhezhongyun 2025-07-06 18:01 3 浏览

说明:本系列软测基础实操内容网站等选用自黑马传智教育内的公开学习内容

传智 | 高校学习平台-首页

黑马在IT领域的教学内容非常丰富,使用入门、进阶等不同学习阶段的学习,推荐大家多多浏览学习

接口测试 - 用postman测试软件登录模块

与预期(说明文档)不符合

编辑

接口测试工具 - postman

编辑

登录成功

编辑

创建测试项目

编辑

编辑

编辑

项目env配置

目的是为了能通过postman向对应网站服务器传递请求

编辑

编辑

编辑

编辑

编辑

编辑

开始设计测试接口

编辑

必要信息

网站的接口文档提供并规范了测试接口的请求头、请求体、携带的认证信息等,以及发送请求后会得到什么字段反馈

编辑

编辑

编辑

示例

编辑

编辑

编辑

编辑

请求参数

编辑

填入接口文档里的path

编辑

开始提交POST请求做测试

编辑

断言 状态码 msg

编辑

编辑

编辑

send

编辑

编辑

实际与预期不符合

接口文档里登录成功返回200,这里返回201,那应该就是一条bug了

对应的表单填入测试条例1的信息

编辑

任务清单

结合网站的接口文档,按照下面的模板,对网站的登录模块做测试(使用postman)

登录模块

POST 登录成功 (为例子,下面的仿照这条)

Body字段:
{
"mobile": "12011111111",
"code": "246810"
}
Scripts Post-response 字段:
pm.test("断言状态码", function () {
    pm.response.to.have.status(200);
});

pm.test("断言message", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.message).to.eql("OK");
});

var token = pm.response.json().data.token
console.log(token)

pm.environment.set("token", token);

POST 用户名包含特殊字符

将Body的参数字段改为

{"mobile": "138@0013800", "code": "123456"}

send后结果如下,表示软件有正确处理手机号格式不正确的问题

编辑

POST 用户名空

编辑

POST 用户名超 11 位

编辑

该测试样例通过,网站检查用户名超 11 位功能正常

POST 用户名不足 11 位

编辑

POST 用户名未注册

编辑

有问题,和接口文档的响应不符合

POST 密码为空

编辑

POST 密码错误

编辑

POST 无参

编辑


补充 - 生成测试报告

node.js 辅助生成测试报告方式

node.js 可借助 newman 等插件来辅助生成测试报告。先安装 node.js,再通过 npm(node 包管理器)安装 newman 及相关报告插件(如 newman-reporter-html )。之后在命令行使用 newman run 命令运行 Postman 用例集文件,并指定报告格式等参数,就能生成对应格式(如 html )的测试报告 。

node.js 与 postman 联系

Postman 是接口测试工具,newman 是其命令行工具。node.js 为 newman 及相关插件提供运行环境,利用它可在命令行执行 Postman 脚本,实现批量运行请求、参数化等操作,并生成测试报告,提升接口测试效率与自动化程度。

node.js辅助生成测试报告

Node.js — Run JavaScript Everywhere

编辑

编辑

不是大软件,像这些解释器、插件等最好默认路径

编辑

编辑

勾上自动下载一些插件

编辑

编辑

在 Windows 系统上,若通过 MSI 安装包正常安装 Node.js ,一般安装程序会自动配置好环境变量,可在命令提示符中输入node -v和npm -v ,若能显示出版本号,就说明环境变量已配置好,无需手动操作

编辑

否则,添加系统环境变量

建NODE_PATH变量并编辑Path变量:

编辑

安装 Newman 和报告插件

npm install -g newman newman-reporter-html

编辑

从 Postman 导出测试用例

从postman中导出报告(json格式)

在 Postman 中选择 Collection → Export → V2.1 格式

保存为 JSON 文件

编辑

全选执行

编辑

导出结果:运行完成后,在 “Collection Runner” 窗口底部,点击 “Export results” 按钮 。在弹出的文件保存对话框中,找到桌面的 “测试报告” 文件夹,输入文件名,点击 “保存”,即可将测试结果以 JSON 文件形式保存到该文件夹。

执行测试并生成报告

newman run "D:\postman_test_run.json" -r html --reporter-html-export "D:\report.html"

参数说明

newman run my-collection.json:执行指定的 Postman 集合文件

-e env.json:指定环境变量文件(可选)

-r html:生成 HTML 格式的测试报告

--reporter-html-export report.html:指定报告输出路径和文件名

其他方法 Jest + jest-html-reporter(网页格式)

Jest 是一款主流的测试框架,jest-html-reporter 能把测试结果转化为 HTML 报告。

首先,安装必要的依赖:

bash

npm install --save-dev jest jest-html-reporter

检验安装

编辑

接着,在package.json中添加测试脚本和报告配置:

json

{
  "scripts": {
    "test": "jest --coverage"
  },
  "jest": {
    "reporters": [
      "default",
      ["./node_modules/jest-html-reporter", {
        "pageTitle": "测试报告",
        "outputPath": "test-report.html"
      }]
    ]
  }
}

运行测试之后,就会在项目根目录生成test-report.html文件。

功能测试 - 网站模块应用测试

参考的样例设计中对于条例的优先级评定较为笼统,实际的测试环境下建议做完测试设计报告后对每条测试样例的优先级进行更加严谨的判定

登录模块

登陆后

编辑

后台首页模块

11

内容管理模块(发布文章 内容列表 评论列表 素材管理)

11

粉丝管理模块(图文数据 粉丝概况 粉丝画像 粉丝列表)

编辑

测试样例设计参考

编辑

编辑

编辑

账户信息模块

编辑

测试样例设计参考

编辑

编辑

脚本实现 - 网页自动化测试

提要

自动化测试实施前提与策略

适用场景条件需求稳定:项目需求变动不频繁,避免因频繁更新导致测试脚本维护成本过高;

时间充足:预留足够时间设计框架、编写与调试脚本,确保自动化测试的质量;

脚本复用性:测试脚本可在多种浏览器或平台重复运行,提升投入产出比;

测试策略金字塔模型:遵循 “单元测试(白盒)→接口测试→UI 测试” 的金字塔结构,优先开展底层测试;

回归测试导向:主要用于回归测试,验证已有功能的稳定性,而非新功能开发测试。

核心技术分类与特点

录制与回放技术原理:通过工具记录人工操作流程,自动生成脚本并回放;

优缺点:

优点:实现效率高、学习成本低,适合快速生成简单脚本;

缺点:维护成本高(页面变动需重录)、脚本复用性低;

脚本技术线性脚本:直接录制操作流程,包含点击、输入等动作,可完整回放;

结构化脚本:引入顺序、分支、循环等逻辑结构,支持函数调用,灵活测试复杂功能;

共享脚本:封装通用功能(如登录),供多个测试用例调用,减少重复代码;

数据驱动技术原理:将测试数据与脚本分离,通过不同数据文件驱动同一脚本执行不同用例;

扩展:关键字驱动:进一步分离界面元素、操作逻辑与测试数据,提升代码可维护性;

行为驱动:基于业务场景设计用例,需开发、测试、产品协作,聚焦软件内部运作。

Selenium 工具核心应用

pip install selenium

元素定位方法(8 种)基础定位:id、name、class_name、tag_name;

文本定位:link_text(全文本)、partial_link_text(部分文本);

高级定位:xpath(路径定位)、css_selector(CSS 选择器);

元素操作与浏览器控制元素操作:send_keys()(输入)、click()(点击)、clear()(清空)、submit()(提交表单);

浏览器操作:get(url)(打开页面)、maximize_window()(窗口最大化)、close()/quit()(关闭窗口);

等待策略强制等待:time.sleep(seconds),固定休眠时间,影响效率,仅用于调试;

隐式等待:implicitly_wait(timeout),全局设置最长等待时间,未找到元素时循环尝试;

显式等待:WebDriverWait(driver, timeout).until(condition),针对特定元素等待,需结合By模块与条件函数。

自动化测试框架应用

pytest 框架核心要点用例规范:测试类以Test开头,方法以test_开头,不包含__init__方法;

固件(Fixture):模块级:
setup_module/teardown_module,模块运行前后各执行一次;

类级:
setup_class/teardown_class(需加@classmethod装饰器),类运行前后各执行一次;

方法级:
setup_method/teardown_method,每个方法运行前后执行;

断言方式:直接使用 Python 的assert关键字,支持assert a == b、assert a in b等表达式;

数据驱动与参数化通过@pytest.mark.parametrize装饰器实现参数化测试,传入不同数据执行同一用例。

实战关键步骤

环境搭建安装 Python 解释器、PyCharm IDE、Selenium 库。

下载对应浏览器驱动(如 Chrome 的chromedriver),确保版本与浏览器匹配。

元素定位实战使用浏览器开发者工具(F12)或 Katalon Recorder 插件获取元素属性(id、class、xpath 等)。

优先使用唯一属性(如 id)定位,避免tag_name等非唯一标识。

功能测试流程登录 / 退出测试:定位账号密码输入框→输入数据→点击登录→断言跳转结果→点击退出并验证。

页面跳转测试:定位导航链接→点击跳转→通过driver.current_url或页面元素断言目标页面。

异常处理与日志使用try-except捕获元素定位异常,结合get_screenshot_as_file()保存错误截图。

集成日志框架(如 Python 的logging)记录测试过程,便于问题排查。

两个web自动化测试的python脚本分析

提供一些应用于测试的网站:

禅道:

用户登录 - 禅道

编辑

学习在线

学成在线2.0

编辑


任务目标

编写一个自动化测试脚本,模拟用户登录禅道系统

用户登录 - 禅道)的完整流程,并验证登录结果。

具体要求

1.环境与工具

使用 Selenium 库操作 Chrome 浏览器完成自动化测试。

2.操作流程

启动 Chrome 浏览器并访问禅道系统登录页面

用户登录 - 禅道)。

最大化浏览器窗口,确保页面元素完整显示。

设置隐式等待时间(10 秒),确保页面元素加载完成后再操作。

3.登录操作

定位用户名输入框(要求:通过 XPath 定位,元素 id 为account),清空默认内容后输入用户名demo,输入前后各等待 2 秒(模拟用户输入节奏)。

定位密码输入框(要求:通过 XPath 定位,元素 id 为password),清空默认内容后输入密码quickon4You,输入前后各等待 2 秒。

定位登录按钮(要求:通过 XPath 定位,元素 id 为submit),点击登录,登录后等待 4 秒(确保页面跳转完成)。

4.结果验证

登录成功后,截取当前页面并保存为./登录成功.png(验证登录结果)。

5.资源释放

完成所有操作后关闭浏览器,并输出ok提示脚本执行结束。

任务1

1.1.脚本需具备基本的稳定性:通过implicitly_wait和time.sleep结合,避免因元素未加载

1.2.完成导致的定位失败。

1.3.操作需模拟真实用户行为:输入前后添加固定等待时间(2 秒),接近人工输入节奏。

结果可追溯:通过截图保存登录成功的页面状态,作为验证依据。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By  # 虽然未使用,但保留导入

driver = webdriver.Chrome()
driver.get('https://zentao.demo.qucheng.cc/')

# 窗口最大化
driver.maximize_window()

# 设置隐式时间
driver.implicitly_wait(10)
time.sleep(2)

# 1. 输入手机号 css进行定位 [type="text"](实际是用户名,id为account)
driver.find_element_by_xpath('//*[@id="account"]').clear()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="account"]').send_keys('demo')
time.sleep(2)

# 输入密码(id为password)
driver.find_element_by_xpath('//*[@id="password"]').clear()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="password"]').send_keys('quickon4You')
time.sleep(2)

# 点击登录(id为submit)
driver.find_element_by_xpath('//*[@id="submit"]').click()
time.sleep(4)

# 保存页面
driver.get_screenshot_as_file('./登录成功.png')

# 关闭浏览器
print('ok')
driver.close()

效果

编辑

编辑

编辑

任务2

账户名 el-form-item__content

密码 el-form-item__content

打开学成在线2.0

输入账号、密码和截图时需要加上2s停顿时间

2.1.登录成功截图

2.2.弹出退出登录信息,并点击退出登录按钮 退出登录成功截图

from selenium.webdriver import ActionChains

2.3.点击返回首页操作

import time
from selenium.webdriver.support import expected_conditions as EC

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

# from selenium.webdriver.common.by import By # 虽然未使用,但保留导入

driver = webdriver.Chrome()
driver.get('http://xczx2-portal.itheima.net/')

# 窗口最大化
driver.maximize_window()

# 设置隐式时间
driver.implicitly_wait(10)
time.sleep(1)

# 1. 输入手机号 css进行定位 [type="text"](实际是用户名,id为account)
# driver.find_element_by_xpath('//*[@id="account"]').clear()
# time.sleep(2)
# driver.find_element_by_xpath('//*[@id="account"]').send_keys('demo')
# time.sleep(2)
driver.find_element_by_link_text("登录").click()

username = driver.find_element_by_xpath("/html/body/div/div/div[3]"
                                        "/form/div[1]/div/div/input")

username.clear()

username.send_keys("13810000002")
time.sleep(2)
# 输入密码(id为password)
# driver.find_element_by_xpath('//*[@id="password"]').clear()
# time.sleep(2)
# driver.find_element_by_xpath('//*[@id="password"]').send_keys('quickon4you')
# time.sleep(2)
password = driver.find_element_by_xpath("/html/body/div/div/div[3]"
                                        "/form/div[2]/div/div/input")

password.clear()

password.send_keys("888itcast.CN764%...")
time.sleep(2)


driver.find_element_by_class_name("el-button--primary").click()
driver.get_screenshot_as_file('./登录成功.png')

time.sleep(2)

menu_item = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "#headerContainer > nav > div.sign-in > div.dropdown.myInfo > div.dropbtn > span"))
)

# 悬停到菜单项
actions = ActionChains(driver)
actions.move_to_element(menu_item).perform()


# 等待下拉菜单中的选项加载完成
dropdown_option = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "#btnLogout"))
)
# time.sleep(3)
# 点击下拉菜单中的选项
dropdown_option.click()

# 等待一段时间,观察效果
time.sleep(2)


# driver.find_element_by_class_name("glyphicon-log-out").click()
print("成功退出学成在线教育平台")
# 保存页面
driver.get_screenshot_as_file('./注销成功.png')

# 关闭浏览器
print('ok')
driver.close()

效果

编辑

编辑

编辑

编辑

相关推荐

激光手术矫正视力对眼睛到底有没有伤害?

因为大家询问到很多关于“基质不能完全愈合”的问题,有必要在这里再详细解释一下。谢谢@珍惜年少时光提出的疑问:因为手头刚好在看组织学,其中提到:”角膜基质约占角膜的全厚度的90%,主要成分是胶原板层,...

OneCode核心概念解析——View(视图)

什么是视图?在前面的章节中介绍过,Page相关的概念,Page是用户交互的入口,具有Url唯一性。但Page还只是一个抽象的容器,而View则是一个具备了具体业务能力的特殊的Page,它可以是一个...

精品博文图文详解Xilinx ISE14.7 安装教程

在软件安装之前,得准备好软件安装包,可从Xilinx官网上下载:http://china.xilinx.com/support/download/index.html/content/xilinx/z...

卡片项目管理(Web)(卡片设计的流程)

简洁的HTML文档卡片管理,简单框架个人本地离线使用。将个人工具类的文档整理使用。优化方向:添加图片、瀑布式布局、颜色修改、毛玻璃效果等。<!DOCTYPEhtml><html...

GolangWeb框架Iris项目实战-JWT和中间件(Middleware)的使用EP07

前文再续,上一回我们完成了用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。本回我们需要为登录成功的用户生成Tok...

sitemap 网站地图是什么格式?有什么好处?

sitemap网站地图方便搜索引擎发现和爬取网页站点地图是一种xml文件,或者是txt,是将网站的所有网址列在这个文件中,为了方便搜索引擎发现并收录的。sitemap网站地图分两种:用于用户导...

如何在HarmonyOS NEXT中处理页面间的数据传递?

大家好,前两天的Mate70的发布,让人热血沸腾啊,不想错过,自学的小伙伴一起啊,今天分享的学习笔记是关于页面间数据伟递的问题,在HarmonyOSNEXT5.0中,页面间的数据传递可以有很多种...

从 Element UI 源码的构建流程来看前端 UI 库设计

作者:前端森林转发链接:https://mp.weixin.qq.com/s/ziDMLDJcvx07aM6xoEyWHQ引言由于业务需要,近期团队要搞一套自己的UI组件库,框架方面还是Vue。而业界...

jq+ajax+bootstrap改了一个动态分页的表格

最近在维护一个很古老的项目,里面是用jq的dataTable方法实现一个分页的表格,不过这些表格的分页是本地分页。现在想要的是点击分页去请求数据。经过多次的修改,以失败告终。分页的不准确,还会有这个错...

学习ES6- 入门Vue(大量源代码及笔记,带你起飞)

ES6学习网站:https://es6.ruanyifeng.com/箭头函数普通函数//普通函数this指向调用时所在的对象(可变)letfn=functionfn(a,b){...

青锋微服务架构之-Ant Design Pro 基本配置

青锋(msxy)-Gitee.com1、更换AntDesignPro的logo和名称需要修改文件所在位置:/config/defaultSetting.jsconstproSett...

大数据调度服务监控平台(大数据调度服务监控平台官网)

简介SmartKettle是针对上述企业的痛点,对kettle的使用做了一些包装、优化,使其在web端也能具备基础的kettle作业、转换的配置、调度、监控,能在很大一定程度上协助企业完成不同...

Flask博客实战 - 实现博客首页视图及样式

本套教程是一个Flask实战类教程,html/css/javascript等相关技术栈不会过多的去详细解释,那么就需要各位初学者尽可能的先去掌握这些基础知识,当然本套教程不需要你对其非常精通,但最起码...

Web自动化测试:模拟鼠标操作(ActionChains)

在日常的测试中,经常会遇到需要鼠标去操作的一些事情,比如说悬浮菜单、拖动验证码等,这一节我们来学习如何使用webdriver模拟鼠标的操作首页模拟鼠标的操作要首先引入ActionChains的包fro...

DCS F-16C 中文指南 16.9ILS仪表降落系统教程

10–ILS教程我们的ILS(仪表着陆进近)将到达Batumi巴统机场。ILS频率:110.30跑道航向:120磁航向/126真航向无线电塔频率:131.0001.设置雷达高度表开关打开(前)并...