【测试开发】实训记录日志

软件测试系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 了解测试开发和软件测试


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 软件测试系列文章目录
  • 前言
  • 第一天
  • 一、软件测试是什么?
    • 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

游戏测试的使用
在这里插入图片描述


总结

提示:这里对文章进行总结:

例如:记录实训内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/27030.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSD源码总结

一、生成默认框 默认框的宽高 默认框的宽高是相对于原图的尺寸计算出来的。 默认框的中心 默认框的中心是相对于特征图的尺寸计算出来的。 二、将真实框分配给默认框 1、区分正负样本 1.1、选取正样本 计算真实框&#xff08;bboxs&#xff09;与每个默认框&#xff08;…

SpringMVC-【回顾】

回顾MVC架构 什么是mvc&#xff1a;模型、视图、控制器 -----软件设计规范 回顾servlet maven项目导入依赖&#xff08;webmvc,servlet-api,jsp-api,jstl,junit&#xff09;创建子模块&#xff0c;在子模块中添加框架支持&#xff08;在子模块中导入依赖jsp、servlet【因为父…

2018 年一月联考逻辑真题

2018 年一月联考逻辑真题 三、逻辑推理&#xff1a;第 26-55 小题&#xff0c;每小题 2 分&#xff0c;共 60 分。下列每題给出的A.、 B.、C.、D.五个选项中&#xff0c;只有一项是符合试题要求的。请在答题卡上将所选项的字母涂黑。 真题&#xff08;2018-26&#xff09;-翻译…

区块链的基本介绍

目录 1、简介 2、区块链的分类 2.1 公有链 2.2 联盟链 2.3 私有链 3、区块链特征 4、区块链结构 5、区块链对记账权利的分配方式 5.1 POW 5.2 PoS 5.3 DPoS 6、Defi、NFT、 gameFi 7、DAPP 7.1 DAPP 的核心要素 8、比特币 8.1 比特币简介 8.2 比特币数字签名…

基站机房:保障通信网络稳定,如何解决安全隐患?

基站机房作为无线通信网络的关键组成部分&#xff0c;承载着大量的网络设备和通信设施&#xff0c;对于运营商和通信服务提供商来说具有重要意义。 无论是大型运营商还是通信服务提供商&#xff0c;动环监控系统都将成为他们成功运营和管理通信网络的关键工具。 客户案例 案例…

Java学习路线(22)——测试框架Junit

一、单元测试概念 单元测试就是针对最小的功能单元编写测试代码&#xff0c;Java程序最小的功能单元是方法&#xff0c;因此&#xff0c;单元测试就是针对Java方法的测试&#xff0c;进而检查方法正确性。 二、Junit测试框架 &#xff08;一&#xff09;概念&#xff1a; Jun…

HBase:(三)HBase API

HBase:(一)安装部署_只爱大锅饭的博客-CSDN博客hbase部署安装https://blog.csdn.net/qq_35370485/article/details/130988364?spm1001.2014.3001.5501 1.创建maven项目 2.添加依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hba…

【Java基础】注解与反射

一、学习笔记 &#xff08;本文内容基本源自参考链接1视频教程&#xff09; 1、注解的含义 1&#xff09;注解&#xff08;annotation)是从jdk5.0开始引入的新技术&#xff0c;其作用&#xff1a;不是程序本身&#xff0c;可对程序作解释&#xff08;该作用与注释comment相同…

MFC(十二)多个对话框

我们来制定多个对话框&#xff0c;每个对话框都有不同的功能&#xff0c;单击下一步&#xff0c;即可跳转到下一个对话框 1.新建一个启动按钮 2.在资源视图&#xff0c;Dialog里面&#xff0c;右键-->添加资源---->dialog>选择IDD PROPPAGE_SMALL新建 属性页&#…

同浏览器下多窗口进行跨源通信、同源通信

同浏览器下多窗口进行跨源通信、同源通信 多页面通信运用到了“发布订阅”的设计模式&#xff0c;一个页面发布指令&#xff0c;其他页面进行订阅并进行相应的行为操作&#xff01; 一、跨源通信 window.postMessage() window.postMessage() 方法可以安全地实现跨源通信。通常…

Vue.js 中的数据双向绑定是如何实现的?

Vue.js 中的数据双向绑定是如何实现的&#xff1f; Vue.js 是一款流行的前端框架&#xff0c;它的核心功能之一是数据双向绑定。本文将介绍 Vue.js 中数据双向绑定的实现原理&#xff0c;并附上相关代码实例。 什么是数据双向绑定&#xff1f; 在传统的前端开发中&#xff0c…

智能应用搭建平台——LCHub低代码表单 vs 流程表单 vs 仪表盘

1. LCHub低代码如何选择 「流程表单」:填报数据,并带有流程审批功能,适合报销、请假申请或其他工作流; 「表单」:填报数据,并带有数据协作功能,如修改、删除、导入、导出,并可以给不同的人不同的管理权限; 「仪表盘」:数据分析处理、结果展示功能,如数据汇总、趋…

JavaSSM笔记(一)

**建议&#xff1a;**对Java开发还不是很熟悉的同学&#xff0c;最好先花费半个月到一个月时间大量地去编写小项目&#xff0c;不推荐一口气学完&#xff0c;后面的内容相比前面的内容几乎是降维打击&#xff0c;一口气学完很容易忘记之前所学的基础知识&#xff0c;尤其是Java…

Python--注释

Python--注释 <font size4, colorblue> 一、Python中注释的形式<font size4, colorblue> 1、单行注释&#xff1a;使用“#”符号注释<font size4, colorblue> 2、多行注释&#xff1a;使用一对三个英文单引号注释<font size4, colorblue> 3、多行注释&…

通用文字识别OCR 之实现数字化教材

引言 通用文字 OCR 识别 API 是一种功能强大的服务&#xff0c;可用于多场景、多语种的整图文字检测和识别&#xff0c;通过将OCR技术应用于学校环境&#xff0c;可以实现教育资源的数字化和学习过程的自动化。 本文将探讨通用文字识别OCR 在学校的实际应用&#xff0c;希望对…

如何在 JavaScript 中创建自定义警告框

本文将介绍如何使用 jQuery UI、SweetAlert2 和自定义警报功能在 JavaScript 中创建自定义警报框。 使用 jQuery UI 创建自定义警告框 我们可以使用 jQuery UI 来模仿 JavaScript 本机 alert() 函数的功能。 尽管 jQuery UI 有很多 API&#xff0c;您可以使用它的 dialog() AP…

基于摄影测量的三维重建【终极指南】

我们生活的时代非常令人兴奋&#xff0c;如果你对 3D 东西感兴趣&#xff0c;更是如此。 我们有能力使用任何相机&#xff0c;从感兴趣的物体中捕捉一些图像数据&#xff0c;并在眨眼间将它们变成 3D 资产&#xff01; 这种通过简单的数据采集阶段进行的 3D 重建过程是许多行业…

泰克AFG31000系列任意波函数发生器应用

模拟电路检定 这是一个模拟世界。所有物理量均使用模拟信号捕获和表示。因此&#xff0c;需要检定放大器、滤波器和转换器等模拟电路的性能。 InstaView? 技术避免在阻抗不匹配的 DUT 上增加的波形不确定性频率范围为 25 MHz 至 250 MHz由于信号保真度高&#xff0c;无需使…

# 车载软件架构 —— 闲聊几句AUTOSAR OS(三)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标准。到最…

SpringBoot整合OSS文件上传

一、注册阿里云账号并开通OSS服务 1、登录阿里云账号 2、创建一个bucket 3、创建子用户 对自用户分配权限&#xff0c;打开操作OSS的全部权限&#xff08;也可根据业务需求进行更改&#xff09; 4、配置上传跨域规则 任何来源: *允许方法: POST任何请求头Headers: * 二、…