软件测试系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 了解测试开发和软件测试
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 软件测试系列文章目录
- 前言
- 第一天
- 一、软件测试是什么?
- 1.软件测试的概念
- 2.chatgpt的使用
- 第二天
- 二、软件测试环境的搭建
- 1.python安装环境
- 2.第一个脚本
- 3.pytest的使用
- 4.pytest环境的设置
- 第三天
- 1.pytest框架的使用
- 2.参数组合
- 3.前置条件
- 4.allure的使用
- 5.测试报告的生成
- 6.allure的使用
- 7.生成web网站
- 第四天2023年6月8日
- 1.练习生成网站和作业
- 2.练习游戏的测试
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
第一天
一、软件测试是什么?
1.软件测试的概念
代码如下(示例):
测试开发实训
测试开发和软件测试是不同的
软件测试 测试开发
职责 业务测试 团队效能提升
工作形式 人工测试 自动化测试为主 测试开发能力建设
角色 外包 初级 测试开发工程师 开发工程师
薪酬 低 高
能力要求 低 高
已澄清的需求列表
产品待办列表
需求排期会
迭代待办列表
产品功能细化
迭代周期
每日站会
需求分析 设计 澄清
持续交付
质量保障与测试能力
业务测试 用例维护 自动化测试
用户端测试 服务端测试 专项测试
测试左移 测试右移
效能提升
测试工具 测试框架 测试平台
敏捷过程改进
薪资优势 属于研发线
负责百度核心产品的测试工作
参与产品需求,系统设计和程序代码的评审工作并提出改进意见
评估项目质量风险并指定项目测试方案,设计并执行测试用例,跟踪定位产品软件中的缺陷或问题,保证项目质量
快速的产品以及业务学习能力,敏捷全面的逻辑思维能力
热爱互联网 对互联网相关
Baidu
Alibaba
Tencent
外包测试团队 负责基础功能的测试
测试团队 手工测试 自动化测试 持续集成
测试开发团队 负责测试中
外部测试服务
智能家居技术架构
关键词的提问
2.chatgpt的使用
代码如下(示例):
hatgpt关键字
实现一套课程管理系统,只需要管理ppt即可,课程管理系统使用python编写,使用数据库存储,使用bootstrap做前端
关键词的提问
第二天
二、软件测试环境的搭建
1.python安装环境
代码如下(示例):
https://docs.python.org/3/ 6
https://www.python.org/downloads/windows/
2.第一个脚本
代码如下(示例):
from selenium import webdriver
driver = webdriver.Edge()
driver.get("https://ceshiren.com/t/topic/25737")
这是打开电脑的浏览器
3.pytest的使用
代码如下帮助文档:
https://docs.python.org/zh-cn/3/library/unittest.html?highlight=test
https://docs.pytest.org/en/7.3.x/
测试的文档
4.pytest环境的设置
代码如下(示例):
File-settings-tools-python-testing
第三天
1.pytest框架的使用
代码如下(示例)参数化:
@pytest.mark.parametrize('name', ['python', 'java', 'java编程语言', '操作系统', '计算机原理-编译原理'])
def test_add_course_name(name):
teacher = Teacher('teacher1', 'teacher1@beifangminzudaxue.com')
course = Course(name=('%s' % name))
r = teacher.add_course(course)
assert r == True
assert name in [course.name for course in teacher.get_courses()]
参数的使用
2.参数组合
代码如下(示例)参数化:
import pytest
from shixun2.src.course_manager.course import Course
from shixun2.src.course_manager.student import Student
from shixun2.src.course_manager.teacher import Teacher
def test_get_courses():
student = Student('seveniruby', 'seveniruby@ceshiren.com')
teacher = Teacher('teacher1', None)
course = Course(name='python')
teacher.add_course(course)
assert 'python' in student.get_course_name_list()
def test_get_info():
student = Student('seveniruby', 'seveniruby@ceshiren.com')
assert 'name=seveniruby' in student.get_info()
@pytest.mark.parametrize('name, email', [
['seveniruby', None],
[None, 'seveniruby@ceshiren.com'],
[None, None]
])
def test_get_info_none(name, email):
student = Student(name, email)
if name is None:
name = '未填写'
if email is None:
email = '未填写'
assert f'name={name}' in student.get_info()
assert f'email={email}' in student.get_info()
@pytest.mark.parametrize('name, email, expect', [
['seveniruby', 'seveniruby@ceshiren.com', f'name=seveniruby'],
['思寒', 'seveniruby@ceshiren.com', None],
['思 寒', 'seveniruby@ceshiren.com', None],
['思-寒', 'sevenirubym', None],
['思.寒', 'seveniruby@ceshiren.com', None],
['思/寒', 'seveniruby@ceshiren.com', f'name=思寒']
])
def test_get_info_not_none(name, email, expect):
if expect is None:
expect = f'name={name}'
student = Student(name, email)
assert expect in student.get_info()
assert f'email={email}' in student.get_info()
@pytest.mark.parametrize('name', [
'seveniruby',
'思寒',
'思 寒',
'思-寒',
'思.寒',
'思/寒',
])
@pytest.mark.parametrize('email', [
'seveniruby@ceshiren.com',
'seven-ruby@ceshiren.com',
'@ceshiren.com',
'思寒@ceshiren.com',
'思寒@思寒.com'
])
def test_get_info_not_none(name, email):
print(name)
print(email)
student = Student(name, email)
assert student is not None
# from course_manager.person import Person
# from course_manager.school import current_school
from shixun2.src.course_manager.person import Person
from shixun2.src.course_manager.school import current_school
class Student(Person):
def __init__(self, name, email):
super().__init__(name, email)
def get_courses(self):
return current_school.get_courses()
def get_course_name_list(self):
return [course.name for course in current_school.get_courses()]
if __name__ == '__main__':
# 反模式
student = Student('seveniruby', 'seveniruby@ceshiren.com')
print(student.get_info())
student = Student('seveniruby', None)
print(student.get_info())
print(student.get_courses())
student = Student(None, None)
student.get_info()
参数组合的和多参数和单参数
3.前置条件
代码如下(示例)参数化:
https://blog.csdn.net/anndy_/article/details/119885380
前置条件
4.allure的使用
代码如下(示例)参数化:
安装
https://blog.csdn.net/lixiaomei0623/article/details/120185069
运行
https://blog.csdn.net/weixin_42683461/article/details/120727117
allure的使用
5.测试报告的生成
代码如下(示例)参数化:
生成报告
allure serve D:/PycharmProjects/shixun2/shixun2/docs
运行命令
pytest D:/PycharmProjects/shixun2/shixun2/tests --alluredir=D:/PycharmProjects/shixun2/shixun2/docs --clean-al
luredir
6.allure的使用
代码如下(示例)参数化:
安装
https://blog.csdn.net/lixiaomei0623/article/details/120185069
运行
https://blog.csdn.net/weixin_42683461/article/details/120727117
allure的使用
7.生成web网站
代码html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>课程管理系统</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1 class="text-center my-4">课程管理系统</h1>
<form action="/add" method="POST" class="mb-4">
<div class="mb-3">
<label class="form-label">课程名</label>
<input type="text" class="form-control" name="name">
</div>
<div class="mb-3">
<label class="form-label">PPT</label>
<input type="text" class="form-control" name="ppt">
</div>
<button type="submit" class="btn btn-primary">添加课程</button>
</form>
<hr>
<h2 class="my-4">所有课程</h2>
<ul class="list-group">
{% for course in courses %}
<li class="list-group-item d-flex justify-content-between align-items-center">
{{ course.name }}
<a href="/delete/{{ course.name }}" class="btn btn-danger">删除</a>
</li>
{% endfor %}
</ul>
</div>
</body>
</html>
html的代码以上
代码app.py:
from urllib import request
from flask import Flask, render_template,request, redirect
from shixun2.src.course_manager.course import Course
from shixun2.src.course_manager.school import School
app = Flask(__name__)
school = School()
@app.route('/', methods=['GET'])
def index():
return render_template('index.html', courses=school.get_courses())
@app.route('/add', methods=['POST'])
def add_course():
name = request.form.get('name')
ppt = request.form.get('ppt')
course = Course(name, ppt)
school.add_course(course)
return redirect('/')
@app.route('/delete/<course_name>', methods=['GET'])
def delete_course(course_name):
# school.delete_course(course_name)
school.remove_course(course_name)
return redirect('/')
if __name__ == '__main__':
app.run(debug=True)
app.py的代码
第四天2023年6月8日
1.练习生成网站和作业
代码如下(示例)参数化:
生成web网站
请设计一个课程管理系统,
学校可以管理课程。
课程包含课程名字与ppt。
老师可以添加课程到学校。
管理员可以添加课程与删除课程。
后端代码使用python开发,课程数据存储可以使用变量的方式。
前端代码使用bootstrap,前端界面界面支持对课程的新增、展示、删除。使用后端的模板技术实现。
不要提供注释。
练习3
使用类的方式实现测试装置 setup setup_class teardown teardown_class
生成测试报告
游戏的使用
2.练习游戏的测试
代码如下(示例)hero.py:
class Hero:
def __init__(self, name, power, attack):
self.name = name
self.power = power
self.attack = attack
def action(self, target: 'Hero'):
target.power = target.power - self.attack
print(f"{self.name} power={self.power} -> {target.name} power={target.power}")
代码如下(示例)play.py:
from shixun2.src.game.hero import Hero
class Play:
def __init__(self, main, target):
self.main: Hero = main
self.target: Hero = target
def start(self):
while self.main.power >= 0 and self.target.power >= 0:
self.main.action(self.target)
if self.target.power <= 0:
return True
self.target.action(self.main)
if self.main.power <= 0:
return False
def pause(self):
...
代码如下(示例)test_play.py:
from shixun2.src.game.hero import Hero
from shixun2.src.game.paly import Play
class TestPlay:
def test_fail(self):
hero1 = Hero(name="李白", power=100, attack=20)
hero2 = Hero(name='东皇太一', power=80, attack=40)
play = Play(hero1, hero2)
r = play.start()
assert r == False
def test_win(self):
hero1 = Hero(name="李白", power=100, attack=20)
hero2 = Hero(name='东皇太一', power=80, attack=30)
play = Play(hero1, hero2)
r = play.start()
assert r == True
游戏测试的使用
总结
提示:这里对文章进行总结:
例如:记录实训内容