用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.数据整理&#…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
