用Ruby编写一个自动化测试脚本,验证网站登录功能的正确性。
测试准备:从江河湖海到代码世界的奇妙之旅
亲爱的朋友们,你们好!今天我要带你们进入一个神奇的世界——测试的世界。在这里,我们将会看到各种各样的测试用例,它们就像江河湖海一样,汇聚在一起,形成了一个庞大的测试体系。那么,如何才能在这个体系中游刃有余呢?别急,让我来为你们一一解答。
1. 测试准备
首先,我们需要做好准备工作。这就像是在探险前要准备好装备一样,没有好的装备,怎么能在未知的世界中生存下来呢?
1.1. 安装依赖库
1.1.1. Capybara
Capybara是一个用于RSpec的集成测试框架,它支持多种浏览器和驱动。安装它就像是给你的船装上了引擎,让你可以在水中自由航行。
gem install capybara
1.1.2. RSpec
RSpec是一个强大的行为驱动开发(BDD)工具,它可以帮助你更好地描述你的代码应该做什么。安装RSpec就像是给你的船装上了雷达,让你可以在茫茫大海中找到方向。
gem install rspec
1.1.3. FactoryBot
FactoryBot是一个用于生成测试数据的库,它可以帮助你快速创建大量的测试数据。安装FactoryBot就像是给你的船装上了鱼网,让你可以在大海中捕捉到更多的鱼。
gem install factory_bot_rails
1.2. 创建测试项目
1.2.1. 初始化Gemfile
Gemfile就像是你的航海图,上面记录了你所需要的所有宝石(gem)。你需要先创建一个Gemfile,然后在里面添加你需要的宝石。
source 'https://rubygems.org'gem 'rails', '~> 6.0'
gem 'capybara', '~> 3.0'
gem 'rspec-rails', '~> 4.0'
gem 'factory_bot_rails', '~> 5.0'
1.2.2. 添加依赖
接下来,你需要在你的Gemfile中添加你刚刚安装的宝石。这就像是在你的航海图中标记出重要的岛屿和港口。
bundle add capybara rspec factory_bot_rails
1.2.3. bundle install
最后,你需要运行bundle install
命令来安装所有的宝石。这就像是给你的船装满了燃料和补给品,让你可以开始你的冒险之旅。
bundle install
1.3. 创建测试文件
1.3.1. 在spec目录下创建一个名为login_test.rb的文件
现在,你需要在spec目录下创建一个名为login_test.rb
的文件。这就像是在你的船上挂上一面旗帜,标志着你的探险正式开始。
touch spec/login_test.rb
2. 编写测试用例
接下来,我们要开始编写我们的测试用例了。这就像是在大海中寻找宝藏一样,我们需要找到那些隐藏在深处的秘密。
2.1. 验证登录功能的基本流程
2.1.1. 打开网站登录页面
首先,我们需要打开网站的登录页面。这就像是在大海中找到了一个神秘的岛屿,我们需要登上这个岛屿才能继续前进。
require 'rails_helper'RSpec.describe 'Login', type: :system doit 'should open the login page' dovisit '/login'expect(page).to have_content('Login')endend```
#### 2.1.2. 输入正确的用户名和密码
然后,我们需要输入正确的用户名和密码。这就像是在岛上找到了一个藏宝箱,我们需要打开这个箱子才能得到里面的宝藏。```ruby
it 'should log in with correct credentials' dofill_in 'username', with: 'correct_user'fill_in 'password', with: 'correct_password'click_button 'Login'expect(page).to have_content('Welcome')end```
#### 2.1.3. 点击登录按钮
最后,我们需要点击登录按钮。这就像是在藏宝箱中找到了一把钥匙,我们需要用这把钥匙打开一扇门才能进入下一个房间。```ruby
it 'should display welcome message after login' doclick_button 'Login'expect(page).to have_content('Welcome')end```
#### 2.1.4. 验证是否成功登录
最后一步是验证我们是否成功登录了。这就像是在下一个房间里找到了更多的宝藏,我们需要确认这些宝藏确实存在并且属于我们。```ruby
it 'should be logged in successfully' doexpect(page).to have_current_path('/dashboard')end
2.2. 验证登录功能的异常情况
除了正常的流程之外,我们还需要验证一些异常情况。这就像是在大海上遇到了风暴和海盗一样,我们需要确保我们的船只足够坚固以应对这些挑战。
2.2.1. 输入错误的用户名或密码
首先,我们需要尝试使用错误的用户名或密码登录。这就像是在大海上遇到了一群海盗试图抢夺我们的宝藏一样,我们需要保护好自己的财产不受损失。
it 'should not log in with incorrect credentials' dofill_in 'username', with: 'wrong_user'fill_in 'password', with: 'wrong_password'click_button 'Login'expect(page).to have_content('Invalid credentials')end```
#### 2.2.2. 不输入用户名和密码直接点击登录按钮
其次,我们需要尝试不输入用户名和密码直接点击登录按钮。这就像是在大海上遇到了一只巨大的章鱼缠住了我们的船舵一样,我们需要摆脱它的束缚才能继续前进。```ruby
it 'should not log in without credentials' doclick_button 'Login'expect(page).to have_content('Username and password required')end```
#### 2.2.3. 只输入用户名或密码,不点击登录按钮
最后,我们需要尝试只输入用户名或密码而不点击登录按钮的情况。这就像是在大海上遇到了一片浓雾导致我们迷失了方向一样,我们需要找到正确的航线才能继续前进。
相关文章:
用Ruby编写一个自动化测试脚本,验证网站登录功能的正确性。
测试准备:从江河湖海到代码世界的奇妙之旅 亲爱的朋友们,你们好!今天我要带你们进入一个神奇的世界——测试的世界。在这里,我们将会看到各种各样的测试用例,它们就像江河湖海一样,汇聚在一起,…...

跳表 | 基本概念 | 代码实现
文章目录 1.跳表的基本概念2.跳表的结构3.跳表的增删改查4.完整代码 1.跳表的基本概念 跳表的本质是一种查找结构,一般查找问题的解法分为两个大类:一个是基于各种平衡树,一个是基于哈希表,跳表比较的特殊,它独成一派…...

分数加减
#include <stdio.h> #include <stdlib.h>// 求最大公因数 int gcd(int a, int b) {return b 0? a : gcd(b, a % b); }// 化简分数 void simplify(int *num, int *den) {int g gcd(*num, *den);*num / g;*den / g;if (*den < 0) {*num * -1;*den * -1;} }//…...

基于卷积神经网络的皮肤病识别系统(pytorch框架,python源码,GUI界面,前端界面)
更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示: 皮肤病识别系统 vgg16 resnet50 卷积神经网络 GUI界面 前端界面(pytorch框架 python源码)_哔哩哔哩_bilibili (一)简介 基于卷积神经网络的皮肤病识…...

QT与嵌入式——获取网络实时时间
目录 1、使用QT通过网络API接口获取网络实时时间 1.1、首先在网上找一个获取实时时间的API接口 1.2、 根据第一步获取的链接来发送请求 1.3、通过connect链接信号与槽 注意的点: 2、为什么需要网络实时时间 3、获取本机的实时时间 4、顺带提一句 1、使用QT通过…...

优化装配,提升品质:虚拟装配在汽车制造中的关键作用
汽车是各种零部件的有机结合体,因此汽车的装配工艺水平和装配质量直接影响着汽车的质量与性能。在汽车装配过程中,经常会发生零部件间干涉或装配顺序不合理等现象,且许多零部件制造阶段产生的质量隐患要等到实际装配阶段才能显现出来…...

Bug的严重等级和优先级别与分类
目录 前言 1. Bug的严重等级定义 2.Bug的优先等级 3.一般 BUG 的正规的处理流程 4.BUG严重等级划分 5.BUG紧急程度定义 前言 Bug是指在软件开发或者系统运行过程中出现的错误、缺陷或者异常情况。它可能导致系统无法正常工作、功能不完整、数据错误或者界面异常等问题。 …...

游戏引擎学习第13天
视频参考:https://www.bilibili.com/video/BV1QQUaYMEEz/ 改代码的地方尽量一张图说清楚吧,懒得浪费时间 game.h #pragma once #include <cmath> #include <cstdint> #include <malloc.h>#define internal static // 用于定义内翻译单元内部函数 #…...
bind返回失败(ctrl+c)结束后不能再次加载
问题现象(VxWorks): 在测试的时候发现使用ctrlc打断程序后再次调用bind绑定失败 错误返回 0x30 问题分析: 1、程序没有开启端口复用。 2、程序在使用ctrlc打断后 vxWorks的打断和linux不相同,并没有清除底层的端口&a…...

菜鸟驿站二维码/一维码 取件识别功能
特别注意需要引入 库文 ZXing 可跳转: 记录【WinForm】C#学习使用ZXing.Net生成条码过程_c# zxing-CSDN博客 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Net.…...

23种设计模式-备忘录(Memento)设计模式
文章目录 一.什么是备忘录设计模式?二.备忘录模式的特点三.备忘录模式的结构四.备忘录模式的优缺点五.备忘录模式的 C 实现六.备忘录模式的 Java 实现七.总结 类图: 备忘录设计模式类图 一.什么是备忘录设计模式? 备忘录设计模式(…...
搜维尔科技:Manus遥操作五指机械手专用手套惯性高精度虚拟现实
Manus遥操作五指机械手专用手套惯性高精度虚拟现实 搜维尔科技:Manus遥操作五指机械手专用手套惯性高精度虚拟现实...
MySql面试题.运维面试题之五
《(全国)MySQL数据库DBA测试题-第1套》 卷面总分 题号 单选题 多选题 判断题 100 题分 42 40 18 得分 一、单选题(每题3分,共计42分;得分____) 1. 二进制rpm包安装的mysql数据库,默认的数据文件存放在如下哪个目录里? A、/usr/local/mysql B、/tmp/ C、/var/lib/my…...

小程序-基于java+SpringBoot+Vue的小区服务管理系统设计与实现
项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:…...
JWT 过期后 自动刷新方案
JWT(JSON Web Token)广泛应用于现代 Web 开发中的认证与授权,它以无状态、灵活和高效的特点深受开发者欢迎。然而,JWT 的一个核心问题是 Token 过期后如何处理。本文将总结常见的解决方案,分析其优缺点,并帮…...
react-amap海量点优化
前言:高版本的react-amap 支持MassMarkers 组件用于一次性添加大量的标记点。本次优化的海量点是在低版本react-amap的基础上。官方推荐使用聚合useCluster属性来优化海量点的渲染。 直接附上代码: import React, { Component } from "react"…...

GRU(门控循环单元)详解
1️⃣ GRU介绍 前面介绍的LSTM可以有效缓解RNN的梯度消失问题,但是其内部结构比较复杂,因此衍生出了更加简化的GRU。GRU把输入门和遗忘门整合成一个更新门,并且合并了细胞状态和隐藏状态。于2014年被提出 2️⃣ 原理介绍 GRU的结构和最简单…...
【代码随想录|回溯算法排列问题】
491.非减子序列 题目链接. - 力扣(LeetCode) 这里和子集问题||很像,但是这里要的是非递减的子序列,要按照给的数组的顺序来进行排序,就是如果我给定的数组是[4,4,3,2,1],如果用子集||的做法先进行排序得到…...

Azure Kubernetes Service (AKS)资源优化策略
针对Azure Kubernetes Service (AKS)的资源优化策略,可以从多个维度进行考虑和实施,以提升集群的性能、效率和资源利用率。以下是一些关键的优化策略: 一、 Pod资源请求和限制 设置Pod请求和限制:在YAML清单中为所有Pod设置CPU和…...

R语言 | 宽数据变成一列,保留对应的行名和列名
对应稀疏矩阵 转为 宽数据框,见 数据格式转换 | 稀疏矩阵3列还原为原始矩阵/数据框,自定义函数 df3toMatrix() 目的:比如查看鸢尾花整体的指标分布,4个指标分开,画到一个图中。每个品种画一个图。 1.数据整理&#…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...