当前位置: 首页 > news >正文

用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界面,前端界面)

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

QT与嵌入式——获取网络实时时间

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

优化装配,提升品质:虚拟装配在汽车制造中的关键作用

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

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)结束后不能再次加载

问题现象&#xff08;VxWorks&#xff09;&#xff1a; 在测试的时候发现使用ctrlc打断程序后再次调用bind绑定失败 错误返回 0x30 问题分析&#xff1a; 1、程序没有开启端口复用。 2、程序在使用ctrlc打断后 vxWorks的打断和linux不相同&#xff0c;并没有清除底层的端口&a…...

菜鸟驿站二维码/一维码 取件识别功能

特别注意需要引入 库文 ZXing 可跳转&#xff1a; 记录【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)设计模式

文章目录 一.什么是备忘录设计模式&#xff1f;二.备忘录模式的特点三.备忘录模式的结构四.备忘录模式的优缺点五.备忘录模式的 C 实现六.备忘录模式的 Java 实现七.总结 类图&#xff1a; 备忘录设计模式类图 一.什么是备忘录设计模式&#xff1f; 备忘录设计模式&#xff08…...

搜维尔科技:Manus遥操作五指机械手专用手套惯性高精度虚拟现实

Manus遥操作五指机械手专用手套惯性高精度虚拟现实 搜维尔科技&#xff1a;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.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…...

JWT 过期后 自动刷新方案

JWT&#xff08;JSON Web Token&#xff09;广泛应用于现代 Web 开发中的认证与授权&#xff0c;它以无状态、灵活和高效的特点深受开发者欢迎。然而&#xff0c;JWT 的一个核心问题是 Token 过期后如何处理。本文将总结常见的解决方案&#xff0c;分析其优缺点&#xff0c;并帮…...

react-amap海量点优化

前言&#xff1a;高版本的react-amap 支持MassMarkers 组件用于一次性添加大量的标记点。本次优化的海量点是在低版本react-amap的基础上。官方推荐使用聚合useCluster属性来优化海量点的渲染。 直接附上代码&#xff1a; import React, { Component } from "react"…...

GRU(门控循环单元)详解

1️⃣ GRU介绍 前面介绍的LSTM可以有效缓解RNN的梯度消失问题&#xff0c;但是其内部结构比较复杂&#xff0c;因此衍生出了更加简化的GRU。GRU把输入门和遗忘门整合成一个更新门&#xff0c;并且合并了细胞状态和隐藏状态。于2014年被提出 2️⃣ 原理介绍 GRU的结构和最简单…...

【代码随想录|回溯算法排列问题】

491.非减子序列 题目链接. - 力扣&#xff08;LeetCode&#xff09; 这里和子集问题||很像&#xff0c;但是这里要的是非递减的子序列&#xff0c;要按照给的数组的顺序来进行排序&#xff0c;就是如果我给定的数组是[4,4,3,2,1]&#xff0c;如果用子集||的做法先进行排序得到…...

Azure Kubernetes Service (AKS)资源优化策略

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

R语言 | 宽数据变成一列,保留对应的行名和列名

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

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...