【测试基础02】

news2024/11/19 21:31:23

测试基础02

  • 一、HTML基础
  • 二、Python导入三方模块
  • 三、安装webgrock驱动
  • 四、元素定位
    • (1)、元素定位工具
    • (2)、元素定位方式
    • (3)、XPATH路径
    • (3)、CSS选择器
  • 五、Selenium WebDriver初步应用
    • (1)、基本方法
    • (2)、测试案例1
    • (3)、测试案例2
    • (3)、测试案例3
  • 六、获取元素信息的方法
  • 七、frame表单切换
  • 八、UnitTest框架
    • (1)、核心要素
    • (2)、使用方法
  • 九、断言
  • 九、综合测试案例

一、HTML基础

在python里面创建一个html文件
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网页标签</title>
</head>
<body>
网页内容
<br>
<input id="u2" maxlength="8" name="w2" type="text">
<br>
<a href="http://www.baidu.com">百度</a>
</body>
</html>

然后可以在浏览器输入其html文件地址就可以看到网页信息
在这里插入图片描述

二、Python导入三方模块

1、dos命令安装selenium
在这里插入图片描述
使用pip show selenium可以查看当前是否下载成功
在这里插入图片描述

2、python添加selenium
查看设置
在这里插入图片描述
可以看安装库里面有没有selenium,有安装的话可以查看版本。没有的话可以选择➕号,搜索selenium并添加到库。
在这里插入图片描述

三、安装webgrock驱动

下载firefox浏览器驱动
注意查看firefox的版本,浏览器驱动的版本要和python的selenium的版本对应。

https://github.com/mozilla/geckodriver/releases/

链接: https://github.com/mozilla/geckodriver/releases/
找到自己的系统环境变量,复制位置
在这里插入图片描述
将刚刚下载好的驱动放到复制的地址当中即可,这样对于py的命令,电脑系统就找到浏览器驱动并自动使用。
要是嫌上面操作麻烦,也可以直接将浏览器驱动放到做Python做自动化测试的项目里面。
在这里插入图片描述

四、元素定位

(1)、元素定位工具

F12进入代码查看,按照以下步骤即可查看元素定位
在这里插入图片描述

(2)、元素定位方式

selenium提供了8种定位方式

id                 --元素属性
name               --元素属性
class_name         --元素属性
tag_name           --标签                 ##注意网页中可能会有多个标签
link_text          --超链接               ##对应网页中的<a标签,精确匹配
partial_link_text  --超链接               ##对应网页中的<a标签,可以模糊匹配
XPath                -指定位置对应        ##对指定元素路径
CSS

使用方法

xx=driver.find_element(By.ID,'id')
xx=driver.find_element(By.name,'name')
xx=driver.find_element(By.class_name,'class_name')
xx=driver.find_element(By.tag_name,'tag_name')
xx=driver.find_element(By.link_text ,'link_text ')

(3)、XPATH路径

1、使用绝对路径即可找到元素
以下为html代码

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网页标签</title>
</head>
<body>
网页内容
<br>
<input id="u2" maxlength="8" name="w2" type="text">
<br>
<a href="http://www.baidu.com">百度</a>
</body>
</html>

在这里插入图片描述
2、使用相对路径+其他元素进行定位
以下为html代码

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网页标签</title>
</head>
<body>
网页内容
<br>
<input id="u2" maxlength="8" name="w2" type="text">
<br>
<a href="http://www.baidu.com">百度</a>
</body>
</html>

假如要找到文本为百度的超链接,可以使用绝对路径加+元素属性

//a[@href='http://www.baidu.com'][contains(text(),'百度')]

//a代表所有a节点,@href=‘http://www.baidu.com’]代表匹配超链接地址,[contains(text(),‘百度’)]代表匹配文本为百度的,三者并列去寻找元素。
在这里插入图片描述

(3)、CSS选择器

id选择:#id
class选择:.class
元素选择器:[元素=‘’属性]

举例id属性
在这里插入图片描述
举例
在这里插入图片描述

五、Selenium WebDriver初步应用

(1)、基本方法

1、导入Selenium模块

from selenium import webdriver

2、新建对象、并启动浏览器

from selenium import webdriver
from selenium.webdriver.common.by import By
driver=webdriver.Firefox()                

3、调用maximize_window()窗口最大化

from selenium import webdriver
from selenium.webdriver.common.by import By
driver=webdriver.Firefox()
driver.maximize()                窗口最大化

4、调用get()方法打开一个网页

from selenium import webdriver
from selenium.webdriver.common.by import By
driver=webdriver.Firefox()
driver.maximize()
driver.get("http://account.ryjiaoyu.com/log-in")        打开网页

4、清理文本

from selenium import webdriver
from selenium.webdriver.common.by import By
driver=webdriver.Firefox()
driver.maximize()
driver.get("http://account.ryjiaoyu.com/log-in")
driver.get("http://account.ryjiaoyu.com/log-in").clear()
6、调用send_keys输入文本
from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize()
driver.get("http://account.ryjiaoyu.com/log-in")
driver.get("http://account.ryjiaoyu.com/log-in").clear()               清理文本

5、输入内容

from selenium import webdriver
from selenium.webdriver.common.by import By
driver=webdriver.Firefox()
driver.maximize()
driver.get("http://account.ryjiaoyu.com/log-in")
driver.get("http://account.ryjiaoyu.com/log-in").clear()
6、调用send_keys输入文本
from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize()
driver.get("http://account.ryjiaoyu.com/log-in")
driver.get("http://account.ryjiaoyu.com/log-in").clear()               清理文本
driver.find_element(By.XPATH,"//input[@id='Email']").send_keys('xxx')
driver.find_element(By.XPATH,"//input[@id='Password']").clear()
driver.find_element(By.XPATH,"//input[@id='Password']").send_keys('xxx')

6、通过click()点击操作

from selenium import webdriver
from selenium.webdriver.common.by import By
driver=webdriver.Firefox()
driver.maximize()
driver.get("http://account.ryjiaoyu.com/log-in")
driver.get("http://account.ryjiaoyu.com/log-in").clear()
6、调用send_keys输入文本
from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize()
driver.get("http://account.ryjiaoyu.com/log-in")
driver.get("http://account.ryjiaoyu.com/log-in").clear()               清理文本
driver.find_element(By.XPATH,"//input[@id='Email']").send_keys('xxx')
driver.find_element(By.XPATH,"//input[@id='Password']").clear()
driver.find_element(By.XPATH,"//input[@id='Password']").send_keys('xxx')
driver.find_element(By.XPATH,"//input[@value='登 录']").click()       登录

7、导入time模块

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Firefox()
driver.maximize()
driver.get("http://account.ryjiaoyu.com/log-in")
time.sleep(3)                                                                                等待3秒
driver.get("http://account.ryjiaoyu.com/log-in").clear()               清理文本
driver.find_element(By.XPATH,"//input[@id='Email']").send_keys('xxx')
driver.find_element(By.XPATH,"//input[@id='Password']").clear()
driver.find_element(By.XPATH,"//input[@id='Password']").send_keys('xxx')
driver.find_element(By.XPATH,"//input[@value='登 录']").click()       登录

8、关闭浏览器

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Firefox()
driver.maximize()
driver.get("http://account.ryjiaoyu.com/log-in")
time.sleep(3)                                                                                等待3秒
driver.get("http://account.ryjiaoyu.com/log-in").clear()               清理文本
driver.find_element(By.XPATH,"//input[@id='Email']").send_keys('xxx')
driver.find_element(By.XPATH,"//input[@id='Password']").clear()
driver.find_element(By.XPATH,"//input[@id='Password']").send_keys('xxx')
driver.find_element(By.XPATH,"//input[@value='登 录']").click()       登录
driver.quit()                             关闭

(2)、测试案例1

利用ID对空白行进行填写
在这里插入图片描述
使用以下代码即可调用

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 获取浏览器对象
driver=webdriver.Firefox()
# 窗口最大化
driver.maximize_window()
#  get方式获取地址
driver.get("file:///E:/pythonProject/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/%E7%BD%91%E9%A1%B5.html")
# 等待三秒
time.sleep(3)
#  id元素定位
black=driver.find_element(By.ID,'u2')
# 填写内容
black.send_keys('123')
# 等待三秒
time.sleep(3)
# 退出
driver.quit()

(3)、测试案例2

利用超链接匹配,点击百度超链接
在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 获取浏览器对象
driver=webdriver.Firefox()
# 窗口最大化
driver.maximize_window()
#  get方式获取地址
driver.get("file:///E:/pythonProject/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/%E7%BD%91%E9%A1%B5.html")
# 等待三秒
time.sleep(3)
#  id元素定位
black=driver.find_element(By.PARTIAL_LINK_TEXT,'百度')       超链接匹配百度
black.click()
# 等待三秒
time.sleep(3)

(3)、测试案例3

对网页输入10次账户和密码并登录

for i in range(1,11):
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    driver=webdriver.Firefox()
    driver.maximize_window()
    driver.get("https://account.ryjiaoyu.com/log-in")
    time.sleep(3)
    driver.find_element(By.ID,'Email').clear()
    driver.find_element(By.ID, 'Email').send_keys('xxx')
    driver.find_element(By.ID,'Password').clear()
    driver.find_element(By.ID,'Password').send_keys('xxx')
    driver.find_element(By.XPATH, "//input[@value='登 录']").click()
    driver.quit()

六、获取元素信息的方法

1、size   返还元素大小
2、text   获取元素的文本
3、 get_attribute("xxx")   获取属性值,传递的参数为元素的属性名
4、is_displayed()            判断袁术是否可见
5、is)enabled()              判断元素是否可用
6、is_selected()             判断元素是否选中

注意:size、text为属性,调用时无括号;如:xxx.size

测试案例
获取输入账户框获取文本大小
获取第一个超链接的文本框内容
获取第一个超链接的地址

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 获取浏览器对象
driver=webdriver.Firefox()
# 窗口最大化
driver.maximize_window()
#  get方式获取地址
driver.get("https://account.ryjiaoyu.com/log-in")
# 等待三秒
time.sleep(3)
#获取输入账户框获取文本大小
size=driver.find_element(By.ID,'Email').size
print("文本框大小为",size)
#获取第一个超链接的文本框内容
text=driver.find_element(By.CSS_SELECTOR,'a').text
print("文本框内容为",text)
#获取第一个超链接的地址
att=driver.find_element(By.CSS_SELECTOR,'a').get_attribute('href')
print("第一个超链接的地址内容为",att)

在这里插入图片描述

七、frame表单切换

在一个页面里面有多个表单的,填写信息时需要先切换表单

driver.switch_to.default_content()        切换到默认表单
driver.switch_to.frame("myframe1")        切换到另外一个表单

八、UnitTest框架

Unittest是python自带的单元测试框架,可以解决一类事情的功能集合,可以生成测试报告。

(1)、核心要素

1、TestCase            测试用例
2、TestSuite           测试套件(加载测试案例)
3、TestRunner          运行用例
4、TestLoader          运行用例(指定模块)
5、Fixture             保证执行(一个初始化使用,一个结束使用)

(2)、使用方法

1、TestCase

1、导包: import unittest
2、定义测试类:新建测试类必须继承unittest.Testcase
3、定义测试方法:测试方法必须以test开头

例:编写求和测试函数
注意如果在类这运行,则会运行下面所有定义的函数
在这里插入图片描述
注意如果在下面定义的函数这运行,则只会运行定义的函数
在这里插入图片描述
2、TestSuite和TestRunner
多个测试用例集合在一起就是一个TestSuite,执行多个模块就是 TestRunner
使用方法1、添加指定运行的方法
这是test1里面的类和方法
在这里插入图片描述
使用 TestSuite和TestRunner调用test1里面的类和方法
在这里插入图片描述
使用方法1、添加指定运行的类
这是test2文件里面的内容
在这里插入图片描述
执行整个类的方法
在这里插入图片描述

4、TestLoader
使用TestSuite的话,对于每一个python文件都得导入,如果有100个文件则需要导入100次,过于麻烦。因此引入了TestLoader语法。
可以搜索指定目录下指定xx开头得.py文件,将其加入到测试套件
对于3个test文件和tp文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
使用调用方法,指定/data下的tp文件加入到套件
在这里插入图片描述

5、Fixture
set和tear方法在每个方法运行之前和运行之后运行,即有几个方法,就要运行几个set和tear方法

1、初始化函数:def setUp()
2、结束函数:def tearDown()

在这里插入图片描述
还可以设置类级别的fixture,可以在运行类方法之前和类方法之后运行一次。
在这里插入图片描述

九、断言

常用的
在这里插入图片描述

还要有包括的判断语法
在这里插入图片描述
在这里插入图片描述
思考,可以用对(”登录成功“,”登录成功,欢迎xx等人进入)这种进行判断。

九、综合测试案例

利用web自动化验证网站的登录模块,并校验数据库里的账户和密码是否能够成功登录。
在这里插入图片描述
在这里插入图片描述

需求文档:
1、要求使用Py的unittest模块实现自动化
1、利用py自动化实现网站的登录模块正确性验证,如果登录失败则截图保存在指定的文件夹里。
2、利用mysql里面的账户和密码进行登录,登录不了的则将截图保存在指定文件里,并以该用户的名字命名。

测试案例
在这里插入图片描述
代码
测试序列1-4,代码执行部分

import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import os


os.system('mkdir Loadtest1')
class Test_x1(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Firefox()
        self.driver.maximize_window()
        self.driver.get("https://account.ryjiaoyu.com/log-in")
        time.sleep(3)

    def tearDown(self) -> None:
        self.driver.quit()


    #### 账户和密码都不填
    def test_01(self):
        self.driver.find_element(By.ID, 'Email').clear()
        self.driver.find_element(By.ID, 'Email').send_keys('')
        self.driver.find_element(By.ID, 'Password').clear()
        self.driver.find_element(By.ID, 'Password').send_keys('')
        self.driver.find_element(By.XPATH, "//input[@value='登 录']").click()
        time.sleep(3)
        result1 = self.driver.find_element(By.ID,'Email-error').text
        result2 = self.driver.find_element(By.ID, 'Password-error').text
        result3=result1+result2
        print(result3)
        expect_result3 = '请输入Email/手机请输入密码'
        try:
            self.assertEqual(result3,expect_result3)
        except AssertionError:
            self.driver.get_screenshot_as_file(r'E:\pythonProject\软件测试\测试案例\Loadtest1\账户和密码都不填.png')
            raise

    #### 只填写账户

    def test_02(self):
        self.driver.find_element(By.ID, 'Email').clear()
        self.driver.find_element(By.ID, 'Email').send_keys('1232123')
        self.driver.find_element(By.ID, 'Password').clear()
        self.driver.find_element(By.ID, 'Password').send_keys('')
        self.driver.find_element(By.XPATH, "//input[@value='登 录']").click()
        time.sleep(3)
        result2 = self.driver.find_element(By.ID, 'Password-error').text
        print(result2)
        expect_result2 = '请输入密码'
        try:
            self.assertEqual(result2, expect_result2)
        except AssertionError:
            self.driver.get_screenshot_as_file(r'E:\pythonProject\软件测试\测试案例\Loadtest1\只填写账户.png')
            raise



    #### 只填写密码

    def test_03(self):
        self.driver.find_element(By.ID, 'Email').clear()
        self.driver.find_element(By.ID, 'Email').send_keys('')
        self.driver.find_element(By.ID, 'Password').clear()
        self.driver.find_element(By.ID, 'Password').send_keys('12321321')
        self.driver.find_element(By.XPATH, "//input[@value='登 录']").click()
        time.sleep(3)
        result1=self.driver.find_element(By.ID,'Email-error').text
        print(result1)
        expect_result1 = '请输入Email/手机'
        try:
            self.assertEqual(result1, expect_result1)
        except AssertionError:
            self.driver.get_screenshot_as_file(r'E:\pythonProject\软件测试\测试案例\Loadtest1\只填写密码.png')
            raise


    #### 填写账户和错误密码

    def test_04(self):
        self.driver.find_element(By.ID, 'Email').clear()
        self.driver.find_element(By.ID, 'Email').send_keys('12321')
        self.driver.find_element(By.ID, 'Password').clear()
        self.driver.find_element(By.ID, 'Password').send_keys('21321')
        self.driver.find_element(By.XPATH, "//input[@value='登 录']").click()
        time.sleep(3)
        result3=self.driver.find_element(By.XPATH,"//*[@class='validation-summary-errors col-md-offset-3 text-danger']").text
        print(result3)
        expect_result3 = '账号或密码错误'
        try:
            self.assertEqual(result3, expect_result3)
        except AssertionError:
            self.driver.get_screenshot_as_file(r'E:\pythonProject\软件测试\测试案例\Loadtest1\账户或密码错误.png')
            raise


    #### 填写正确账户和密码
    def test_05(self):
        self.driver.find_element(By.ID, 'Email').clear()
        self.driver.find_element(By.ID, 'Email').send_keys('15717002454')
        self.driver.find_element(By.ID, 'Password').clear()
        self.driver.find_element(By.ID, 'Password').send_keys('ck2624589ck')
        self.driver.find_element(By.XPATH, "//input[@value='登 录']").click()
        time.sleep(3)
        result3 = self.driver.find_element(By.ID,"new-message-count").text
        print(result3)
        expect_result3 = '新私信'
        try:
            self.assertEqual(result3, expect_result3)
        except AssertionError:
            self.driver.get_screenshot_as_file('E:\pythonProject\软件测试\测试案例\Loadtest1\正确的账户和密码登录失败截图.png')
            raise

#if __name__=='__main__':
#    unittest.main()

测试序列5,代码执行部分

###数据库数据下载,拆分
import mysql.connector
import pandas as pd
from sqlalchemy import create_engine
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="westos",
  auth_plugin='mysql_native_password',
  database='ck'
)
df1 = pd.read_sql(sql="select name,address from ck.customers",con=mydb)
df1.to_csv('表格.csv',index=False)



###数据库账户密码登录校验部分
import unittest
from selenium import webdriver
import time
import pandas as pd
from selenium.webdriver.common.by import By


DATA = pd.read_csv('表格.csv')
class TEST_X2(unittest.TestCase):
    def test(self):
        i=-1
        while i<13:
            i=i+1
            data1 = DATA.iloc[i, 0]
            data2 = DATA.iloc[i, 1]
            driver = webdriver.Firefox()
            driver.maximize_window()
            driver.get("https://account.ryjiaoyu.com/log-in")
            driver.find_element(By.ID, 'Email').clear()
            driver.find_element(By.ID, 'Email').send_keys(f'{data1}')
            driver.find_element(By.ID, 'Password').clear()
            driver.find_element(By.ID, 'Password').send_keys(f'{data2}')
            driver.find_element(By.XPATH, "//input[@value='登 录']").click()
            time.sleep(3)
            try:
                result3 = driver.find_element(By.ID, "new-message-count").text
                driver.quit
            except:
                driver.get_screenshot_as_file(f'E:\\pythonProject\\软件测试\\测试案例\\Loadtest2\\{data1}.png')
                driver.quit()
if __name__=='__main__':
    unittest.main()

执行调用部分,可以根据需求,选择执行测试序列1-4代码,也可以选择执行测试序列5代码。

import unittest
from Loadtest1 import Test_x1
from Loadtest2 import TEST_X2
suite=unittest.TestSuite()
suite.addTest(unittest.makeSuite(Test_x1))
unittest.TextTestRunner().run(suite)

结果执行案例1-4,案例全部通过
在这里插入图片描述
结果执行案例5,失败案例全部保存在指定文件夹
在这里插入图片描述

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

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

相关文章

价值5000元以上的某马大数据全套视频【强烈推荐】

某马大数据 01、阶段一 Python大数据开发基础 01、第一章大数据介绍及开发环境 02、第二章 linux命令 03、第三章 MySQL数据库 04、第四章 excel的使用 05、第五章 kettle的使用 06、第六章 数据分析及可视化 07、第七章 大数据框架与数仓基础 08、第八章 数仓实战项目 …

3-网络初识——协议

目录 1.概念 ①语法&#xff1a;即数据与控制信息的结构或格式。 ②语义&#xff1a;即需要发出何种控制信息&#xff0c;完成何种动作以及做出何种响应。 ③时序&#xff1a;即事件实现顺序的详细说明。 2.作用 3.知名协议的默认端口 4.协议分层 4.1.什么是协议分层 …

chatgpt赋能python:Python中的转置操作:理解与实践

Python中的转置操作&#xff1a;理解与实践 在Python中&#xff0c;可以使用转置操作来将矩阵或数组的行和列交换位置。转置操作不仅在数学和统计学上有广泛应用&#xff0c;也在机器学习和数据分析领域中非常重要。在本文中&#xff0c;我们将深入探讨Python中的转置操作的基…

C# | 使用Memory<T>高效地读写内存数据

C# | 使用Memory高效地读写内存数据 文章目录 C# | 使用Memory<T>高效地读写内存数据前言Memory<T>介绍示例结束语 前言 Memory<T>是C# 7.2版本中引入的一种新类型&#xff0c;可以更加高效地读写内存数据。本文将介绍它的用途以及如何使用它来优化代码。 P…

机器视觉康耐视智能相机Insight-手眼标定详细步骤

(Q有答疑)康耐视VisionPro工具与脚本入门级系列教程2023 In-Sight 智能相机包含标定手眼的工具 CalibrateGrid,用手动的标定方式,即将康耐视标定片固定在运动平台上,然后手动输入电机位置坐标,要保证电机在 X 方向移动一次,Y 方向移动一次,旋转两次角度,切旋转角度差不能…

chatgpt赋能python:Python中的绝对值函数

Python中的绝对值函数 在Python编程语言中&#xff0c;绝对值函数是一个非常重要和常用的函数。它可以帮助我们快速地计算一个数的绝对值&#xff0c;而不需要手动使用if语句来处理。在本文中&#xff0c;我们将介绍Python中的绝对值函数&#xff0c;并且讨论它的一些应用。 …

Linux 上安装 PostgreSQL——Ubuntu

打开 PostgreSQL 官网 PostgreSQL: The worlds most advanced open source database&#xff0c;点击菜单栏上的 Download &#xff0c;可以看到这里包含了很多平台的安装包&#xff0c;包括 Linux、Windows、Mac OS等 。 Linux 我们可以看到支持 Ubuntu 和 Red Hat 等各个平台…

ARC学习(1)基本编程模型认识

笔者有幸接触了arc处理器&#xff0c;今天就来简单了解一下arc的编程模型 1、ARC基本认识 ARC IP是synopsys 新思公司开发的一个系列ARC IP核&#xff0c;其是一家电子设计自动化&#xff08;EDA&#xff09;解决方案提供商。其主页地址在这里&#xff01;业务主要如下&#x…

chatgpt赋能python:Python中的按位取反

Python中的按位取反 Python中的按位取反是一种常见的操作&#xff0c;它可以让我们快速地对二进制的数字进行取反操作。在本文中&#xff0c;我们将介绍Python中的按位取反操作&#xff0c;并探讨它的用途和示例。 什么是按位取反 按位取反是一种将二进制数中的每一位进行反…

Vue之前后端交互模式

1. fetch-API的使用 1.1 init <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"…

手机常识汇总

目录 一、手机历史介绍 第一代模拟制式手机(1G) 什么是模拟网? 模拟网络与数字网络的区别 数字通信与模拟通信相比具有明显的优点: 第二代数字手机(2G) 什么是“GSM” 什么是 “CDMA”? GSM 数字机和模拟手机话音相比 什么是“GSM/CDMA 双模机”? 什么是“TDMA”…

FinChat.io,金融领域的chatgpt

投资股票是一个充满挑战的过程,随着市场的起起伏伏,要抓住每一个机会,同时规避各种风险,这需要投资者具有敏锐的洞察力和快速的决策能力。不过现在有好消息,一款人工智能聊天机器人 FinChat.io 诞生了!它能帮助投资者分析市场,挖掘有潜力的股票,并提供买卖的实时建议 --------…

Java与数据库:JDBC和ORM框架的使用和效率优化

第一章&#xff1a;引言 随着互联网的快速发展和大数据时代的到来&#xff0c;数据库在软件开发中起到了至关重要的作用。Java作为一门强大而广泛应用的编程语言&#xff0c;提供了多种与数据库交互的方式。其中&#xff0c;JDBC和ORM框架是最常用的两种方式。本文将深入探讨J…

OpenWRT 实现Exsi8单个公网ip管理与访问

一台Dell R720机器 内存256G(64G*4)硬盘SSD 8T(1T*8)搭建了一个裸金属k8s集群(对比阿里云单台4核8G的费用不相上下) 机房上架提供了一个公网ip 需要一个公网ip能实现exsi虚拟机管理 又可以让虚拟机实现web访问 是终通过OpenWRT实现 OpenWRT实现步骤 1、官网访问并下载img镜…

Kotlin笔记(零)简介

百度百科简介 2017年&#xff0c;google公司在官网上宣布Kotlin成为Android的开发语言&#xff0c;使编码效率大增。Kotlin 语言由 JetBrains 公司推出&#xff0c;这是一个面向JVM的新语言 参考资料 官网&#xff1a;https://kotlinlang.org/中文官网&#xff1a;https://w…

C++ 遍历算法

&#x1f914;遍历算法&#xff1a; &#x1f642;1.for_each 遍历容器 &#x1f50d;介绍&#xff1a; 在C中&#xff0c;for_each是一个用于遍历容器元素并对它们进行操作的算法。它通常有三个参数&#xff1a; &#x1f4d6;1. 容器的起始位置&#xff08;iterator&am…

chatgpt赋能python:Python中调换数据位置的方法

Python中调换数据位置的方法 在Python编程中&#xff0c;我们经常需要操作数据的位置&#xff0c;例如调换数组中的元素顺序、交换多个变量的值等。在本篇文章中&#xff0c;我们将介绍Python中调换数据位置的常用方法&#xff0c;并给出相应的代码示例。 1.使用临时变量交换…

ShardingSphere笔记(三):自定义分片算法 — 按月分表·真·自动建表

ShardingSphere笔记&#xff08;二&#xff09;&#xff1a;自定义分片算法 — 按月分表真自动建表 文章目录 ShardingSphere笔记&#xff08;二&#xff09;&#xff1a;自定义分片算法 — 按月分表真自动建表一、 前言二、 Springboot 的动态数据库三、 实现我们自己的动态数…

chatgpt赋能python:Python中最大公约数计算

Python中最大公约数计算 在Python编程中&#xff0c;求最大公约数是一个非常常见的需求。最大公约数一般简称为gcd&#xff0c;其定义为两个或多个整数的最大公因数。 在本篇文章中&#xff0c;我们将介绍Python中最常用的两种计算gcd的方法&#xff0c;并深入讲解它们的实现…

使用Intel ARC 750 GPU或Intel CPU硬件在GIMP上运行stable diffussion插件进行AI绘图

安装步骤&#xff1a; 1. clone代码&#xff1a; git clone https://gitee.com/cslola/openvino-ai-plugins-gimp.git 或者直接到github上下载最新 git clone https://github.com/intel/openvino-ai-plugins-gimp.git2. 安装python以来库文件 :: run install script open…