网页版五子棋设计实现自动化测试

news2024/11/24 18:56:21

目录

一、设计测试用例

二、执行测试

登录页面

功能测试

界面测试 

注册界面 

功能测试

界面测试 

游戏大厅 

功能测试

界面测试 

游戏房间

功能测试 

界面测试 


一、设计测试用例

 

二、执行测试

在执行测试之前首先获取到驱动。

登录页面

功能测试

首先定义start()方法和close()方法,分别测试用例之前和之后执行。 

@BeforeAll
    public  static void start(){
        driver = getDriver();
        driver.get("http://43.143.208.132:8086/login.html");
        //使用隐式等待渲染页面完成
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    }

    @AfterAll
    public static  void close(){
        driver.quit();
    }

正确的用户名和密码进行测试: 

    /**
     * 测试正确登录
     */
    @ParameterizedTest
    @CsvSource(value = {"zhangsan,1234","lucky,12345"})
    public void testLoginTrueUser(String user,String password) throws InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(user);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        String url = driver.getCurrentUrl();
        Assertions.assertEquals("http://43.143.208.132:8099/game_hall.html",url);
        driver.navigate().back();
        //使用隐式等待渲染页面完成
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
    }

测试结果:

 

 

测试错误的用户名或密码: 

/**
     * 测试用户名或密码错误
     */
    @ParameterizedTest
    @CsvSource(value = {"ioio,12345","jake,909"})
    public void testLoginErrorUser(String user,String password) throws InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(user);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        Alert alert = driver.switchTo().alert();
        String tips =alert.getText();
        System.out.println("alert: " + tips);
        Assertions.assertEquals("用户名或密码输入错误",tips);
        alert.accept();
    }

测试结果:

 

测试空的登录名: 

    @ParameterizedTest
    @CsvSource(value = {",12345"})
    public void testLoginNullUser(String user,String password){
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        if(password != null){
            driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        }
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        Alert alert = driver.switchTo().alert();
        String tips =alert.getText();
        Assertions.assertEquals("请输入登录名",tips);
    }

测试结果:

 

测试空的密码登录: 

    /**
     * 测试密码为空
     */
    @ParameterizedTest
    @CsvSource(value = {"Jake,"})
    public void testLoginNullPassword(String user,String password){
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        if(user != null){
            driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(user);
        }
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        Alert alert = driver.switchTo().alert();
        String tips =alert.getText();
        Assertions.assertEquals("请输入密码",tips);
    }

测试结果:

 

测试用户名或密码中含有特殊字符: 

/**
     * 测试特殊字符
     */
    @ParameterizedTest
    @CsvSource(value = {"0*&%=#,12345","Kop,*&%$#"})
    public void testLoginPartUser(String user,String password) throws InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(user);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        String url = driver.getCurrentUrl();
        Assertions.assertEquals("http://43.143.208.132:8086/list.html",url);
        driver.navigate().back();
        //使用隐式等待渲染页面完成
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
    }

测试结果:

 

测试页面中的注册链接是否有效: 

    /**
     * 测试注册链接
     */
    @Test
    public void testLink(){
        driver.findElement(By.xpath("/html/body/div[2]/div/div[4]/a")).click();
        String url = driver.getCurrentUrl();
        Assertions.assertEquals("http://43.143.208.132:8099/register.html",url);
    }

测试结果:

 

界面测试 

public class InterfaceTest {
    public static EdgeDriver driver;
    public static EdgeDriver getDriver(){
        if(driver == null){
            synchronized (PrepareTest.class){
                if(driver == null){
                    EdgeOptions options = new EdgeOptions();
                    options.addArguments("--remote-allow-origins=*");
                    driver = new EdgeDriver(options);
                }
            }
        }
        return driver;
    }
    @BeforeAll
    public  static void start(){
        driver = getDriver();
        driver.get("http://43.143.208.132:8099/login.html");
        //使用隐式等待渲染页面完成
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    }

    @AfterAll
    public static  void close(){
        driver.quit();
    }
    /**
     * 测试登陆文字
     */
    @Test
    public void testDengLu(){
        String dengLu =  driver.findElement(By.xpath("//*[@id=\"body\"]/div/h3")).getText();
        Assertions.assertEquals(dengLu,"登录");
    }

    /**
     * 测试提交按钮的文字
     */
    @Test
    public void testTiJiao(){
        String tiJiao =  driver.findElement(By.xpath("//*[@id=\"submit\"]")).getAttribute("value");
        Assertions.assertEquals(tiJiao,"提交");
    }

    /**
     * 测试用户名输入框
     */
    @Test
    public void testUserInput(){
        WebElement webElement =  driver.findElement(By.xpath("//*[@id=\"username\"]"));
        Assertions.assertNotNull(webElement);
    }
    /**
     * 测试密码输入框
     */
    @Test
    public void testPasswordInput(){
        WebElement webElement =  driver.findElement(By.xpath("//*[@id=\"password\"]"));
        Assertions.assertNotNull(webElement);
    }
    /**
     * 测试提交按钮
     */
    @Test
    public void testSubmit(){
        WebElement webElement =  driver.findElement(By.xpath("//*[@id=\"submit\"]"));
        Assertions.assertNotNull(webElement);
    }
}

测试结果:

 

注册界面 

功能测试

首先定义好start()方法和close()方法。 

    @BeforeAll
    public  static void start(){
        driver = getDriver();
        driver.get("http://43.143.208.132:8099/register.html");
        //使用隐式等待渲染页面完成
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    }

    @AfterAll
    public static  void close(){
        driver.quit();
    }

测试空的用户名: 

    /**
     * 测试用户名为空
     */
    @ParameterizedTest
    @CsvSource(value = {",12345,12345"})
    public void testNullUsername(String username,String password,String password2){
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).sendKeys(password2);
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        Alert alert = driver.switchTo().alert();
        String tips =alert.getText();
        Assertions.assertEquals("请先输入用户名",tips);
        alert.accept();
    }

测试结果:

测试空的密码: 

    /**
     * 测试密码为空
     */
    @ParameterizedTest
    @CsvSource(value = {"tester,,12345"})
    public void testNullPassword(String username,String password,String password2){
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(username);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).sendKeys(password2);
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        Alert alert = driver.switchTo().alert();
        String tips =alert.getText();
        Assertions.assertEquals("请先输入密码",tips);
        alert.accept();
    }

测试结果:

 

测试空的确认密码: 

 

    /**
     * 测试确认密码为空
     */
    @ParameterizedTest
    @CsvSource(value = {"tester,12345,"})
    public void testNullPassword2(String username,String password,String password2){
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(username);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        Alert alert = driver.switchTo().alert();
        String tips =alert.getText();
        Assertions.assertEquals("请先输入确认密码",tips);
        alert.accept();
    }

测试结果:

 

测试两次密码输入不一致: 

/**
     * 测试两次密码不一致
     */
    @ParameterizedTest
    @CsvSource(value = {"tester,12345,09876"})
    public void testNOtEqual(String username,String password,String password2){
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(username);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).sendKeys(password2);
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        Alert alert = driver.switchTo().alert();
        String tips =alert.getText();
        Assertions.assertEquals("两次密码输入不一致,请重新输入",tips);
        alert.accept();
    }

测试结果:

 

测试用户已存在: 

   /**
     * 测试用户已存在
     */
    @ParameterizedTest
    @CsvSource(value = {"jake,12345,12345"})
    public void testUserExit(String username,String password,String password2){
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(username);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).sendKeys(password2);
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        Alert alert = driver.switchTo().alert();
        String tips =alert.getText();
        Assertions.assertEquals("用户已存在",tips);
        alert.accept();
    }

测试结果:

 

测试用户名或密码中含有特殊字符: 

    /**
     * 测试用户名或密码中含有特殊字符
     */
    @ParameterizedTest
    @CsvSource(value = {"j&#*@^,12345,12345","muyt,09*&,09*&"})
    public void testPartUser1(String username,String password,String password2){
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(username);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).sendKeys(password2);
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        Alert alert = driver.switchTo().alert();
        String tips =alert.getText();
        Assertions.assertEquals("添加成功",tips);
        alert.accept();
        alert.start();
    }

测试结果:

 

测试正常注册: 

    /**
     * 正常注册
     */
    @ParameterizedTest
    @CsvSource(value = {"qiyu,12345,12345"})
    public void testPartUser(String username,String password,String password2){
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(username);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password2\"]")).sendKeys(password2);
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        Alert alert = driver.switchTo().alert();
        String tips =alert.getText();
        Assertions.assertEquals("添加成功",tips);
        alert.accept();
    }

测试结果:

 

界面测试 

public class InterfaceTest {
    public static EdgeDriver driver;
    public static EdgeDriver getDriver(){
        if(driver == null){
            synchronized (PrepareTest.class){
                if(driver == null){
                    EdgeOptions options = new EdgeOptions();
                    options.addArguments("--remote-allow-origins=*");
                    driver = new EdgeDriver(options);
                }
            }
        }
        return driver;
    }
    @BeforeAll
    public  static void start(){
        driver = getDriver();
        driver.get("http://43.143.208.132:8099/register.html");
        //使用隐式等待渲染页面完成
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    }

    @AfterAll
    public static  void close(){
        driver.quit();
    }
    /**
     * 测试注册文字
     */
    @Test
    public void testZhuCe(){
        String zhuce =  driver.findElement(By.xpath("/html/body/div[2]/div/h3")).getText();
        Assertions.assertEquals(dengLu,"注册");
    }

    /**
     * 测试提交按钮的文字
     */
    @Test
    public void testTiJiao(){
        String tiJiao =  driver.findElement(By.xpath("//*[@id=\"submit\"]")).getAttribute("value");
        Assertions.assertEquals(tiJiao,"提交");
    }

    /**
     * 测试用户名输入框
     */
    @Test
    public void testUserInput(){
        WebElement webElement =  driver.findElement(By.xpath("//*[@id=\"username\"]"));
        Assertions.assertNotNull(webElement);
    }
    /**
     * 测试密码输入框
     */
    @Test
    public void testPasswordInput(){
        WebElement webElement =  driver.findElement(By.xpath("//*[@id=\"password\"]"));
        Assertions.assertNotNull(webElement);
    }
    /**
     * 测试确认密码输入框
     */
    @Test
    public void testPassword2Input(){
        WebElement webElement =  driver.findElement(By.xpath("//*[@id=\"password2\"]"));
        Assertions.assertNotNull(webElement);
    }
    /**
     * 测试提交按钮
     */
    @Test
    public void testSubmit(){
        WebElement webElement =  driver.findElement(By.xpath("//*[@id=\"submit\"]"));
        Assertions.assertNotNull(webElement);
    }
}

测试结果:

 

游戏大厅 

功能测试

 

首先定义start()方法和close()方法。 

    @BeforeAll
    public  static void start(){
        driver = getDriver();
        driver.get("http://43.143.208.132:8099/login.html");
        //使用隐式等待渲染页面完成
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(18));
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("jake");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("12345");
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    }

    @AfterAll
    public static  void close(){
        driver.quit();
    }

测试开始匹配按钮点击后文字是否改变: 

    /**
     * 测试开始匹配按钮
     */
    @Test
    public void testButton(){
        String word = driver.findElement(By.xpath("//*[@id=\"match-button\"]")).getText();
        Assertions.assertEquals(word,"开始匹配");
        driver.findElement(By.xpath("//*[@id=\"match-button\"]")).click();
        word = driver.findElement(By.xpath("//*[@id=\"match-button\"]")).getText();
        Assertions.assertEquals(word,"匹配中...(点击停止)");
    }

测试结果:

 

界面测试 

public class InterfaceTest {
    public static EdgeDriver driver;
    public static EdgeDriver getDriver(){
        if(driver == null){
            synchronized (PrepareTest.class){
                if(driver == null){
                    EdgeOptions options = new EdgeOptions();
                    options.addArguments("--remote-allow-origins=*");
                    driver = new EdgeDriver(options);
                }
            }
        }
        return driver;
    }
    @BeforeAll
    public  static void start(){
        driver = getDriver();
        driver.get("http://43.143.208.132:8099/login.html");
        //使用隐式等待渲染页面完成
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(18));
        driver.findElement(By.xpath("//*[@id=\"username\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("jake");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("12345");
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    }

    @AfterAll
    public static  void close(){
        driver.quit();
    }

    /**
     * 测试按钮
     */
    @Test
    public void testButton(){
        WebElement button =  driver.findElement(By.xpath("//*[@id=\"match-button\"]"));
        Assertions.assertNotNull(button);
        String word = driver.findElement(By.xpath("//*[@id=\"match-button\"]")).getText();
        Assertions.assertEquals(word,"开始匹配");
    }

    /**
     * 测试导航栏
     */
    @Test
    public void testNavigate(){
        String word =  driver.findElement(By.xpath("/html/body/div[1]")).getText();
        Assertions.assertEquals("对战五子棋",word);
    }
    /**
     * 测试个人信息块
     */
    @Test
    public void testInfo(){
        WebElement screen =  driver.findElement(By.xpath("//*[@id=\"screen\"]"));
        Assertions.assertNotNull(screen);
    }

}

测试结果:

 

游戏房间

由于该页面需要两个用户匹配成功后才能进入,自动化测试实现相对复杂,就设计出测试用例进行了手工测试,且测试通过。

功能测试 

界面测试 

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

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

相关文章

2023年9月长沙/郑州/济南DAMA-CDGA/CDGP认证考试报名

据DAMA中国官方网站消息,2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启,相关事宜通知如下: 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA) 数据治理专家(CertifiedDataGovernanc…

Spark(26):Spark通讯架构

目录 0. 相关文章链接 1. Spark通信架构概述 2. Spark 通讯架构解析 0. 相关文章链接 Spark文章汇总 1. Spark通信架构概述 Spark 中通信框架的发展: Spark 早期版本中采用 Akka 作为内部通信部件。Spark1.3 中引入 Netty 通信框架,为了解决 Shuf…

靶机渗透之prime1(解法2)

prime1 靶机渗透获取目标shell查看当前用户下的信息查找是否含有有效的备份文件经过查找找到enc文件密码md5格式生成登录靶机Prime提权成功获取flag 靶机渗透 获取目标shell 查看当前用户下的信息 在当前文件夹下,enc文件需要密码,尝试去寻找该文件的密…

移远通信发布新款5G/4G、LPWA和GNSS天线,进一步优化物联网终端性能

2023年7月17日,全球领先的物联网整体解决方案供应商移远通信宣布,再次推出三款新型天线产品,以更优的通信和定位性能,满足各类物联网终端在5G/4G、LPWA和GNSS等技术上的更高设计需求。这三款天线包括: YEMN926J1A&…

【GlobalMapper精品教程】061:快速生成全球任意地区等高线

本文讲解在globalmapper中根据任意指定的区域下载数字地形并生成等高线,支持在CASS中打开并编辑。 文章目录 一、指定下载区域二、下载地形数据三、生成等高线四、投影转换五、导出等高线一、指定下载区域 首先,通过在线地图指定一个区域。当然你有区域范围,可以直接下载。…

爱上PyCharm全新UI的五个理由!让Python开发更个性化

在2023.1版本中, JetBrains官方产品团队对 PyCharm 的外观进行了重新设计,目标是降低视觉复杂性,使用户能够轻松访问基本功能,并根据需要逐级呈现复杂功能 – 打造整洁、现代且专业的外观和质感。 在本文中,我们将进一…

基于python+ResNet50算法实现一个图像分类识别系统入门

一、目录 ResNet50介绍图片模型训练预测项目扩展 在本文中将介绍使用Python语言,基于TensorFlow搭建ResNet50卷积神经网络对四种动物图像数据集进行训练,观察其模型训练效果。 二、ResNet50介绍 ResNet50是一种基于深度卷积神经网络(Conv…

ChatGPT助力DevOps的优势与局限

一、前言 DevOps 是一种方法论,旨在提高软件开发和 IT 运营团队的协作和效率。DevOps 涉及各种任务和流程的自动化,例如规划、编码、测试、部署、监控和故障排除。然而,其中一些任务和流程仍然有大量任务需要人工手动处理,而这会…

Debian 系统安装中文输入法-iTOP3588开发板

Debian 系统烧写完成之后,并没有中文输入功能。本文档将介绍如何安装 ibus pinyin 输入法。 首先安装 fcitx 对应的工具,如下图所示: apt-get install fcitx fcitx-tools fcitx-config* fcitx-frontend* fcitx-module* fcitx-ui-* presage …

TDengine 的查询性能与老牌时序数据库相比如何?来看看

在上一篇文章《IoT 场景下写入性能:TDengine16.2 x InfluxDB》中,我们基于 IoT 场景下的 TSBS 时序数据库(Time Series Database)性能基准测试报告对三大数据库写入性能进行了相关解读,较为直观地展现出了 TDengine 的…

springboot @Async 异步调用接口处理数据

Async 异步背景 新增的数据需要分发给下游业务系统,由于下游业务系统状态未知,所以需要异步发送数据给下游业务系统。 系统生效按钮--->controller新增-->异步调用servcie--->数据集成 在springboot框架中实现步骤 首先在启动类上加上Enable…

数据分析:扩展企业微信、钉钉、飞书等告警通知渠道

本章节主要讲述如何扩展告警的通知渠道,以便将告警发送到第三方应用中 企业微信 实现目标 ●在鸿鹄中创建的告警被触发后,将告警通知发送至指定的企业微信群聊 配置步骤 1、打开“企业微信”,点击告警群右上角的“...”按钮 2、点击“群机器人…

opencv双目视觉标定、匹配和测量

双目视觉原理方面参照《学习Opencv》和大牛博客 http://blog.csdn.net/chenyusiyuan/article/details/5970799中16-19系列博客。本文主要记录我自己在双目视觉标定,立体匹配,测量中遇到的问题和解决方法,并附有代码,文末有代码下载的地址,欢迎交流。 博主使用的相机是USB双…

Android P 之Zygote进程源码分析

init进程是用户空间的第一个进程,而zygote进程则是第一个java进程。zygote进程是init进程的子进程,init进程通过解析rc文件,运行了zygote进程。 zygote是Android系统中一个相当重要的进程,它的主要功能就是执行Android应用程序。…

python 安装、配置、使用 xlrd模块、numpy模块

目录 一、xlrd模块 (一)安装xlrd模块 (二) pycharm 配置xlrd (三) 读取xls格式 (四)xlrd读取时间日期时,会是float类型,需要转换。 二、numpy模块 (一)n…

Docker 安装 MongoDB开启认证,创建只读用户权限。

创建带认证的mongdb容器 docker run -itd --name mongo -p 27017:27017 mongo --auth --auth 就是开启mongodb权限认证。如果不加 --auth 则是无权限认证,连接成功后任何用户都可以对数据库进行读写操作。 进入容器并创建用户 docker run -itd --name mongo -p 27…

九州云参与编写的《电力行业边缘计算白皮书》正式发布

近日,由中国通信标准化协会算网融合产业及标准推进委员会(CCSA TC621)牵头组织的2023算网融合产业发展峰会在北京成功召开。 会上,由中国信息通信研究院牵头联合北京航空航天大学、 国网信息通信产业集团、中国电力科学研究院、九…

区块链-java学习和劝退

字面意思:按照区域划分,每个区域通过可信的账本进行结算,将各个区域链接,形成小中心,大整体的财务结算认证体系; 1、学习前准备 您最好掌握一定的财务基本知识; 2、学习步骤 1)区…

❤️创意网页:如何创建一个漂亮的3D正六边形

✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(简单好用又好看) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:欢迎踏入…

Windows系统如何查看物理cpu核数?

Step1:WinR 打开cmd; Step2:输入dxdiag后,回车; Step3:即可查看: