网页聊天——测试报告——Selenium自动化测试

一,项目概括

1.1 项目名称

网页聊天

1.2 测试时间

2024.9

1.3 编写目的

对编写的网页聊天项目进行软件测试活动,揭示潜在问题,总结测试经验

二,测试计划


2.1 测试环境与配置

服务器:云服务器 ubuntu_22
PC机:机械师T58-V
平台:Windows 10
浏览器:Chrome、FireFox、Edge
自动化测试工具:Selenium

2.2 提取测试点

 2.3 设计测试用例

所有的测试用例绑定在这个帖子上了,需要自取

Selenium自动化执行测试用例

文件分类-- 功能进行分块

 main函数

    public static void main(String[] args) throws IOException, InterruptedException {noLoginTest noLogin=new noLoginTest();noLogin.NoLoginOpen();registerTest register_test=new registerTest();register_test.registerTest();LoginTest login_test=new LoginTest();login_test.loginTest();friendListTest friendList_test=new friendListTest();friendList_test.ListTest();addFriendTest addFriendTest =new addFriendTest();addFriendTest.addFriendTest();chatTest chat=new chatTest();chat.chatTest();driver.quit();}

Utils--所有公共模块

public class Utils {public static WebDriver driver;public static WebDriver createDriver(){//创建驱动if(driver!=null){return driver;}WebDriverManager.edgedriver().setup();//自动下载配置驱动程序EdgeOptions edgeOptions=new EdgeOptions();edgeOptions.addArguments("--allow-remote-origins=*");driver=new EdgeDriver(edgeOptions);//用option创建驱动driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));//隐式等待return driver;}public static void getScreenShot(String str) throws IOException {//截图SimpleDateFormat simple1=new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat simple2=new SimpleDateFormat("hhmmssSS");String format = simple1.format(System.currentTimeMillis());String format2 = simple2.format(System.currentTimeMillis());String fileName="./src/test/image/"+format+"/"+str+"-"+format2+".png";File screenshotAs = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(screenshotAs,new File(fileName));//将截图放到新建的文件里}public static String getTime(){//用来做测试数据SimpleDateFormat simple1=new SimpleDateFormat("hh:mm:ss");return simple1.format(System.currentTimeMillis())+"test";}
}

 registerTest--注册测试

    public void registerFailAll() throws IOException {//注册失败String alertTest = register("zhangsan", "123");assertEquals("用户名被占用!",alertTest);//断言判断alertTest=register("","123");assertEquals("用户名和密码不能为空! ",alertTest);alertTest=register("zhangsan","");assertEquals("用户名和密码不能为空! ",alertTest);alertTest=register("","");assertEquals("用户名和密码不能为空! ",alertTest);}public void registerSucAll() throws IOException {//注册成功String alertTest = register(testUserName, "123");assertEquals("注册成功",alertTest);driver.get("http://localhost:8080/login.html");driver.findElement(By.cssSelector("#submit2")).click();alertTest=register(testUserName+1,"123");assertEquals("注册成功",alertTest);}public String register(String username,String password) throws IOException {//注册driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys(username);driver.findElement(By.cssSelector("#password")).sendKeys(password);getScreenShot(getClass().getName());driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.alertIsPresent());Alert alert = driver.switchTo().alert();String text = driver.switchTo().alert().getText();alert.accept();return text;}

loginTest--登录测试

   public void LoginFailAll() throws IOException, InterruptedException {//登录失败String alertTest = loginUtil("zhang", "123");assertEquals("用户名或密码错误! ",alertTest);alertTest=loginUtil("zhangsan","1");assertEquals("用户名或密码错误! ",alertTest);alertTest=loginUtil("zhangsan","");assertEquals("当前输入用户名或密码为空! ",alertTest);alertTest=loginUtil("","123");assertEquals("当前输入用户名或密码为空! ",alertTest);alertTest=loginUtil("","");assertEquals("当前输入用户名或密码为空! ",alertTest);}public void LoginSucAll() throws IOException, InterruptedException {//成功loginSucUtil("zhangsan", "123");loginSucUtil("wangwu","123");loginSucUtil("lisi","123");}public void loginSucUtil(String username,String password) throws IOException, InterruptedException {driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys("zhangsan");driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));getScreenShot(getClass().getName());//截图最好放在最后一步,不然容易卡driver.navigate().back();}public String loginUtil(String username,String password) throws IOException, InterruptedException {driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys(username);driver.findElement(By.cssSelector("#password")).sendKeys(password);driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.alertIsPresent());String text = driver.switchTo().alert().getText();driver.switchTo().alert().accept();getScreenShot(getClass().getName());return text;}

 登录和注册的自动化效果展示

friendListTest--主页和好友列表测试

        主要检查主页点击用户是否会跳转到聊天页

        好友列表点击是否会跳到聊天页

@Slf4j
public class friendListTest extends Utils {public static WebDriver driver=Utils.createDriver();WebDriverWait wait=new WebDriverWait(driver,Duration.ofSeconds(5));public void ListTest() throws IOException {openWeb();ChatListUI();FriendListUI();}public void openWeb() throws IOException {driver.get("http://localhost:8080/login.html");driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys("lisi");driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button"));getScreenShot(getClass().getName());log.info("打开主页");}public void ChatListUI() throws IOException {wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));driver.findElement(By.cssSelector("#session-list"));//String friendName = driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).getText();driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).click();String friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();assertEquals(friendName,friendChat);//断言一下getScreenShot(getClass().getName());friendName = driver.findElement(By.cssSelector("#session-list > li:nth-child(2) > h3")).getText();driver.findElement(By.cssSelector("#session-list > li:nth-child(2) > h3")).click();friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();assertEquals(friendName,friendChat);//断言一下getScreenShot(getClass().getName());friendName = driver.findElement(By.cssSelector("#session-list > li:nth-child(3) > h3")).getText();driver.findElement(By.cssSelector("#session-list > li:nth-child(3) > h3")).click();friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();assertEquals(friendName,friendChat);//断言一下getScreenShot(getClass().getName());log.info("主页用户点击切换到聊天测试");}public void FriendListUI() throws IOException {//查看是否点击可以跳转driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();driver.findElement(By.cssSelector("#friend-list"));String friendName = driver.findElement(By.cssSelector("#friend-list > li:nth-child(1)")).getText();driver.findElement(By.cssSelector("#friend-list > li:nth-child(1)")).click();String friendChat = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();assertEquals(friendName,friendChat);//断言一下getScreenShot(getClass().getName());log.info("好友列表点击跳转测试");}

addFriendTest--搜索好友,发送申请,新好友聊天测试

主页加载完整

搜索好友功能测试

发送申请功能测试

收到申请测试 

同意申请,拒绝申请测试

新好友聊天测试

public class addFriendTest extends Utils {public static WebDriver driver=Utils.createDriver();public String addRequest=getTime()+"addFriend";WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(5));public void addFriendTest() throws IOException {openWeb();addFriendSend(registerTest.testUserName);//搜索刚注册的账号addFriendAccept(registerTest.testUserName);addFriendChat();addFriendSend("test");//模糊搜索addFriendSend("0000");addFriendSend("");addFriendSend(" ");addFriendSend("lisi");//搜本人}public void openWeb() throws IOException {driver.get("http://localhost:8080/login.html");driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys("lisi");driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"));driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button"));getScreenShot(getClass().getName());System.out.println("加好友UI");}public void addFriendSend(String user) throws IOException {//搜索刚刚注册的账号driver.findElement(By.cssSelector("#userNmae")).clear();driver.findElement(By.cssSelector("#userNmae")).sendKeys(user);driver.findElement(By.cssSelector("#sumbit")).click();
//        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div"));try{//查看搜到的用户是否正确
//            System.out.println(registerTest.testUserName+"查看搜到的用户是否正确");
//        assertEquals(register_test.testStr,driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/div[2]/div/span")).getText());driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div>input")).sendKeys(addRequest);driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:nth-child(1) > button")).click();assertEquals(driver.switchTo().alert().getText(),"添加成功");driver.switchTo().alert().accept();getScreenShot(getClass().getName());System.out.println("添加好友请求发送成功");}catch (Exception e){System.out.println("没找到好友:"+user);}}public void addFriendAccept(String user) throws IOException {//切号//登录聊天对象账号查看短信发送情况driver.get("http://localhost:8080/login.html");driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();
//        System.out.println(receiver+" login");driver.findElement(By.cssSelector("#userName")).sendKeys(user);driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();System.out.println("切号查看请求是否正确");//提示好友申请发来了driver.findElement(By.cssSelector("#session-list > li"));//发送申请的对象是对的assertEquals("lisi",driver.findElement(By.cssSelector("#session-list > li > h3")).getText());//发送申请的话是对的,因为展示的是部分内容所以不能断言
//        assertEquals(addRequest,driver.findElement(By.cssSelector("#session-list > li > p")).getText());//接受申请driver.findElement(By.cssSelector("#session-list > li > button:nth-child(3)")).click();//添加成功提示正确assertEquals("添加成功",driver.switchTo().alert().getText());driver.switchTo().alert().accept();System.out.println("添加好友成功");getScreenShot(getClass().getName());}public void addFriendChat() throws IOException {System.out.println("发短信测试");//测试新好友发短信//找到列表里的那个driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();//可以Xpath选择好友列表页的指定对象driver.findElement(By.xpath("//ul[@id='friend-list']/li[h4[text()='"+"lisi"+"']]")).click();//点击发短信String testChat = getTime();//点击聊天输入框driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).click();//发送方String sender = driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user")).getText();//接收方String receiver = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys(testChat);driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();driver.navigate().refresh();driver.findElement(By.cssSelector("#session-list > li:first-child")).click();String checkTest = driver.findElement(By.cssSelector("div.message-show div.message:last-child div.box p")).getText();assertEquals(testChat,checkTest);getScreenShot(getClass().getName());}

chat---给好友发短信和接收短信的功能测试

测发送不同的内容

测试能否接收到

public class chatTest extends Utils {WebDriver driver=Utils.createDriver();WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(5));public void chatTest() throws IOException {driver.get("http://localhost:8080/login.html");driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys(testUserName);//发送方driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();wait.until(ExpectedConditions.urlToBe("http://localhost:8080/client.html"));//发短信功能,选择最上面的聊天对象,编辑,发送,刷新(必须,加载新短信)重新选择最上面的聊天对象,// 选择最下面最新的短信,注意父类包含多个子类情况下,可以问ai
//        String testChat = getTime();
//        System.out.println(testChat);
//        System.out.println(testChat);//点击好友列表第一位driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();driver.findElement(By.cssSelector("#friend-list > li:nth-child(1)")).click();chat("哈哈哈哈");chat("hhhhha");chat("111112");chat("!@#$%^&*蛤ha");String longStr ="在思想上,我具有较高的政治觉悟,积极向党组织靠拢,始终保持着进取之心,以坚定的信念追求进步。 在学习上,我态度严谨认真,勤奋刻苦。凭借不懈的努力,连续两年荣获国家励志奖学金,并且在英语赛事中多次获奖,扎实的专业功底让我能够自信地应对各种学业挑战。";String receiver=chat(longStr);driver.navigate().back();//退出登录checkMessage(longStr,receiver);//检查短信是否收到}public String chat(String message) throws IOException {//发送短信并返回接受方driver.findElement(By.cssSelector("#session-list > li")).click();//找到好友列表第一个,点击聊天并记录String receiver = driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.title")).getText();//编辑短信发送,并返回接受短信的用户driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys(message);driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();log.info("发送短信并刷新");return receiver;}public void checkMessage(String message,String receiver) throws IOException {//登录接收方账号,检查短信是否正确driver.findElement(By.cssSelector("#userName")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#userName")).sendKeys(receiver);driver.findElement(By.cssSelector("#password")).sendKeys("123");driver.findElement(By.cssSelector("#submit")).click();//点击好友列表driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();//可以Xpath选择好友列表页的指定对象driver.findElement(By.xpath("//ul[@id='friend-list']/li[h4[text()='"+testUserName+"']]")).click();//报错无效选择器,前端找到对应的元素后再次查找发现是元素不可交互导致的log.info("切换账号查看短信是否收到");String test2 = driver.findElement(By.cssSelector("div.message-show div.message:last-child div.box p")).getText();//查看短信assertEquals(message,test2);//断言一下getScreenShot(getClass().getName());log.info("短信成功收到");}

noLoginTest--没有登录测试

查看没有登录直接访问是否会强制返回 

public class noLoginTest {public void NoLoginOpen() throws IOException {WebDriver driver= Utils.createDriver();driver.get("http://localhost:8080/client.html");WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(5));wait.until(ExpectedConditions.alertIsPresent());assertEquals("当前用户未登录!",driver.switchTo().alert().getText());driver.switchTo().alert().accept();getScreenShot(getClass().getName());}
}

整个自动化测试展示

网页自动化测试

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

国庆电影扎堆来袭,AI智能体帮你推荐必看佳片!(附制作教程)

大家好,我是凡人。 今天看到新闻,发现国庆有10部影片要扎堆儿上映,对于选择困难症的我属实有点难选,同时也想避开一些坑省的浪费金钱和时间。 本着不知道就问AI的习惯,想问问大模型怎么看,但做了简单的交…

Go语言基础学习02-命令源码文件;库源码文件;类型推断;变量重声明

命令源码文件 GOPATH指向的一个或者多个工作区,每个工作区都会有以代码包为基本组织形式的源码文件。 Go语言中源码文件可以分为三类:命令源码文件、库源码文件、测试源码文件。 命令源码文件: 命令源码文件是程序的运行入口,是每…

descrTable常用方法

descrTable 为 R 包 compareGroups 的重要函数,有关该函数以及 compareGroups 包的详细内容见:R包compareGroups详细用法 加载包和数据 library(compareGroups)# 加载 REGICOR 数据(横断面,从不同年份纳入,每个变量有…

十五、差分输入运算放大电路

差分输入运算放大电路 1、差分输入运算放大电路的特点、用途, 2、输出信号电压与输入信号电压的关系。

Python | Leetcode Python题解之第420题强密码检验器

题目: 题解: class Solution:def strongPasswordChecker(self, password: str) -> int:n len(password)has_lower has_upper has_digit Falsefor ch in password:if ch.islower():has_lower Trueelif ch.isupper():has_upper Trueelif ch.isdi…

YOLOv10 简介

YOLOv10,由清华大学的研究人员基于 Ultralytics Python 包构建,引入了一种全新的实时目标检测方法,该方法解决了以往 YOLO 版本中后处理和模型架构方面的不足。通过消除非极大值抑制(NMS)并优化各种模型组件&#xff0…

Linux文件IO(五)-三种进程退出方法及空洞文件

1.三种进程退出方法 return 当程序在执行某个函数出错的时候,如果此函数执行失败会导致后面的步骤不能在进行下去时,应该在出错时终止程序运行,不应该让程序继续运行下去,那么如何退出程序、终止程序运行呢?有过编程…

数据结构:内部排序

文章目录 1. 前言1.1 什么是排序?1.2 排序的稳定性1.3 排序的分类和比较 2. 常见的排序算法3. 实现常见的排序算法3.1 直接插入排序3.2 希尔排序3.3 直接选择排序3.4 堆排序3.5 冒泡排序3.6 快速排序3.6.1 hoare思想3.6.2 挖坑法3.6.3 lomuto前后指针法3.6.4 非递归…

Mobile net V系列详解 理论+实战(3)

Mobilenet 系列 论文精讲部分0.摘要1. 引文2. 引文3. 基础概念的讨论3.1 深度可分离卷积3.2 线性瓶颈3.3 个人理解 4. 模型架构细节5. 实验细节6. 实验讨论7. 总结 论文精讲部分 鉴于上一小节中采用的代码是V2的模型,因此本章节现对V2模型论文讲解,便于…

GPT-4o在matlab编程中性能较好,与智谱清言相比

边标签由矩阵给出 s [1 2 3 3 3 3 4 5 6 7 8 9 9 9 10]; t [7 6 1 5 6 8 2 4 4 3 7 1 6 8 2]; G graph(s,t); plot(G) ------------------- GPT-4o给出的代码可用, clc;clear; % 定义边的起点和终点 s [1 2 3 3 3 3 4 5 6 7 8 9 9 9 10]; t [7 6 1 5 6 8 2 …

【数据结构-二维差分】力扣2536. 子矩阵元素加 1

给你一个正整数 n ,表示最初有一个 n x n 、下标从 0 开始的整数矩阵 mat ,矩阵中填满了 0 。 另给你一个二维整数数组 query 。针对每个查询 query[i] [row1i, col1i, row2i, col2i] ,请你执行下述操作: 找出 左上角 为 (row1…

计算机毕业设计 社区医疗服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

使用Diskgenius系统迁移

使用Diskgenius系统迁移 1、使用系统迁移2、注意点3、新备份的系统盘装在电脑上可能出现盘符错乱导致开机不进入桌面情况 1、使用系统迁移 参考视频: DiskGenius无损系统迁移,换硬盘无需重装系统和软件 2、注意点 1)新的硬盘里面的所有资料…

数据结构_1.1、数据结构的基本概念

1、基本概念 数据:是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 数据元素:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理…

【IEEE 独立出版,快速EI检索】第四届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2024)

第四届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2024) 2024 4th International Conference on Artificial Intelligence, Virtual Reality and Visualization 官方信息 会议官网:www.aivrv.org 2024 4th International Conference on…

NXP官方或正点原子mfgtool下载系统报错initialize the library falied error code:29

这是因为mfgtool版本或者源文件被破坏了,你可以重新下载一个被改过的mfgtool程序,我就是去原子官网重新在linux包里找了新的更迭过的mfgtool

【AI大语言模型】提示词工程基础及进阶

【AI大语言模型】提示词工程基础及进阶 什么是提示词(Prompt) 提示词(Prompt)是与人工智能对话时用来引导或触发生成某种输出的指令。 它相当于你在与 AI 进行互动时所提出的问题或任务说明。提示词可以是简短的指令、一个问题…

springboot注册和注入组件方式概览

IoC:Inversion of Control(控制反转) 控制:资源的控制权(资源的创建、获取、销毁等) 反转:和传统的方式不一样了 DI :Dependency Injection(依赖注入) 依赖&…

C++编程语言:基础设施:命名空间(Bjarne Stroustrup)

第 14 章 命名空间(Namespaces) 目录 14.1 组成问题(Composition Problems) 14.2 命名空间(Namespaces) 14.2.1 显式修饰(Explicit Qualification) 14.2.2 使用using 声明 14.2.3 using 指令 14.2.4 参数依赖查询 14.2.5 命名空间的开放性 14.3 模块化和接口 …

接口加解密及数据加解密

目录 一、 加解密方式介绍 1.1 Hash算法加密 1.2. 对称加密 1.3 非对称加密 二、 我们要讲什么? 三、 接口加解密 四、 数据加解密 一、 加解密方式介绍 所有的加密方式我们可以分为三类:对称加密、非对称加密、Hash算法加密。 算法内部的具体实现…