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

【软测初级】软件测试基础练(软件测试基础笔试题及答案)

ccwgpt 2025-07-21 13:13 5 浏览 0 评论

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

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

黑马在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()

效果

编辑

编辑

编辑

编辑

相关推荐

腾讯开源框架TarsCpp-rpc设计分析-server(二)

2Tars协议2.1是什么借用官方说法:TARS编码协议是一种数据编解码规则,它将整形、枚举值、字符串、序列、字典、自定义结构体等数据类型按照一定的规则编码到二进制数据流中。对端接收到二进制数据流...

微服务调用为什么用RPC框架,http不更简单吗?

简单点,HTTP是协议,RPC是概念!实现RPC可以基于HTTP协议(Feign),TCP协议(Netty),RMI协议(Soap),WebService(XML—RPC)框架。传输过程中,也因为序列...

go-zero:开箱即用的微服务框架(gin框架微服务)

go-zero是一个集成了各种工程实践的Web和rpc框架,它的弹性设计保障了大并发服务端的稳定性,并且已经经过了充分的实战检验。go-zero在设计时遵循了“工具大于约定和文档”的理...

SOFARPC :高性能、高扩展性、生产级的 Java RPC 框架

#暑期创作大赛#SOFARPC是一个高性能、高扩展性、生产级的JavaRPC框架。在蚂蚁金服,SOFARPC已经使用了十多年,已经发展了五代。SOFARPC致力于简化应用程序之间的RPC...

自研分布式高性能RPC框架及服务注册中心ApiRegistry实践笔记

痛点1.bsf底层依赖springcloud,影响bsf更新springboot新版本和整体最新技术版本升级。2.eureka已经闭源,且框架设计较重,同时引入eureka会自行引入较多sprin...

Rust语言从入门到精通系列 - Tonic RPC框架入门实战

Rust语言是一种系统级语言,被誉为“没有丧失性能的安全语言”。Rust语言的优势在于其内存安全机制,在编译时就能保证程序的内存安全。Tonic模块是Rust语言的一个RPC(RemoteProce...

腾讯开源框架TarsCpp-rpc设计分析-client(一)

前言Tars是腾讯开源的微服务平台,包含了一个高性能的rpc框架和服务治理平台,TarsCpp是其C++版本。对于以C++为主要开发语言,同时还想深入了解rpc和微服务框架具体实现的同学来说,Tars...

设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架

为啥要开发RPC框架事情是这样的,在开发这个RPC框架之前,我花费了不少时间算是对Dubbo框架彻底研究透彻了。冰河在撸透了Dubbo2.x和Dubbo3.x的源码之后,本来想给大家写一个Dubbo源...

rpc框架使用教程,超级稳定好用,大厂都在使用

rpc是什么远程调用协议如何使用导入依赖<dependency><groupId>org.apache.dubbo</groupId><art...

Layui 框架实战:动态加载 Select 与二级联动全解析

在现代Web开发中,下拉选择框(Select)是用户输入数据时不可或缺的组件。很多时候,我们需要的选项并非静态写死在HTML中,而是需要根据业务逻辑从后端动态获取。更有甚者,我们可能需要实现“...

15个能为你节省数百小时的前端设计神器,从UI库到文档生成

无论你是刚开始开发之旅的新手,还是疲于应付生产期限的资深程序员,有一个真理始终不变:正确的工具能彻底改变你的工作流程。多年来,我测试了数百个开发工具——有些实用,大多数平庸。但有一批免费网站经受住了时...

Layui与WinForm通用权限管理系统全解析

嘿,小伙伴们,今天咱们来聊聊Layui和WinForm这两个框架在通用权限管理系统中的应用。别担心,我会尽量用简单易懂的语言来讲解,保证让大家都能跟上节奏!首先说说Layui。Layui是一个前端UI...

纯Python构建精美UI!MonsterUI让前端开发效率飙升

“无需CSS知识,告别类名记忆,11行代码实现专业级卡片组件”在传统Web开发中,构建美观界面需要同时掌握HTML、CSS、JavaScript三剑客,开发者不得不在多种语言间频繁切换。即使使用Boo...

WebTUI:将终端用户界面(TUI)之美带到浏览器的CSS库

在当今Web技术飞速发展的时代,界面设计愈发复杂多样。然而,随着现代化工具的广泛使用,一些开发者开始回归极简风格,追求一种简洁而富有韵味的设计。WebTUI正是这样一款CSS库,它将经典的终...

人教版二年级下册生字描红汇总(拼音+笔顺+描红),可打印!

可定制内容,评论区留言。本次整理的为人教版二年级下册所有生字,共计300个;写字是小学阶段一项重要的基本功训练,把汉字写得正确、工整、美观,可以提高运用汉字这一交际工具的准确性和效率。对小学生进行写字...

取消回复欢迎 发表评论: