抽奖的诱惑系统注册与登录功能测试报告

发布于:2025-03-26 ⋅ 阅读:(30) ⋅ 点赞:(0)

目录

一:项目背景

二:项目功能

(1) 注册功能

(2) 登录功能

     电话 + 密码登录

 电话 + 短信登录

三:设计测试用例

四:功能测试

五:自动化测试代码

七:遗留风险

八:测试结果评估


一:项目背景

在市场竞争白热化的当下,企业与商家亟需不断推陈出新,打造新颖的营销手段,以此抓住消费者的目光。传统营销模式渐显疲态,消费者对千篇一律的促销活动已然产生审美疲劳。抽奖作为一种极具吸引力的营销手段,能够迅速激发消费者的参与热情。通过设置丰富多样的奖品,如现金红包、优惠券、实物礼品等,不仅能提升消费者在购物过程中的乐趣,增强其对品牌的好感度,还能显着促进销售额的增长。以电商平台的促销活动为例,抽奖系统作为关键的互动环节,能吸引用户浏览商品页面,延长用户在平台的停留时长,有效提高商品的曝光率与销售量

二:项目功能

(1) 注册功能

输入信息

       姓名:必填项,支持中文、英文及常见符号,长度限制在 1-50 个字符。

       邮箱:必填项,需符合邮箱地址格式规范,系统将对输入邮箱进行格式校验,确保其有效性。

       手机号:必填项,仅支持中国大陆手机号码,格式为 11 位数字,系统需对输入的手机号码进行格式验证。

​​​​​​​       密码:必填项,密码强度要求为 8-20 位,至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符(如!@#$%^&* 等)。系统需对密码复杂度进行实时校验,并提示用户密码强度是否符合要求。

 注册流程

管理员在注册页面依次输入姓名、邮箱、手机号和密码。

      系统验证输入信息的格式和完整性。若存在格式错误或必填项未填写,系统在相应输入框旁提示错误信息,引导管理员更正。

     当所有信息输入正确且格式无误后,管理员点击 “注册” 按钮。

      系统检查输入的手机号和邮箱是否已在系统中注册。若已注册,提示管理员该手机号或邮箱已被使用,需更换后重新注册。

       若手机号和邮箱未被注册,系统将管理员信息存储至数据库,并向管理员注册邮箱发送注册成功通知邮件,邮件内容包含账号信息及系统登录指引。

(2) 登录功能

     电话 + 密码登录

     输入信息

​​​​​​​手机号:必填项,格式同注册时要求,为 11 位中国大陆手机号码。

​​​​​​​密码:必填项,输入注册时设置的密码。

      登录流程

        管理员在登录页面选择 “电话 + 密码登录” 方式。

        依次输入手机号和密码。

          系统对输入的手机号和密码进行格式校验。若格式错误,提示管理员重新输入。

      系统在数据库中查询匹配的管理员账号信息。若手机号和密码匹配成功,且该账号为管理员身份,则登录成功,进入抽奖系统管理后台;若匹配失败,提示管理员 “手机号或密码错误,请重新输入”。

 电话 + 短信登录

  输入信息

​​​​​​​手机号:必填项,格式同注册要求。

登录流程

管理员在登录页面选择 “电话 + 短信登录” 方式。

输入手机号后,点击 “获取验证码” 按钮。

系统校验手机号格式是否正确。若格式错误,提示管理员更正。

若手机号格式正确,系统向该手机号发送一条包含 6 位数字验证码的短信。短信内容应明确告知该验证码用于抽奖系统登录,有效期为 5 分钟。

管理员在收到短信后,在登录页面输入收到的验证码。

系统验证验证码的有效性及准确性。若验证码正确且在有效期内,系统在数据库中查询该手机号对应的账号信息,若为管理员身份,则登录成功,进入抽奖系统管理后台;若验证码错误或已过期,提示管理员 “验证码错误或已过期,请重新获取”。同一手机号在 1 小时内获取验证码次数限制为 5 次,超过次数则提示 “获取验证码次数过多,请稍后再试”。

三:设计测试用例

四:功能测试

部分测试界面截图

正常登录

密码格式不正确能进行提示 

a'd 

五:自动化测试代码

项目目录结构

 ChromeBrowser代码

package browserManager;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.time.Duration;

public class ChromeBrowser {
        //创建浏览器驱动
    public static ChromeDriver getChromeDriver(){
       //设置谷歌浏览器驱动
        WebDriverManager.chromedriver().setup();
        //添加浏览器配置
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("--remote-allow-origins=*");//允许任何来源的远程连接
        ChromeDriver chromeDriver = new ChromeDriver(chromeOptions);
        //添加隐式等待
        chromeDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        return chromeDriver;
    }
}

CutScreen代码

package browserManager.screenManager;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;


public class CutScreen {//屏幕截图
    public static void saveScreen(String methodName , RemoteWebDriver driver) throws IOException {
        //设置时间格式
        SimpleDateFormat sim1 = new SimpleDateFormat("yyy-MM-dd");
        SimpleDateFormat sim2 = new SimpleDateFormat("HH-mm-ss");
        String dirTime = sim1.format(System.currentTimeMillis());
        String fileTime = sim2.format(System.currentTimeMillis());
        String fileName = "./src/test/image/"+dirTime+"/"+methodName+"-"+fileTime+".png";
        //截屏
        System.out.println("截图路径:"+fileName);
        File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(srcFile,new File(fileName));


    }
}

RegistSuccess代码

package lotteryRegisty;

import browserManager.ChromeBrowser;
import browserManager.screenManager.CutScreen;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.io.IOException;
import java.time.Duration;

public class RegistSuccess {

    //打开浏览器

  public static void regist(RemoteWebDriver chromeDriver,String userName,
                            String mail,String phoneNumber,String password) throws InterruptedException, IOException {

try{
    //输入登录网址
    chromeDriver.get("http://47.93.243.4:9090/blogin.html");

    //找到注册按钮点击
    chromeDriver.findElement(By.cssSelector("body > div > div.login-container.col-sm-6.col-md-6.col-lg-5.col-xl-5 > div.register-link > a")).click();

    //在新页面找到姓名输入信息
    chromeDriver.findElement(By.cssSelector("#name")).sendKeys(userName);

    // ,邮箱,输入信息,
    chromeDriver.findElement(By.cssSelector("#mail")).sendKeys(mail);

    // 手机号,输入信息,
    chromeDriver.findElement(By.cssSelector("#phoneNumber")).sendKeys(phoneNumber);

    // 密码,输入信息,
    chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);

    //点击注册按钮
    chromeDriver.findElement(By.cssSelector("#registerForm > button")).click();

    //注册成功点击弹窗确认按钮
    Thread.sleep(2000);
    Alert alert = chromeDriver.switchTo().alert();
    String alertText = alert.getText();
    alert.accept();
    if(alertText.contains("注册失败")){

        throw new Exception("正常情况下注册失败");
    }

}catch (Exception e){
    //截图
    CutScreen.saveScreen("RegistSuccess/regist", chromeDriver);//传入方法名与驱动
    e.printStackTrace();
}

   }



}

RegistFail代码

package lotteryRegisty;

import browserManager.screenManager.CutScreen;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.io.IOException;
import java.time.Duration;

public class RegistFail {
    private static void commonInput(RemoteWebDriver driver,String userName,
                                   String mail,String phoneNumber,String password){
        //在新页面找到姓名输入信息
        driver.findElement(By.cssSelector("#name")).sendKeys(userName);

        // ,邮箱,输入信息,
        driver.findElement(By.cssSelector("#mail")).sendKeys(mail);

        // 手机号,输入信息,
        driver.findElement(By.cssSelector("#phoneNumber")).sendKeys(phoneNumber);

        // 密码,输入信息,
        driver.findElement(By.cssSelector("#password")).sendKeys(password);

    }
    //姓名异常
    public static void registNameError(RemoteWebDriver driver,String userName,
                                       String mail,String phoneNumber,String password) throws InterruptedException, IOException {

       try{
           //输入登录网址
           driver.get("http://47.93.243.4:9090/blogin.html");
           //点击注册跳转按钮
           driver.findElement(By.cssSelector("body > div > div.login-container.col-sm-6.col-md-6.col-lg-5.col-xl-5 > div.register-link > a")).click();
        //输入信息
           commonInput(driver,userName,mail,phoneNumber,password);
           //点击注册按钮
           driver.findElement(By.cssSelector("#registerForm > button")).click();
           Thread.sleep(2000);

           //注册成功点击弹窗确认按钮
           Alert alert = driver.switchTo().alert();
           String alertText = alert.getText();
           alert.accept();
           if(alertText.contains("注册成功")){
               throw new Exception("用户名格式错误时注册成功");
           }


       }catch (Exception e){
           //截图
           CutScreen.saveScreen("RegistFail/registNameError", driver);//传入方法名与驱动
           e.printStackTrace();
       }
    }
    //邮箱异常
    public static void registMailError(RemoteWebDriver driver,String userName,
                                       String mail,String phoneNumber,String password) throws InterruptedException, IOException {

        try{
            //输入登录网址
            driver.get("http://47.93.243.4:9090/blogin.html");
            //点击注册跳转按钮
            driver.findElement(By.cssSelector("body > div > div.login-container.col-sm-6.col-md-6.col-lg-5.col-xl-5 > div.register-link > a")).click();
            //输入信息
            commonInput(driver,userName,mail,phoneNumber,password);
            //点击注册按钮
            driver.findElement(By.cssSelector("#registerForm > button")).click();
            Thread.sleep(2000);


            //注册成功点击弹窗确认按钮
            Alert alert = driver.switchTo().alert();
            String alertText = alert.getText();
            alert.accept();
            if(alertText.contains("注册成功")){
                throw new Exception("邮箱格式错误时注册成功");
            }


        }catch (Exception e){
            //截图
            CutScreen.saveScreen("RegistFail/registMailError", driver);//传入方法名与驱动
            e.printStackTrace();
        }
    }
    //手机号异常
    public static void registPhoneNumberError(RemoteWebDriver driver,String userName,
                                       String mail,String phoneNumber,String password) throws InterruptedException, IOException {

        try{
            //输入登录网址
            driver.get("http://47.93.243.4:9090/blogin.html");
            //点击注册跳转按钮
            driver.findElement(By.cssSelector("body > div > div.login-container.col-sm-6.col-md-6.col-lg-5.col-xl-5 > div.register-link > a")).click();
            //输入信息
            commonInput(driver,userName,mail,phoneNumber,password);
            //点击注册按钮
            driver.findElement(By.cssSelector("#registerForm > button")).click();
            Thread.sleep(2000);

            //注册成功点击弹窗确认按钮
            Alert alert = driver.switchTo().alert();
            String alertText = alert.getText();
            alert.accept();
            if(alertText.contains("注册成功")){
                throw new Exception("电话格式错误时注册成功");
            }


        }catch (Exception e){
            //截图
            CutScreen.saveScreen("RegistFail/registPhoneNumberError", driver);//传入方法名与驱动
            e.printStackTrace();
        }
    }
    //密码异常
    public static void registPassWordError(RemoteWebDriver driver,String userName,
                                       String mail,String phoneNumber,String password) throws InterruptedException, IOException {

        try{
            //输入登录网址
            driver.get("http://47.93.243.4:9090/blogin.html");
            //点击注册跳转按钮
            driver.findElement(By.cssSelector("body > div > div.login-container.col-sm-6.col-md-6.col-lg-5.col-xl-5 > div.register-link > a")).click();
            //输入信息
            commonInput(driver,userName,mail,phoneNumber,password);
            //点击注册按钮
            driver.findElement(By.cssSelector("#registerForm > button")).click();
            Thread.sleep(2000);


            //注册成功点击弹窗确认按钮
            Alert alert = driver.switchTo().alert();
            String alertText = alert.getText();
            alert.accept();
            if(alertText.contains("注册成功")){
                throw new Exception("密码格式错误时注册成功");
            }


        }catch (Exception e){
            //截图
            CutScreen.saveScreen("RegistFail/registPassWordError", driver);//传入方法名与驱动
            e.printStackTrace();
        }
    }
}

LoginSuccess代码

package lotteryLogin;

import browserManager.screenManager.CutScreen;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.io.IOException;

public class LoginSuccess {
    public static void phonePasswordLogin(RemoteWebDriver driver, String phoneNumber,String password) throws IOException {
try{
    driver.get("http://127.0.0.1:9090/blogin.html");//打开浏览器
    //找到对应的输入框
    driver.findElement(By.cssSelector("#phoneNumber")).sendKeys(phoneNumber);
    driver.findElement(By.cssSelector("#password")).sendKeys(password);
    driver.findElement(By.cssSelector("#loginForm > button")).click();
    Thread.sleep(2000);
    //如果此时的页面url不包含admin.html,则登录失败
    String currentUrl = driver.getCurrentUrl();
    System.out.println(currentUrl);
    if(!currentUrl.contains("admin.html")){
        throw new Exception("登录失败,页面没跳转");
    }
}catch (Exception e){
    //截图
    CutScreen.saveScreen("LoginSuccess/phonePasswordLogin",driver);//传入方法名与驱动
    e.printStackTrace();
}
    }

}

LoginFail代码

package lotteryLogin;

import browserManager.screenManager.CutScreen;
import org.apache.commons.lang3.StringUtils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.io.IOException;

public class LoginFail {//登录失败场景
 public static void pPphoneNumberIsEmpty(RemoteWebDriver driver,String password) throws IOException {
  try{
      driver.get("http://127.0.0.1:9090/blogin.html");//打开浏览器
      //只输入密码
      driver.findElement(By.cssSelector("#password")).sendKeys(password);
      //点击登录按钮
      driver.findElement(By.cssSelector("#loginForm > button")).click();
      //看看有没有框边提示
      String text = driver.findElement(By.cssSelector("#phoneNumber-error")).getText();
      if(StringUtils.isEmpty(text)){
          throw new RuntimeException("提示错误");
      }
  }catch (Exception e){
      //截图
      CutScreen.saveScreen("LoginFail/phoneNumberIsEmpty", driver);//传入方法名与驱动
      e.printStackTrace();
  }

   }
  public static void pPpasswordIsEmpty(RemoteWebDriver driver,String phoneNumber) throws IOException {
       try{
           driver.get("http://127.0.0.1:9090/blogin.html");//打开浏览器
           //只输入手机号
           driver.findElement(By.cssSelector("#phoneNumber")).sendKeys(phoneNumber);
           //点击登录按钮
           driver.findElement(By.cssSelector("#loginForm > button")).click();
           //看看有没有框边提示
           String text = driver.findElement(By.cssSelector("#password-error")).getText();
           if(StringUtils.isEmpty(text)){
               throw new RuntimeException("页面提示错误");
           }
       }catch (Exception e){
           //截图
           CutScreen.saveScreen("LoginFail/passwordIsEmpty", driver);//传入方法名与驱动
           e.printStackTrace();
       }
    }
 public static  void pPpassWordIsError(RemoteWebDriver driver,String phoneNumber,String password) throws IOException {
     try{
         driver.get("http://127.0.0.1:9090/blogin.html");//打开浏览器
         //找到对应的输入框
         driver.findElement(By.cssSelector("#phoneNumber")).sendKeys(phoneNumber);
         driver.findElement(By.cssSelector("#password")).sendKeys(password);
         driver.findElement(By.cssSelector("#loginForm > button")).click();
         Thread.sleep(2000);
         //登录失败弹窗
         Alert alert = driver.switchTo().alert();
         String alertText = alert.getText();
         alert.accept();
         if(!alertText.contains("登录失败")){
             throw new Exception("密码错误时登录成功");
         }

     }catch (Exception e){
         //截图
         CutScreen.saveScreen("LoginSuccess/phonePasswordLogin",driver);//传入方法名与驱动
         e.printStackTrace();
     }
    }

}

Main代码入口

import browserManager.ChromeBrowser;
import lotteryLogin.LoginFail;
import lotteryLogin.LoginSuccess;
import lotteryRegisty.RegistFail;
import lotteryRegisty.RegistSuccess;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.IOException;

public class Main {
    public static void main(String[] args) throws InterruptedException, IOException {

        ChromeDriver chromeDriver = ChromeBrowser.getChromeDriver();
        RegistSuccess.regist(chromeDriver,"张三","1324566595@qq.com","17564432774","123456");
        //姓名为空
        RegistFail.registNameError(chromeDriver," ","1324567895@qq.com","17564832774","123456");
        //姓名过长
        RegistFail.registNameError(chromeDriver,"张fiasdfhdidjosdvmsadovmsdvopsdmvsdpaovmsdpovmsdpvmavasmdvpasmdvsadvms",
                "1324467895@qq.com","17564832774","123456");
         //邮箱为空
        RegistFail.registMailError(chromeDriver,"张三"," ","17564832774","123456");
        //邮箱不符合格式规范
        RegistFail.registMailError(chromeDriver,"张三","1324567895qq.com","17564832774","123456");
        //注册邮箱已存在
        RegistFail.registMailError(chromeDriver,"张三","1324567895@qq.com","17564832774","123456");
        //手机号为空
        RegistFail.registPhoneNumberError(chromeDriver,"张三","1324567895@qq.com"," ","123456");
        //手机号不符合格式规范
        RegistFail.registPhoneNumberError(chromeDriver,"张三","1324567895@qq.com","1756483277","123456");
        //手机号已存在
        RegistFail.registPhoneNumberError(chromeDriver,"张三","1324567895@qq.com","17564832774","123456");
        //密码为空
        RegistFail.registPassWordError(chromeDriver,"张三","1324567895@qq.com","17564832774","");
        //密码小于8位
        RegistFail.registPassWordError(chromeDriver,"张三","1324567895@qq.com","17564832774","123");
        //密码大于20位
        RegistFail.registPassWordError(chromeDriver,"张三","1324567895@qq.com","17564832774","12345678912dfsdfsdfdsfdsfdfdfsfsafdsfsfdfdsfdsfdfdfdfdffdsdfsd3456789");
        //登录成功
        LoginSuccess.phonePasswordLogin(chromeDriver,"15660880523","kangjia456");
        //登录失败密码为空
        LoginFail.pPpasswordIsEmpty(chromeDriver,"15660880523");
        //登录失败手机号为空
        LoginFail.pPphoneNumberIsEmpty(chromeDriver,"123456");
        //登录失败密码错误
        LoginFail.pPpassWordIsError(chromeDriver,"15660880523","123456");
        chromeDriver.quit();
    }
}

七:遗留风险

高并发场景下性能风险:在本次测试中,模拟的并发用户数有限,未能充分覆盖实际业务中可能出现的高并发场景。当大量用户同时登录时,可能导致接口响应时间延长甚至出现系统崩溃的情况。目前无法确切评估系统在高并发下的性能表现,存在性能瓶颈风险

移动端适配风险:考虑到用户可能通过多种移动设备访问抽奖系统,不同移动设备的屏幕尺寸、操作系统版本及浏览器类型存在较大差异。在本次测试中,仅对部分主流移动设备进行了兼容性测试,对于一些小众或老旧设备,可能存在登录页面显示异常或接口无法正常调用的情况,影响移动端用户的登录体验

八:测试结果评估

功能测试结果

正常登录功能:在输入正确的用户名和密码后,能够成功登录系统,且登录后的页面跳转及用户权限验证均正常,测试通过。

错误用户名或密码登录:当输入错误的用户名或密码时,系统能够准确提示错误信息,如 “用户名或密码错误”,测试通过。

验证码验证功能:在登录过程中,输入正确的验证码能够正常登录,输入错误的验证码则提示 “验证码错误”,,测试通过。

共执行功能测试用例 [17] 个,其中通过 [17] 个,未通过 [0] 个,功能测试通过率为 [100]%。

总结

本次抽奖系统登录接口测试在功能、性能和安全性方面均取得了一定的成果。功能测试验证了接口的基本功能能够正常运行,性能测试发现了系统在高并发场景下的性能瓶颈,安全性测试未检测到常见的安全漏洞。总体而言,系统已具备一定的可用性,但仍存在一些需要改进和优化的地方。


网站公告

今日签到

点亮在社区的每一天
去签到